问题:用Co\System::exec()执行了一个不存在的命令时,错误信息会直接打印到屏幕,而不是返回错误信息。
怎么办:实际上Swoole提供的System::exec()行为上与PHP的shell_exec是完全一致的,我们写一个shell_exec的同步阻塞版本,执行后发现同样拿不到标准错误流输出的内容,会被直接打印到屏幕。
答案: 使用proc_open+hook实现。
现象:
==================================================================
#php tt.php
PHP Warning: shell_exec() has been disabled for security reasons in /data/www/testswoole/tt.php on line 2
NULL
估计整成错误输出了,于是用:
php tt.php >/dev/null 2>&1
果然,怎么办?加入管道,将此错误指向新的文件描述符。
前置:打开php.ini里面的proc_open禁用函数。
#cat t.php
#php t.php
array(3) {
[0]=>
resource(4) of type (stream)
[1]=>
resource(5) of type (stream)
[2]=>
resource(6) of type (stream)
}
string(31) "sh: unknown: command not found
"
command returned 32512
代码来自rango:https://mp.weixin.qq.com/s/z7SPy-tV3hsQqLXZ-tKlZw
怎么办:实际上Swoole提供的System::exec()行为上与PHP的shell_exec是完全一致的,我们写一个shell_exec的同步阻塞版本,执行后发现同样拿不到标准错误流输出的内容,会被直接打印到屏幕。
答案: 使用proc_open+hook实现。
现象:
==================================================================
#php tt.php
PHP Warning: shell_exec() has been disabled for security reasons in /data/www/testswoole/tt.php on line 2
NULL
估计整成错误输出了,于是用:
php tt.php >/dev/null 2>&1
果然,怎么办?加入管道,将此错误指向新的文件描述符。
前置:打开php.ini里面的proc_open禁用函数。
#cat t.php
#php t.php
array(3) {
[0]=>
resource(4) of type (stream)
[1]=>
resource(5) of type (stream)
[2]=>
resource(6) of type (stream)
}
string(31) "sh: unknown: command not found
"
command returned 32512
代码来自rango:https://mp.weixin.qq.com/s/z7SPy-tV3hsQqLXZ-tKlZw
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/10747/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2020-11-3 14:31
评论列表