CS-bestanden compilen op CentOS (en aanroepen vanuit PHP)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan M

Johan M

25/11/2016 11:07:56
Quote Anchor link
Goedemorgen,

Ik ben me ervan bewust dat dit misschien niet echt thuishoort op PhpHulp, maar omdat ik dit wel wil aanroepen/gebruiken vanuit PHP en de hoop/verwachting dat hier mensen zijn die hier ervaring mee hebben toch hier de vraag:

Het gaat om een C# script dat te vinden is op GitHub, dit zijn verschillende .cs-bestanden die .ddd/.esm-bestanden (tachograaf-tachograaf- en chauffeurskaartbestanden in binary formaat) kunnen omzetten naar XML. Deze bestanden zijn 3 jaar oud maar iets recenters heb ik helaas nog niet gevonden. De standaard voor deze bestanden is veel ouder dus wat dat betreft zou dit hopelijk niet uit moeten maken.

Wat ik wil bereiken is het volgende: meerdere van deze .ddd/.esm-bestanden zullen geüpload gaan worden naar een server en vanuit deze map moeten ze ingelezen gaan worden naar een database. De data uit deze bestanden bevat onder andere diverse datumvelden en ik wil bijvoorbeeld inzichtelijk maken of er van een bepaald voertuig of chauffeur alle data beschikbaar is of dat zich hierin gaten in de historie bevinden. Van elk voertuig en kaart wordt namelijk periodiek zo'n bestand gemaakt maar aan de buitenkant is niet te zien welke data hierin zit.
Elk bestand met de hand controleren is zoals je zal begrijpen niet echt een optie.

De basisvraag is eigenlijk heel simpel: hoe krijg je .cs-bestanden werkend op een (in mijn geval bij voorkeur) CentOS-server? Ik kan met Linux/CentOS en PHP aardig overweg maar van C# heb ik echt geen kaas van gegeten.
Ik heb al gelezen over compilen en Mono maar ik ben echt een leek wat dit betreft. Is er iemand die mij op weg wil en kan helpen?


Voor wie zich verveelt: het tachograaf bestandsformaat, download protocol, en praktisch alle over digitale tachografen staat beschreven in http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=CONSLEG:2002R1360:20020825:NL:PDF
Gewijzigd op 25/11/2016 13:06:00 door Johan M
 
PHP hulp

PHP hulp

22/05/2024 06:56:58
 
- Ariën  -
Beheerder

- Ariën -

25/11/2016 12:08:47
Quote Anchor link
Ik ben niet zo bekend met C#, maar volgens mij is dit niet voor Linux geschreven, maar uitsluitend voor Windows. Op haast alles wat ik tegenkom lees ikw at over het .Net Framework wat typisch iets van Microsoft is.
 
Ben van Velzen

Ben van Velzen

25/11/2016 14:13:40
Quote Anchor link
Je kunt met mono aan de slag, specifiek mod_mono wanneer je iets op het internet wil gebruiken. Maar gezien de hoeveelheid code ben je waarschijnlijk sneller klaar als je de code gewoon port naar bijvoorbeeld php.
 
Johan M

Johan M

25/11/2016 14:45:03
Quote Anchor link
"Gewoon porten naar PHP" klinkt erg goed :)
Alleen zou ik daar ook een beetje hulp bij nodig hebben...
Gewijzigd op 25/11/2016 15:34:31 door Johan M
 
Johan M

Johan M

30/11/2016 22:36:13
Quote Anchor link
Wie helpt mij verder?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

$vFile
= file_get_contents('bestand.esm');

$aResult = array();
for($l=strlen($vFile), $i=0; $i<$l; $i++)
{

    $aResult[] = ord($vFile[$i]);
}


/* Output:

Array
(
    [0] => 0
    [1] => 2
    [2] => 0
    [3] => 0
    [4] => 25
    [5] => 0
    [6] => 0
    [7] => 6
    [8] => 110
    [9] => 174
    [10] => 17
    [11] => 17
    [12] => 1
    [13] => 48
    [14] => 78
    [15] => 76
    [16] => 68
    [17] => 84
    [18] => 95
    [19] => 50
    [20] => 107
    [21] => 57
    [22] => 48
enz.
*/
?>


Echter als ik met chr() deze value's wil omzetten naar leestekens dan blijft het resultaat blanco.
Als ik chr(85) rechtstreeks doe dan wordt er wel een U weergegeven bijvoorbeeld. Is er een reden voor waarom dit met variabelen niet lukt? Kan iemand mij een manier adviseren hoe ik werkend kan krijgen?
Gewijzigd op 30/11/2016 22:41:54 door Johan M
 
Johan M

Johan M

02/12/2016 10:52:41
Quote Anchor link
Als ik $vFile[$i] zelf probeer te returnen blijft deze ook blanco en met chr($vFile[$i]) rechtstreeks ook.
Ik heb nooit eerder met de functies ord() en chr() gewerkt, verwacht ik een output die nooit komt?
Is er een manier om $vFile[$i] om te zetten naar een 'normaal' leesteken? Zoals hierboven te zien worden er verschillende karakters herkend maar waarom blijven deze bij chr() of bij rechtstreekse benadering leeg?
 
John D

John D

02/12/2016 14:31:11
Quote Anchor link
Zijn de bestanden uberhaupt wel zinvol te openen? Ik lees dit hierover:
Deze bestanden hebben een standaard format “.ddd of .esm”. Beide wettelijk goedgekeurde bestanden. Deze bestanden zijn heel erg goed beveiligd tegen fraude. Het is daarom niet mogelijk deze te openen op uw computer zonder speciale software zoals RS DigiTac?? http://www.rs-roadsoft.nl/uploads/Handleiding%20RS%20DigiTac%20-%20Digitale%20Tachograaf%20Software.pdf
Gewijzigd op 02/12/2016 14:32:53 door John D
 
Johan M

Johan M

02/12/2016 14:36:34
Quote Anchor link
Met C# is het in ieder geval te doen (zie hierboven) dus er is ongetwijfeld een manier.
 
Johan M

Johan M

08/12/2016 11:52:35
Quote Anchor link
Ik heb even bij wijze van 'quick-and-dirty oplossing' de volgende array gemaakt omdat ik met chr() geen resultaat krijg:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
$aASCII = array(
...
    10 => '<br />',
...
    32 => ' ',
    33 => '!',
    34 => '\"',
    35 => '#',
    36 => '$',
    37 => '%',
    38 => '&',
    39 => '\'',
    40 => '(',
    41 => ')',
    42 => '*',
    43 => '+',
    44 => ',',
    45 => '-',
    46 => '.',
    47 => '/',
    48 => '0',
    49 => '1',
    50 => '2',
    51 => '3',
...
    56 => '8',
    57 => '9',
    58 => ':',
    59 => ';',
    60 => '<',
    61 => '=',
    62 => '>',
    63 => '?',
    64 => '@',
    65 => 'A',
    66 => 'B',
    67 => 'C',
    68 => 'D',
...
    88 => 'X',
    89 => 'Y',
    90 => 'Z',
    91 => '[',
    92 => '\\',
    93 => ']',
    94 => '^',
    95 => '_',
    96 => '`',
    97 => 'a',
    98 => 'b',
    99 => 'c',
    100 => 'd',
    101 => 'e',
    102 => 'f',
    103 => 'g',
    104 => 'h',
    105 => 'i',
    106 => 'j',
...
enz.

Als ik hier de waardes uit $aResult tegenaan zet dan krijg ik heel veel te zien, onder andere kentekens, chauffeurnaam, standplaats en heel veel dat ik nog niet kan ontcijferen. Om je vraag te beantwoorden: het lijkt dus zeker wel zinvol. Ik vermoed dat chr() een bepaald teken o.i.d. als output geeft dat een conflict oplevert waardoor het resultaat blanco blijft, zou dat kunnen?
 
Ben van Velzen

Ben van Velzen

08/12/2016 13:05:00
Quote Anchor link
De reden dat chr() praktisch geen output geeft is doordat je voor het overgrote deel nonprintable characters etc hebt, die uiteraard deel zijn van het formaat. Wat je in het aangehaalde C# script ziet is dat bestanden worden gelezen als bytestream, op zoek gegaan wordt naar kengetallen (de magics) en op basis hiervan actie wordt ondernomen. Het is hoe dan ook niet zinvol om esm bestanden gewoon te outputten, daar kom je niet verder mee.

Het ziet er allemaal op het oog niet heel complex uit, ik heb alleen geen voorbeeldbestand om eens een kijkje te nemen.
Gewijzigd op 08/12/2016 13:09:53 door Ben van Velzen
 
Johan M

Johan M

08/12/2016 13:34:06
Quote Anchor link
Ik stuur je e.e.a. toe via de mail Ben!
 
Thomas van den Heuvel

Thomas van den Heuvel

08/12/2016 14:31:33
Quote Anchor link
Johan M op 02/12/2016 14:36:34:
Met C# is het in ieder geval te doen (zie hierboven) dus er is ongetwijfeld een manier.

Let wel, van github:
Quote:
The code does not validate the digital signatures in a file, so it's possible someone could provide a fraudulent data file and we would not detect it. If this is important to you, you are probably stuck with using the available commercial software to process your data files.

EDIT: daarnaast heb je ook nog te maken met de character encoding van de (karakters in de) bestanden en tevens met extra versleuteling op byte-niveau (als ik de code vlug bekijk wordt hier nogal mee gejongleerd). Deze kun je mogelijk niet "zomaar" 1:1 afdrukken naar je scherm.
Gewijzigd op 08/12/2016 14:43:56 door Thomas van den Heuvel
 
Johan M

Johan M

08/12/2016 14:39:21
Quote Anchor link
Dit is in ons geval naar mijn mening geen probleem, deze bestanden worden rechtstreeks vanuit de auto's vanuit de tachograaf gedownload.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.