2011-09-13 6 views
1

経由at`コマンドは、ここで私は、これは簡単なことだろうと思ったUnixの `PHP


system('echo \'php -f /path/to/my/php/file.php\' | at 1700'); ...新しいatジョブを作成するために私のコードだとうまく動作しますが、悲しいかな、何も起こらないだろう!

echo \'php -f /path/to/my/php/file.php\' | at 1700をsshで実行すると、すべて正常に動作します。

これは権限の問題ですか?私はPHPが新しいatジョブを作成することを許可されていないのですか?

答えて

1

ちょうど、PHPスクリプトからシステムコマンドを実行することが許可されていることを確認する必要があります。

多くのサーバーでこの機能が無効になっています。

しかし、これを元に戻したい場合は、php.iniファイルで行うことができますが、safe_modeをoffにする必要があります。

ユーザー提供のデータをこの関数に渡すことを許可する場合は、escapeshellarg()またはescapeshellcmd()を使用して、ユーザーがシステムを欺いて任意のコマンドを実行できないようにします。

この機能を使用してプログラムを開始する場合、プログラムをバックグラウンドで実行し続けるには、プログラムの出力をファイルまたは別の出力ストリームにリダイレクトする必要があります。そうしないと、プログラムの実行が終了するまでPHPが停止します。

注:セーフモードが有効な場合、safe_mode_exec_dir内のファイルのみを実行できます。現実的な理由から、現在、実行可能ファイルへのパスにはコンポーネントが含まれていません。