0

このコードを使用して単純なphpスクリプトを作成する場合:

shell_exec('"');

そしてそれを実行します:

php myscript.php

Macのbashで次のエラーが発生します。

sh: -c: line 0: unexpected EOF while looking for matching `"'
sh: -c: line 1: syntax error: unexpected end of file

私は私が考えることができるすべてを試しました:

ob_start();
@shell_exec('"');
ob_end_clean();

@shell_exec('" 2> /dev/null');

しかし、何をしようとしても、メッセージを抑えることはできません。問題は、汎用ツールの$ argc、$ argv、およびgetopt()コマンドのストレステストを行う単体テストを作成していることです。スクリプトを何百回も呼び出して、「」などのランダムな文字を含むさまざまな入力を行う必要があります。 =:など。

したがって、エラー出力を抑制するか、不均衡な引用符を検出して文字列の最後に「」または「」を追加できる必要があります。この正規表現は、一重引用符と二重引用符の文字列を検出するためのものです。

PHP:引用符内のエスケープされた引用符を無視する正規表現

しかし、引用符で囲まれた引数と引用符で囲まれていない引数が混在する一般的なbashコマンドでこれを行う方法を視覚化するのに問題があります。エラーをスローせずに文字列が受け入れ可能かどうかを教えてくれる組み込みコマンドはありますか?次に、「'」または「」のいずれかを追加してみると、そのうちの1つが文字列を閉じると確信しています。今のところ、ランダムな入力をスローしているだけなので、エラーメッセージの防止にのみ関心があります。この時点でのスクリプト。

ありがとう!

4

1 に答える 1

0

子シェルプロセスは、親PHPプロセスから継承したエラーメッセージをSTDERRに書き込んでいます。shell_exec()を実行する前に、PHPスクリプトで親のSTDERRファイルハンドルを閉じることができます。

<?php
fclose (STDERR);
shell_exec('"');
于 2013-03-26T04:19:43.297 に答える