CS-bestanden compilen op CentOS (en aanroepen vanuit PHP)
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
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.
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.
Alleen zou ik daar ook een beetje hulp bij nodig hebben...
Gewijzigd op 25/11/2016 15:34:31 door Johan M
Code (php)
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
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.
*/ ?>
$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
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?
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
Met C# is het in ieder geval te doen (zie hierboven) dus er is ongetwijfeld een manier.
Code (php)
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
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.
...
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?
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
Ik stuur je e.e.a. toe via de mail Ben!
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
Dit is in ons geval naar mijn mening geen probleem, deze bestanden worden rechtstreeks vanuit de auto's vanuit de tachograaf gedownload.