0

次の点で少し問題があります。

この行を実行すると:

echo exec(createDir($somevariable));

次のエラーが表示されます。

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

何か案は。

ありがとう。

4

6 に答える 6

2

exec()実行するオペレーティング システムに渡す文字列引数が必要です。つまり、これはサーバーのコマンド ラインへのポータルです。

関数が何であるかはわかりませんcreateDir()が、有効なコマンドライン文字列を返さない限り、それが原因で失敗している可能性があります。

Linuxでは、次のようなことをしたいかもしれません

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

...一方、使用は絶対に控えてくださいexec()。代わりに、ここでできることは、mkdir()

于 2009-01-02T12:43:01.963 に答える
0

他の投稿やコメントから、あなたが実際にやりたいことを導き出したと思います。

createDir()自分で書いたPHP関数だと思います。ディレクトリを作成するだけでなく、データを格納します。これには時間がかかる場合があります。

何らかの理由で、作業が完了する前に次のコマンドが実行されると信じており、usingをcreateDir()呼び出すことでこれを回避できると考えました。createDir()exec()

これがうまくいかない場合はコメントで教えてください。この回答を削除します。

返された後も実際に動作し続ける可能性は低いようですcreateDir()(動作する場合、それを「非同期」と呼びます)。非同期にするためには、プログラマーが手を抜かなければなりません。そこで、その仮定を確認してください。

それでも、exec()PHP 関数を呼び出すためのものではありません。これは、シェル コマンド (コマンド プロンプトで入力するようなもの) を呼び出すためのものです。私たちの多くが観察しているように、非常に注意しない限り、これは避けるべきです。リスクは、ユーザーが任意のシェル コマンドを実行できるようにすることです。

非同期関数が完了するまで本当に待たなければならない場合は、いくつかの方法があります。

最初の方法では、非同期関数が適切な方法で記述されている必要があります。一部の API では、「ハンドル」を提供する非同期ジョブを開始してから、他の処理を実行してから、ハンドルから戻りステータスを取得できます。何かのようなもの:

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

getResults は、ジョブが完了するまで待機します。

2 番目の方法はあまり良くなく、API があまり役に立たない場合に使用できます。残念ながら、ジョブが終了したという何らかの手がかりを見つけて、終了するまでポーリングする必要があります。

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}
于 2009-01-02T13:03:57.990 に答える
0

execを使用 すると、コマンド ラインを使用しているかのようにシステム コールを実行できます。PHP 関数の実行に関して何もする必要はありません。

ディレクトリを作成するには、次のようにします。

exec( 'mkdir [NAME OF DIRECTORY]' );
于 2009-01-02T12:40:45.977 に答える
0

exec() の目的を誤解しています。ディレクトリを作成するだけの場合は、mkdir() を使用する必要があります。

于 2009-01-02T12:40:48.707 に答える
0

createDir()あなたの関数は何も返さないと思います。$somevariableまた、適切なものに設定されていることも確認する価値があるかもしれません

于 2009-01-02T12:42:42.663 に答える
-2

createDir() には戻り値がないと思います。

試すexec("mkdir $somevariable");

于 2009-01-02T12:40:16.913 に答える