fgets没有在ubuntu 12.04上运行但在windows(本地)上运行正常

时间:2014-08-22 09:49:15

标签: php linux shell ubuntu-12.04 fgets

我在php中有一段代码:

        header('Content-Type: text/HTML; charset=utf-8');
        header('Content-Encoding: none; ');

        $cmd = "pdf2htmlEX --process-outline 0 --fit-width 800 --fit-height 1200 --dest-dir uploaded/uploaded_files uploaded/uploaded_files_21_original/inputfile.pdf 2>&1>>data.log &"; 

        $descriptorspec = array(
                0 => array("pipe", "r"), // stdin is a pipe that the child will read from
                1 => array("pipe", "w"), // stdout is a pipe that the child will write to
                2 => array("pipe", "w")    // stderr is a pipe that the child will write to
        );


        $process = proc_open($cmd, $descriptorspec, $pipes, __DIR__); 
        //__DIR__ will set CWD


        if (is_resource($process)) {




            stream_set_blocking($pipes[1], FALSE);
            $s = fgets($pipes[1], 1024);
        echo $s;
        }

这将回显

预处理0/1
预处理1/1

当我在Windows中的wamp上执行它时。

但是,当我在Ubuntu 12.04 Apache2上运行相同的命令时。它没有回应任何价值。即它在回声中给出一个空白输出。

我在这里缺少什么?是否有一些我缺少的配置更改? 请帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

首先,你应该enable error reporting

// Put these lines to the top of your script
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

然后使用二进制文件的完整路径(即使您设置了CWD):

/usr/bin/pdf2htmlEX 

如果您不经常阅读STDERR,则应将其标记为写入追加模式:

2 => array("pipe", "a") // a - append

错误实际上也可能写入STDERR,从中读取可能有消息。

我不确定PHP在命令2>&1>>data.log &中重定向时如何处理管道。尝试使用和不使用。

我的经验是popen效果最好(与所有可用命令相比shell_execsystem,...),我认为值得尝试{{1}作为替代方案。