作为一种新的主题,我已经建立了一个Ubuntu 12的网络服务器,根目录是/ var / WWW /含我的剧本的index.php和一个名为“减少”包含一个二进制文件(计算机代数系统子目录,文件名也是“减少”)。
通过使用SSH,我可以以root身份登录,我的非管理员用户帐户和CD到/ var / WWW /目录下,并通过执行“./reduce/reduce”启动二进制文件。 但是,如果我这样做,从withing我的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的返回值:假”。 这是为什么? 一些权限问题? 所有者,组和其他人有执行上的index.php权限以及二进制。 有任何想法吗?
由于延
[1] http://www.molecularsciences.org/PHP/proc_open_tutorial_and_examples