使用 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 我在输出中得到&lt;p id="return"&gt;0&lt;/p&gt;,这是正确的。

但是,如果我在浏览器(chrome 和 IE)中打开网页, 我收到&lt;p id='return'&gt;134&lt;/p&gt; 和错误消息:

在抛出 '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 问题

启动应用程序时出现 System.***Exception

php如何执行linux的curl指令

在 PHP 中执行大型 SQL 查询字符串时出现“内存不足”错误

将应用程序移动到子域时出现跨域安全错误 (2018)

PHP system() 函数 - 它是不是使用 shell 来执行命令?