Frage

Ich habe ein kleines Problem mit dem folgenden:

Wenn ich diese Zeile ausführen:

echo exec(createDir($somevariable));

Ich bekomme diese Fehlermeldung:

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

Irgendwelche Ideen.

Danke.

War es hilfreich?

Lösung

exec() erwartet ein String-Argument, das es auf Ihr Betriebssystem passieren würde ausgeführt werden. Mit anderen Worten, dies ist ein Portal für die Befehlszeile des Servers.

Ich bin mir nicht sicher, welche Funktion createDir() ist, aber es sei denn, es ist eine gültige Befehlszeile String zurückkehrt, ist es wahrscheinlich aus diesem Grund versagen.

In Linux, möchten Sie vielleicht etwas tun, wie

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

... auf der anderen Seite, Sie verwenden exec() unter allen Umständen verzichten sollte. Was Sie hier tun können, stattdessen ist es, einen Blick auf, mkdir()

Andere Tipps

Mit exec System ausführen können Anrufe wie wenn Sie waren über die Befehlszeile. Es hat sich nicht, etwas zu tun mit PHP-Funktionen ausgeführt werden.

ein Verzeichnis erstellen Sie Folgendes tun können:

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

Ich würde vermuten, dass Ihre createDir() Funktion nichts zurückliefert. Könnte auch wert sein, dass $somevariable Überprüfung auch etwas Vernünftiges gesetzt

Sie sind Mißverständnis den Zweck exec (). Wenn alles, was Sie tun mögen, ein Verzeichnis ist zu erstellen, dann sollten Sie verwenden mkdir ().

Ich glaube, ich von anderen Beiträgen abgeleitet haben und kommentiert, was Sie eigentlich tun wollen:

Ich denke, createDir() ist eine PHP-Funktion, die Sie selbst geschrieben haben. Es ist mehr als nur ein Verzeichnis machen -. Es auffüllt es, und das könnte einige Zeit dauern

Aus irgendeinem Grund glauben Sie, dass der nächste Befehl ausgeführt wird, bevor createDir() Arbeit beendet ist, und Sie dachten, dass createDir() durch Aufrufen exec() verwenden Sie diese vermeiden können.

Sag mir, in einem Kommentar, wenn diese Art und Weise aus, und ich werde diese Antwort löschen.

Es scheint unwahrscheinlich, dass createDir() wirklich funktioniert nicht halten, nachdem es zurückgegeben wird (wenn es der Fall ist, dann nennen wir das ‚asynchron‘). Es würde die Programmierer benötigt aus dem Weg zu gehen, um es asynchron zu machen. Also diese Annahme überprüfen.

Auch so exec() ist PHP-Funktionen nicht für den Aufruf. Es ist für Shell-Befehle aufrufen (die Art von Sache, die Sie an einer Eingabeaufforderung eingeben). Wie viele von uns beobachtet haben, ist es zu vermeiden, wenn Sie sehr vorsichtig sind -. Das Risiko ist, dass Sie ein Benutzer erlauben, beliebige Shell-Befehle auszuführen

Wenn Sie wirklich warten müssen, für eine asynchrone Funktion abgeschlossen ist, gibt es ein paar Möglichkeiten, dies getan werden kann.

Der erste Weg erfordert, dass die asynchrone Funktion in einer Weise zugänglich geschrieben. Einige APIs können Sie einen asynchronen Job starten, das Sie einen ‚Griff‘, dann einige andere Sachen tun, dann erhalten den Rückgabestatus von dem Griff. So etwas wie:

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

getResults würde warten, bis der Job beendet.

Der zweite Weg ist nicht so gut, und kann verwendet werden, wenn die API weniger hilfreich ist. Leider ist es eine Angelegenheit einen Hinweis zu finden, dass der Auftrag abgeschlossen ist, und Polling bis es ist.

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

Ich vermute, CreateDir () hat keinen Rückgabewert.

Versuchen exec("mkdir $somevariable");

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top