我在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上运行相同的命令时。它没有回应任何价值。即它在回声中给出一个空白输出。
我在这里缺少什么?是否有一些我缺少的配置更改? 请帮忙。感谢。
答案 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_exec
,system
,...),我认为值得尝试{{1}作为替代方案。