使用 PHP 中的 system() 执行程序时出错:在抛出“std::logic_error”实例后调用终止
Posted
技术标签:
【中文标题】使用 PHP 中的 system() 执行程序时出错:在抛出“std::logic_error”实例后调用终止【英文标题】:Error executing a program using system() from PHP: terminate called after throwing an instance of 'std::logic_error' 【发布时间】:2014-08-01 10:07:01 【问题描述】:这是我的 index.php 中的一段代码
<?php
/*cmd is a program wittern by another people that I do not know much*/
$cmd="absolutePath/cmd";
$ret=0;
system($cmd,$ret);
?>
<p id="return"><?php echo $ret?></p>
如果我像这样在命令行中执行程序:$ absolutePath/cmd
然后echo $?
我得到0,这是正确的
如果我像这样在命令行中执行 index.php:php -f index.php
我在输出中得到<p id="return">0</p>
,这是正确的。
但是,如果我在浏览器(chrome 和 IE)中打开网页,
我收到<p id='return'>134</p>
和错误消息:
在抛出 'std::logic_error' 实例后调用终止 what(): basic_string::_S_construct null not valid Aborted
这个问题看起来和我在 *** 上发现的一样: Error executing praat from PHP: terminate called after throwing an instance of 'MelderError' Aborted 虽然抛出的异常不同。
【问题讨论】:
你抽什么烟?您的标签与问题无关... 对不起,它们是我最后一个问题的标签... 【参考方案1】:基于PHP System docs,System(command, return_var):
如果 return_var 参数存在,则执行命令的返回状态将写入此变量。
因此,返回状态为 134。128 之后的退出状态,即 128+n,其中 n 是一个小的正数,通常意味着程序因信号“n”而崩溃。所以,它是信号 6。根据this link,信号 6 表示“中止信号”。
所以,我的猜测是,外部程序 $cmd
可能无法从浏览器运行。
【讨论】:
原来原因是www-data用户没有env变量$HOME。以上是关于使用 PHP 中的 system() 执行程序时出错:在抛出“std::logic_error”实例后调用终止的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 c++ 程序中的 system() 函数使用 cl Visual Studio 命令进行命令行构建时出现 vcvars32.bat 问题