2011-10-01 15 views
18

Ho bisogno di eseguire più script (5 script) tramite cmd, voglio assicurarmi che fino a quando il primo script non termina il secondo non dovrebbe iniziare. Così dopo il primo script, quindi solo il secondo dovrebbe essere poi terzo e così via .. Attualmente sto usando il seguente codice per fare questoCome eseguire i comandi della shell in modo sincrono in PHP

exec ("php phpscript1.php "); 
exec ("php phpscript2.php "); 
exec ("php phpscript3.php "); 
exec ("php phpscript4.php "); 
exec ("php phpscript5.php "); 

Credo che questi script vengono eseguiti in modo asincrono, qualsiasi ragazzi suggerimento in modo che questi script può essere eseguito in modo sincrono.

+1

Quando si dice 'via cmd', vuoi dire utilizzando il prompt dei comandi di Windows, o stai usando una shell come bash, sh, zsh, ecc? – Michael

+0

Sono abbastanza sicuro che non stiano eseguendo * in modo asincrono * al momento, al contrario. Corrono uno dopo l'altro, che è chiamato "sincrono". –

+0

non su Windows usando la shell – Rahul

risposta

50

PHP attende che l'esecuzione del programma chiamato sia terminata, prima di elaborare la riga successiva, a meno che non si usi & alla fine della stringa per eseguire il programma in background.

+1

Mi hai salvato da un esperimento inutile, e ti saluto. –

+0

@stivlo: lo stesso qui, grazie fratello. Voglio solo chiedere se il comando viene eseguito da client diversi, ad es. Voglio interrompere exec finchè il primo non è terminato, se è sparato da 2 PC client contemporaneamente (il mio exec esegue un altro programma hardware che non supporta l'esecuzione parallela) – mokNathal

7

Se ho ragione, esegui script php all'interno di uno script php.

Normalmente, php attende l'esecuzione di exec ("php phpscript1.php"); per terminare prima di elaborare la riga successiva.

Per evitare ciò, è sufficiente reindirizzare l'output su /dev/null o un file ed eseguirlo in background.

Ad esempio: exec ("php phpscript1.php >/dev/null 2>&1 &");.

+1

@ Bill'o: la modifica non è valida. Il tuo codice passa '/ dev/null' come argomento allo script PHP, ma non esegue il reindirizzamento. – Dennis

+0

davvero un mio errore, ho digitato un po 'troppo veloce –

4

Controlla la sintassi della funzione exec su php.net. Vedrete che exec non esegue nulla in modo asincrono per impostazione predefinita.

exec ha altri due parametri. Il terzo, return_var può fornire un suggerimento se lo script è stato eseguito correttamente o se è stata attivata un'eccezione. È possibile utilizzare tale variabile per verificare se è possibile eseguire gli script successivi.

Provalo e facci sapere se funziona per te.

Problemi correlati