Question

J'ai un petit problème avec ce qui suit:

Quand j'exécute cette ligne:

echo exec(createDir($somevariable));

Je reçois cette erreur:

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

Toutes les idées.

Merci.

Était-ce utile?

La solution

exec () attend un argument de chaîne, auquel il serait transmis. votre système d'exploitation à exécuter. En d’autres termes, il s’agit d’un portail vers la ligne de commande du serveur.

Je ne sais pas quelle est la fonction createDir () , mais si elle ne renvoie pas une chaîne de ligne de commande valide, elle échouera probablement à cause de cela.

Sous Linux, vous souhaiterez peut-être faire quelque chose comme

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

... d'autre part, vous devriez vous abstenir d'utiliser exec () à tout prix. Ce que vous pouvez faire ici est plutôt de regarder mkdir ()

Autres conseils

Avec exec , vous pouvez exécuter des appels système comme si vous étiez en utilisant la ligne de commande. Cela n’a rien à voir avec l’exécution de fonctions PHP.

Pour créer un répertoire, vous pouvez procéder comme suit:

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

Je suppose que votre fonction createDir () ne renvoie rien. Cela vaut également la peine de vérifier que $ somevariable est également défini sur quelque chose de raisonnable

Vous ne comprenez pas le but de exec (). Si vous souhaitez simplement créer un répertoire, vous devez utiliser mkdir ().

Je pense avoir tiré d'autres articles et commentaires de ce que vous voulez réellement faire:

Je pense que createDir () est une fonction PHP que vous avez écrite vous-même. Cela ne se limite pas à la création d’un répertoire: il le remplit, ce qui peut prendre un certain temps.

Pour une raison quelconque, vous pensez que la commande suivante est exécutée avant que createDir () ne soit plus opérationnel, et vous avez pensé qu'en appelant createDir () , à l'aide de exec () vous pourriez éviter cela.

Dites-moi, dans un commentaire, si le problème est résolu et je supprimerai cette réponse.

Il semble peu probable que createDir () continue à fonctionner après son retour (s'il le fait, nous appelons cela "asynchrone"). Il faudrait que le programmeur fasse tout son possible pour le rendre asynchrone. Vérifiez donc cette hypothèse.

Même dans ce cas, exec () ne permet pas d'appeler des fonctions PHP. C'est pour appeler des commandes shell (le genre de chose que vous tapez à une invite de commande). Comme beaucoup d’entre nous l’ont observé, il faut éviter cela à moins d’être très prudent - vous autorisez un utilisateur à exécuter des commandes de shell arbitraires.

Si vous devez vraiment attendre la fin d'une fonction asynchrone, vous pouvez le faire de plusieurs manières.

La première méthode nécessite que la fonction asynchrone ait été écrite de manière flexible. Certaines API vous permettent de démarrer un travail asynchrone, qui vous donnera un "descripteur", effectuera d'autres tâches, puis obtiendra le statut de retour du descripteur. Quelque chose comme:

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

getResults attendrait la fin du travail.

La deuxième solution est moins bonne et peut être utilisée lorsque l'API est moins utile. Malheureusement, il s’agit de trouver l’indice que le travail est terminé et d’interroger jusqu’à ce qu’il le soit.

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

J'imagine que createDir () n'a pas de valeur de retour.

Essayez exec ("mkdir $ somevariable");

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top