PHP exec失败没有错误

时间:2015-12-14 11:37:58

标签: php cmd permissions unoconv

我想自动将.odf文件导出到.pdf

我尝试了一种名为unoconv的内容。

在Windows命令提示符下输入时,一切正常。

>"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt

一旦在PHP脚本中使用,就不再有用了。没有错误。

exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt');

//or

shell_exec('"C:\Program Files (x86)\OpenOffice 4\program\python.exe" "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf path/to/myfile.odt')

我还试图以\'"的方式逃避,但我的测试都没有确定结果。

$test = exec($cmd, $output, $return);
echo var_dump($test);
echo var_dump($output);
echo var_dump($return);

给我

//echo var_dump($test)give nothing

//echo var_dump($ouput);
array (size=0)
  empty

//echo var_dump($return);
int 1

这听起来像是一个权限问题,但我也检查了这个,所有文件夹都可以通过PHP访问。

2 个答案:

答案 0 :(得分:0)

我会将此添加为评论,但不足以代表......

从WAMP服务器更改为IIS时出现此问题,正如您所说,这是一个权限问题。 事实证明,我必须为“IUSR”用户和“IIS_IUSRS”组授予其执行权限。

后来我遇到了类似的东西,我相信我决定只更改用户IIS运行的管理员,但可能不建议这样做。

当然,如果您不使用IIS,这将无关紧要,但我会将此留在此处,以防万一其他人。

答案 1 :(得分:0)

通过测试异国情调的代码,python.exe被覆盖并且无法使用。 初始帖子中的代码几乎是正确的。我的坏。

对于好奇的人来说,这是我的最终代码,其中包含易于使用的功能

<强> createPDF.bat

@echo off
set arg1=%1
set arg2=%2

cd "C:\Program Files (x86)\OpenOffice 4\program\"

python.exe "C:\Program Files (x86)\OpenOffice 4\program\unoconv-master\unoconv" -f pdf -o %arg2% %arg1%

<强> createPDF.php来

function createPDF($from, $to)
{
    //Launch the .bat, do not forget the double backslash
    $handle = popen("start /B path\\to\\createPDF.bat ".$from." ".$to, "r");

    //Debug if needed
    //echo "'$handle'; " . gettype($handle) . "\n";
    //$read = fread($handle, 2096);
    //echo $read;

    //Close the socket
    pclose($handle);
}

现在,当我必须将odt文件转换为pdf时,我只需要执行以下操作

<强> test.php的

include_once($_SERVER['DOCUMENT_ROOT']."path\to\createPDF.php"); 

//createPDF(source, destination), do not forget the double backslash (\\)
createPDF("E:\\A\\strange\\path\\to\\Report.odt" , "D:\\Final_report");