Domanda

Sto riscontrando un piccolo problema con quanto segue:

Quando eseguo questa riga:

echo exec(createDir($somevariable));

Ottengo questo errore:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

Qualsiasi idea.

Grazie.

È stato utile?

Soluzione

exec () si aspetta un argomento stringa, che passerebbe a il tuo sistema operativo da eseguire. In altre parole, questo è un portale per la riga di comando del server.

Non sono sicuro di quale sia la funzione createDir () , ma a meno che non restituisca una stringa della riga di comando valida, probabilmente non funziona a causa di ciò.

In Linux, potresti voler fare qualcosa del genere

exec('/usr/bin/mkdir '.$path);

... d'altra parte, dovresti astenervi dall'utilizzare exec () a tutti i costi. Quello che puoi fare qui, invece, è dare un'occhiata a mkdir ()

Altri suggerimenti

Con exec puoi eseguire chiamate di sistema come se fossi usando la riga di comando. Non ha nulla a che fare con l'esecuzione delle funzioni PHP.

Per creare una directory è possibile effettuare le seguenti operazioni:

exec( 'mkdir [NAME OF DIRECTORY]' );

Immagino che la tua funzione createDir () non restituisca nulla. Potrebbe anche valere la pena verificare che $ somevariable sia impostato su qualcosa di sensato

Stai fraintendendo lo scopo di exec (). Se tutto ciò che vuoi fare è creare una directory, dovresti usare mkdir ().

Penso di aver tratto da altri post e commenti ciò che vuoi veramente fare:

Penso che createDir () sia una funzione PHP che hai scritto tu stesso. Fa molto di più che creare una directory: la popola e potrebbe richiedere del tempo.

Per qualche motivo ritieni che il comando successivo venga eseguito prima che createDir () abbia finito di funzionare e hai pensato che invocando createDir () usando exec () potresti evitarlo.

Dimmi in un commento se questa è un'uscita, ed eliminerò questa risposta.

Sembra improbabile che createDir () continui davvero a funzionare dopo che è stato restituito (se lo fa, lo chiamiamo "asincrono"). Richiederebbe al programmatore di fare di tutto per renderlo asincrono. Quindi controlla questo presupposto.

Anche così, exec () non è per invocare funzioni PHP. Serve per invocare i comandi della shell (il tipo di cose digitate al prompt dei comandi). Come molti di noi hanno osservato, va evitato se non si è molto attenti, il rischio è che si consenta a un utente di eseguire comandi di shell arbitrari.

Se devi davvero attendere il completamento di una funzione asincrona, ci sono un paio di modi per farlo.

Il primo modo richiede che la funzione asincrona sia stata scritta in modo modificabile. Alcune API ti consentono di avviare un lavoro asincrono, che ti darà un 'handle', quindi farà qualche altra cosa, quindi otterrà lo stato di ritorno dall'handle. Qualcosa del tipo:

handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);

getResults aspetterebbe fino al termine del lavoro.

Il secondo metodo non è altrettanto valido e può essere utilizzato quando l'API è meno utile. Sfortunatamente, si tratta di trovare qualche indizio sul fatto che il lavoro è finito e di effettuare il polling fino a quando non lo è.

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}

Suppongo che createDir () non abbia un valore di ritorno.

Prova exec (" mkdir $ somevariable ");

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top