作为一个新的主题,我已经建立了一个Ubuntu 12网络服务器,根目录是/ var / www /包含我的脚本index.php和一个名为“reduce”的子目录,其中包含一个二进制文件(计算机代数系统) ,文件名也是“减少”)。
使用ssh,我可以以root身份登录我的非管理员用户帐户并cd到/ var / www /目录并通过执行“./reduce/reduce”启动二进制文件。但是,如果我使用index.php文件做同样的事情,它就不起作用。这是index.php的基本内容(基本上取自[1]):
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","./error.log","a")
) ;
// define current working directory where files would be stored
$cwd = './' ;
// open reduce
$process = proc_open('./reduce/reduce', $descriptorspec, $pipes, $cwd) ;
echo "return value of proc_open: " . (($process === false) ? "false" : "true");
if (is_resource($process)) {
// anatomy of $pipes: 0 => stdin, 1 => stdout, 2 => error log
fwrite($pipes[0], 'load excalc $');
fclose($pipes[0]) ;
// print pipe output
echo stream_get_contents($pipes[1]) ;
// close pipe
fclose($pipes[1]) ;
// all pipes must be closed before calling proc_close.
// proc_close() to avoid deadlock
proc_close($process) ;
echo "success!";
}
奇怪的是没有创建./error.log文件,我得到的唯一输出是“proc_open:false的返回值”。这是为什么?一些权限问题?所有者,组和其他人对index.php以及二进制文件具有执行权限。有什么想法吗?
由于 延
[1] http://www.molecularsciences.org/PHP/proc_open_tutorial_and_examples
答案 0 :(得分:-2)
我自己发现了错误:文件./error.log不存在。手动创建后,一切正常。