proc_open返回false但不写入错误文件 - 权限问题?

时间:2014-07-17 13:59:32

标签: php webserver

作为一个新的主题,我已经建立了一个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

1 个答案:

答案 0 :(得分:-2)

我自己发现了错误:文件./error.log不存在。手动创建后,一切正常。