質問
次の点で少し問題があります:
この行を実行すると:
echo exec(createDir($somevariable));
このエラーが表示されます:
Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32
任意のアイデア。
ありがとう。
他のヒント
exec を使用すると、システムコールを実行できます。コマンドラインを使用します。 PHP関数を実行しても何もする必要はありません。
ディレクトリを作成するには、次を実行できます。
exec( 'mkdir [NAME OF DIRECTORY]' );
createDir()
関数は何も返さないと思います。また、 $ somevariable
も適切な値に設定されていることを確認する価値があるかもしれません
exec()の目的を誤解しています。ディレクトリを作成するだけであれば、mkdir()を使用する必要があります。
他の投稿から得たものだと思うし、実際にやりたいことをコメントしている:
createDir()
は、自分で作成したPHP関数だと思います。単にディレクトリを作成するだけではありません-移入します。時間がかかる場合があります。
何らかの理由で、 createDir()
の動作が完了する前に次のコマンドが実行されると考えているので、 execを使用して
これを回避できます。 createDir()
を呼び出して()
これがうまくいかない場合はコメントで教えてください。この回答を削除します。
createDir()
が返された後、実際に動作し続ける可能性は低いようです(もしそうなら、それを「非同期」と呼びます)。プログラマーは、非同期にするために邪魔にならないようにする必要があります。その前提を確認してください。
それでも、 exec()
はPHP関数を呼び出すためのものではありません。これは、シェルコマンド(コマンドプロンプトで入力する種類)を呼び出すためのものです。私たちの多くが観察しているように、あなたが非常に注意しない限り、それは避けられるべきです-あなたがユーザーに任意のシェルコマンドを実行することを許すという危険です。
非同期関数が完了するのを本当に待たなければならない場合は、いくつかの方法があります。
最初の方法では、非同期関数が受け入れやすい方法で記述されている必要があります。一部のAPIでは、非同期ジョブを開始して、「ハンドル」を取得し、他の処理を実行してから、ハンドルから戻りステータスを取得できます。次のようなもの:
handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);
getResultsは、ジョブが終了するまで待機します。
2番目の方法はあまり良くなく、APIの有用性が低い場合に使用できます。残念ながら、ジョブが終了したという手がかりを見つけて、終了するまでポーリングするだけです。
while( checkJobIsDone() == false ) {
sleep(some time interval);
}
createDir()には戻り値がないと思います。
exec(" mkdir $ somevariable");を試してください