Domanda

Qualcuno può dirmi come eseguire un file .bat da uno script PHP?

Ho provato:

exec("C:\[path to file]");
system("C:\[path to file]");

Niente funziona. Ho controllato i manuali di PHP e ho cercato su Google ma non riesco a trovare una buona risposta. Qualcuno sa dove sto sbagliando?

Sto eseguendo Windows 2003 Server e ho eseguito correttamente il file .bat e fa quello che mi serve; Devo solo essere in grado di avviarlo programmaticamente.

È stato utile?

Soluzione

Potrebbe essere necessario eseguirlo tramite cmd , ad esempio:

system("cmd /c C:[path to file]");

Altri suggerimenti

<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>

Quando usi la funzione exec () , è come se avessi un terminale cmd aperto e stai digitando i comandi direttamente su di esso.

Usa virgolette singole come questa $ str = exec ('start / B Path \ to \ batch.bat');
/ B significa che il pipistrello verrà eseguito in background, quindi il resto del php continuerà dopo aver eseguito quella linea, al contrario di < codice> $ str = exec ('start / comando B / C', $ risultato); dove viene eseguito comando e quindi risultato viene archiviato per un uso successivo.

PS: Funziona sia per Windows che per Linux.
Maggiori dettagli qui http://www.php.net/manual/en/function.exec .php :)

<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 

sulla mia macchina Windows 8 che esegue IIS 8 Posso eseguire il file batch semplicemente inserendo il nome di pipistrelli e dimenticandone il percorso. O mettendo la mazza in c: \ windows \ system32 non chiedermi come funziona ma funziona. LOL

$ test = shell_exec (" C: \ windows \ system32 \ cmd.exe / c $ streamnumX.bat ");

Questo frammento proviene da un codice funzionante.

Puoi attivare il file bat non solo dalla GUI di Windows o dall'Utilità di pianificazione, ma direttamente dallo script PHP quando ne hai bisogno. Ma nella maggior parte dei casi avrà un'esecuzione per 30-60 sec. a seconda della configurazione di PHP. Se il lavoro nel file BAT è lungo e non vuoi congelare i tuoi script PHP, devi eseguire il fork del lavoro BAT come un altro processo usando php.exe e non essere affidabile da Apache.

Funziona in modalità background in Windows, visto come processi separati cmd.exe e php.exe da Task Manager che non arrestano Apache Script PHP. I messaggi prodotti dal tuo script possono essere archiviati e recuperati tramite file di registro.

Nel mio caso in file_scanner.php faccio alcuni pesanti calcoli in loop per una vasta gamma di file che possono durare alcune ore con la funzione php sleep () non sovraccarico della CPU.

Il risultato del poiner di successo dal file $ r che puoi interrogare tramite ajax se vuoi conoscere il successo o l'inizio del lavoro. Nel mio caso file_scanner.php scrive il file di registro con messaggi somefile.jpg - OK che puoi caricare nella tua UI con AJAX ogni pochi secondi per mostrare i progressi.

PHP

/**
 * Runs bat file in background mode
 *
 */
 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat'; 
    $r=pclose(popen($c, 'r')); 
    return json_encode(array('result'=>$r));

 }

BAT

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top