0

「標準」サイトからサイトを作成するために使用されるphpスクリプトを書いています。UNIXシェルコマンドはたくさんありますが、エラーの表示に問題があることがわかりました。

例:サイトフォルダがまだ存在しないことを確認する必要があります。

$ls_newsite = exec('ls /vhosts/'.$sitename, $output, $error_code);
if ($error_code == 0) {
    Shell::error('This site already exists in /vhosts/');
}
Shell::output(sprintf("%'.-37s",$sitename).'OK!');

なので、エラーは処理できますが、とにかく表示されます。

php shell.php testing.com

Checking site...
ls: cannot access /vhosts/testing.com: No such file or directory
testing.com.................................OK!

表示を防ぐにはどうすればよいですか?ありがとう

4

1 に答える 1

1

これらのCLI呼び出しからの出力は必要ありません。エラーコードだけが必要です。したがって、出力をに向けます/dev/null(そうでない場合、PHPは、これらのそれぞれにパイプをstderr使用して作成しない限り、何が行われるかを出力します-やり過ぎです)。proc_open

$ls_newsite = exec('ls /vhosts/' . $sitename . ' > /dev/null 2>&1', $output, $error_code);

それはあなたに何の出力も与えずに機能します。

次に、他のいくつかの問題について説明します。

シェルコマンドに渡すものすべてに使用escapeshellargします。 これと同じコードを書くためのより良い方法は次のとおりです。

$ls_newsite = exec(sprintf('ls %s > /dev/null 2>&1', escapeshellarg('/vhosts/' . $sitename)), $output, $error_code);

コンソールコマンドを使用する必要があることを100%確認してください。ほとんどのファイルベースのコンソールコマンド(、、、など)に相当するPHPがありstatfile_existsコードis_dirをより安全し、プラットフォームに依存しないようにします。

于 2013-03-05T11:23:27.180 に答える