deggial
06-03-2007, 09:44
Ciao a tutti, ho un problema che non so bene identificare, forse ha a che fare con la funzione system di PHP.
Il riassunto del discorso è questo: ho un programma fatto in C, se lo eseguo manualmente da prompt funziona bene, se lo richiamo tramite funzione system di PHP funziona male.
Vediamo in dettaglio:
Programma C (compilato con mingw):
Prende un file binario in formato strano, e ne estrae delle informazioni. Il risultato è un file di testo tipo questo:
2007-02-11,09:17:22,0,1,7,50,280,42,39,0
2007-02-11,09:17:21,0,1,7,49,273,4022,37,0
2007-02-11,09:16:40,0,1,9,87,672,666,162,0
2007-02-11,09:16:33,0,1,9,79,714,65535,157,0
Particolare importanza ha la data, come vi spiegherò dopo.
Se lo lancio da prompt di dos funziona bene, se creo un .bat e lancio il bat funziona bene nello stesso modo.
Il problema si ha se provo a lanciarlo da PHP (PHP 5.2.0, Apache 2.2.3).
Lo lancio sia in questo modo:
$sis1= system ("C:\\EXE\\estrai_dati.exe file_da_estrarre");
// file_da_estrarre è appunto il file binario da cui estrarre le info
che in questo modo:
$sis1= system ("C:\\EXE\\estrai.bat");
con i file estrai.bat che altro non è che
C:\EXE\estrai_dati.exe file_da_estrarre
In entrambi i casi il risultato è il seguente:
2007-02-11",09:17:22,0,1,7,50,280,42,39,0
2007-02-11",09:17:21,0,1,7,49,273,4022,37,0
2007-02-11",09:16:40,0,1,9,87,672,666,162,0
2007-02-11",09:16:33,0,1,9,79,714,65535,157,0
Notate il doppio apice che segue la data.
Per completezza, vi posso dire il programma C non estrae la data dal contenuto del file, ma dal suo nome.
In realtà il nome del file_da_estrarre è una sequenza di 10 cifre, che identificano un timestamp unix (cioè il numero di secondi passato dalla mezzanotte del 1 gennaio 1970).
Ad esempio, il file si può chiamare 1171181844, che corrisponde al 2007-11-02 alle 09:17:24.
Io da lì estraggo anno mese e giorno sotto forma di interi (con una *gmtime), converto in char (con una itoa), aggiungo uno "0" davanti ai mesi e giorni con una sola cifra e formo la stringa AAAA-MM-GG (perchè mi serve così).
Come detto, finchè lo lancio direttamente funziona, se lo lancio tramite php non funziona.
Qualcuno ha idea di cosa può essere?
Grazie a tutti, e scusate se mi sono dilungato, ma spero almeno di essere stato chiaro.
Il riassunto del discorso è questo: ho un programma fatto in C, se lo eseguo manualmente da prompt funziona bene, se lo richiamo tramite funzione system di PHP funziona male.
Vediamo in dettaglio:
Programma C (compilato con mingw):
Prende un file binario in formato strano, e ne estrae delle informazioni. Il risultato è un file di testo tipo questo:
2007-02-11,09:17:22,0,1,7,50,280,42,39,0
2007-02-11,09:17:21,0,1,7,49,273,4022,37,0
2007-02-11,09:16:40,0,1,9,87,672,666,162,0
2007-02-11,09:16:33,0,1,9,79,714,65535,157,0
Particolare importanza ha la data, come vi spiegherò dopo.
Se lo lancio da prompt di dos funziona bene, se creo un .bat e lancio il bat funziona bene nello stesso modo.
Il problema si ha se provo a lanciarlo da PHP (PHP 5.2.0, Apache 2.2.3).
Lo lancio sia in questo modo:
$sis1= system ("C:\\EXE\\estrai_dati.exe file_da_estrarre");
// file_da_estrarre è appunto il file binario da cui estrarre le info
che in questo modo:
$sis1= system ("C:\\EXE\\estrai.bat");
con i file estrai.bat che altro non è che
C:\EXE\estrai_dati.exe file_da_estrarre
In entrambi i casi il risultato è il seguente:
2007-02-11",09:17:22,0,1,7,50,280,42,39,0
2007-02-11",09:17:21,0,1,7,49,273,4022,37,0
2007-02-11",09:16:40,0,1,9,87,672,666,162,0
2007-02-11",09:16:33,0,1,9,79,714,65535,157,0
Notate il doppio apice che segue la data.
Per completezza, vi posso dire il programma C non estrae la data dal contenuto del file, ma dal suo nome.
In realtà il nome del file_da_estrarre è una sequenza di 10 cifre, che identificano un timestamp unix (cioè il numero di secondi passato dalla mezzanotte del 1 gennaio 1970).
Ad esempio, il file si può chiamare 1171181844, che corrisponde al 2007-11-02 alle 09:17:24.
Io da lì estraggo anno mese e giorno sotto forma di interi (con una *gmtime), converto in char (con una itoa), aggiungo uno "0" davanti ai mesi e giorni con una sola cifra e formo la stringa AAAA-MM-GG (perchè mi serve così).
Come detto, finchè lo lancio direttamente funziona, se lo lancio tramite php non funziona.
Qualcuno ha idea di cosa può essere?
Grazie a tutti, e scusate se mi sono dilungato, ma spero almeno di essere stato chiaro.