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 命令,我无法想象如何执行此操作。是否有内置命令可以告诉我字符串是否可以接受而不会引发错误?然后我可以尝试附加“'”或“”',我相当肯定其中一个会关闭字符串。我现在只关心防止错误消息,因为我只是在随机输入此时的脚本。

谢谢!

4

1 回答 1

0

子 shell 进程正在将错误消息写入 STDERR,它继承自父 PHP 进程。您可以在运行 shell_exec() 之前在 PHP 脚本中关闭父级的 STDERR 文件句柄。

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