Esecuzione di comandi linux con PHP

Sto cercando di eseguire un command linux tramite uno script da row di command PHP, che non è un problema usando il command exec.

Il problema è che il command che sto eseguendo (mysqldump) genera un messaggio di errore se qualcosa non va (per esempio, utente / password non sono corretti). Non riesco a essere in grado di catturare questo errore per poterlo loggare. Stampa questo errore sullo schermo.

Come posso far sì che questo errore non venga printingto sullo schermo, ma invece di inserirlo in una variabile da utilizzare nel mio script?

Grazie!

Usa il popen per eseguire il process. L'esempio n. 2 in questa pagina mostra esattamente ciò che stai cercando:

<?php error_reporting(E_ALL); /* Add redirection so we can get stderr. */ $handle = popen('/path/to/spooge 2>&1', 'r'); echo "'$handle'; " . gettype($handle) . "\n"; $read = fread($handle, 2096); echo $read; pclose($handle); ?> 
 exec("mysqldump -u user -p passwod database > outputfile.sql 2> error.log"); 

Devi redirect lo stderr allo stdout , così puoi catturarlo. Questo esempio indirizza lo stdout a devnull (ignorandolo in questo modo) e instrada lo stderr a te:

 exec('ls * 2>&1 1>/dev/null'); 

Non sono troppo entusiasmante in Unix (New Years Resolution …) ma queste funzioni sembrano utili:

  • shell_exec – restituisce il risultato sotto forma di string.
  • passthru – Sembra che tu possa eseguire questo come: passthru('command', $result); e quindi usa $result .

provato a usare i backtick?

 $ var = `command`;

Quanto segue invierà i messaggi di stderr nello stesso posto dell'output normale.

 exec("mysql_dump blah 2>&1",$output,$return_val) if($return_val !== 0) echo "there was an error" 

2> & 1 significa redirect i messaggi di stderr nella stessa posizione di stdout e quindi verranno caricati nell'arrays di output.

Hai guardato il command system () ? È passato un po 'di tempo da quando ho fatto PHP, ma suona un campanello.