2016-10-22 95 views
-1

當我在我的mac xampp中運行這個phpscript時,它會返回成功但不生成pdf文件。但是當我從mac終端運行它可以從docx文件創建pdf文件。Unoconv不在php腳本中創建pdf文件

<?php 
    $source_file = 'c++ documentation.docx'; 
    $cmd = "unoconv/0.7/bin/unoconv"; 
    $command = sprintf("/Applications/XAMPP/xamppfiles/htdocs/phpdocx/unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1", 
    escapeshellarg($source_file)); 
    echo shell_exec($command); 

    echo "yoyo"; 

    if(shell_exec($command)){ 
     echo "successful"; 
    }else{ 
     echo "failed"; 
    } 
?> 

這是我編輯的代碼,它說的sprintf():太少的說法!

This is the part where it give this message but it said successful and not pdf files were found

+0

因此,當您通過CLI運行腳本時腳本成功,並且在通過Web服務器請求腳本時失敗,對嗎? –

+0

是在終端CLI成功,但在XAMPP網絡服務器失敗 – user3711175

+0

我會在某處打印命令,然後嘗試從CLI運行它 –

回答

0

你需要跳脫shell變量,否則外殼可以解釋它的特殊字符:

$source_file = 'c++ documentation.docx'; 
$command = sprintf("unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1", 
    escapeshellarg($source_file)); 

提供完整(絕對)路徑到您的unoconv/0.7/bin/unoconv可執行文件,因爲它似乎從不可用您的$PATH環境變量:

$command = sprintf("/path/to/unoconv/0.7/bin/unoconv -h -v -f pdf -o /phpdocx/docimages/testing.pdf %s 2>&1", 
    escapeshellarg($source_file)); 

或者,包括abs調用shell之前將unoconv/0.7/bin/目錄的olute路徑轉換爲$PATH環境變量。例如,請參閱this

顯然,$source_file應該在當前目錄中。否則,該命令將無法訪問它。

+0

呃我該怎麼做?它被稱爲終端並放入它嗎? – user3711175

+0

/Applications/XAMPP/xamppfiles/htdocs/phpdocx/unoconv/0.7/bin/unoconv 你的意思是這樣的真實路徑? – user3711175

+0

它仍然是相同的,它給了我這個用法:unoconv [options] file [file2 ..]從LibreOffice unoconv選項支持的任何格式轉換爲:-c,--connection = string使用自定義連接字符串-d, --doctype = type指定文檔類型(文檔,圖形,演示文稿,電子表格)-e,--export = name = value設置導出過濾器選項。 -e PageRange = 1-2 -f,--format = format指定輸出格式-F,--field = name = value用值替換用戶定義的文本字段,例如。 -F Client_Name =「Oracle」-i,--import = string設置導入過濾器選項字符串例如。 -i utf8 -l但它說成功 – user3711175