2012-05-02 87 views
0

我正在使用shell_exec()通過Adobe Reader使用以下PHP將存儲在局域網上的PDF自動打印到LAN上的打印機上:代碼(全部在一行上):使用PHP shell_exec自動在網絡上打印PDF到網絡打印機不工作

shell_exec("'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe' 
/t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP"); 

我預計這將要做的就是打開Adobe Reader時,打開網絡上的PDF和打印到網絡打印機。當用這一行運行PHP腳本時,它不會打開Adobe Reader或打印它。但是,當我複製該代碼並在命令提示符(客戶端)執行時,它可以工作並打印。命令行只有輕微的修改(全部在一行上):

"C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe" 
/t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP 

是否與在服務器端執行的PHP腳本有關?我試着在服務器上運行相同的命令行,它也可以工作。它似乎只是它通過PHP時,它什麼都不做。

我的最終結果必須是儘可能少地與最終用戶進行交互,從而打印出服務器端PDF。注意:這是一個WAMP環境。

任何想法?

謝謝。

更新: 試過把代碼放入批處理文件並調用它,仍然沒有工作。嘗試使用exec()shell_exec(),但仍然沒有喜悅。出於某種原因,當我通過雙擊運行該批處理文件時,它可以正常工作。當我使用PHP調用它時,除了打開兩個不關閉的acrord32.exe實例外,它不會執行任何操作,因此PHP腳本似乎永遠不會完成。我洙困惑......

+0

嘗試在AcrdoRD2的路徑逃避斜線了。 'C:\\ Program Files \\ Adob​​e \\ ...' – Nadh

+0

試過但仍然沒有喜悅。此外,我試圖逃避PDF和打印機的路徑 - 仍然沒有。 :( – weedave

+0

好吧,'echo shell_exec(''C:\\ Program Files ...「)'看看它打印什麼。可能有幫助的錯誤信息。 – Nadh

回答

0

試試這個:

echo "'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe' /t \\hnurensp01\RepairTickets\179694.pdf \\hnurenfp01\Accounts_FS-1128MFP" 

它返回:

'C:\Program Files\Adobe\Reader 10.0\Reader\AcroRd32.exe' /t \hnurensp01\RepairTickets9694.pdf \hnurenfp01\Accounts_FS-1128MFP 

在PHP中,反斜槓作爲「特殊」字,因爲它是用來生產標籤和換行符\t\n。避免反斜槓的正確方法是預先考慮另一個:\\產生\作爲輸出。

這就是爲什麼你的PHP腳本不起作用。雙反斜槓將被打印到外殼上,就好像您只鍵入一個!您需要逃避在該行的代碼,每一個反斜線:

shell_exec("'C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe' 
    /t \\\\hnurensp01\\RepairTickets\\179694.pdf \\\\hnurenfp01\\Accounts_FS-1128MFP"); 
+0

試過了,但仍然沒有奏效。 – weedave

+0

使用Adobe Reader無法正常工作。試用LPD服務等LPR命令 - 對我來說是災難性的!大聲笑。使用Fox It PDF閱讀器結合使用類似命令:'START「打印文檔」「C:\ Program Files(x86)\ Foxit Software \ Foxit Reader \ Foxit Reader.exe」/ t「D:\ xampp \ htdocs \ instrument \程序\ webroot的\文檔\%次數1.pdf 「 」\\ <計算機> \ <打印機名稱>「' – weedave

+0

我執行回聲了shell_exec(」'C:\\ Program Files文件\\福昕軟件\\福昕閱讀器福昕\\ Reader.exe」 /噸\\\\ C:\\ billdoc_260.pdf \\\\ 192.168.0.122 \\ EPSON TM-T82II Receipt52" );其中192,168,0,122是Ipaddess和EPSON TM-T82II Receipt52是打印機名稱,但不打印該文件既不會產生任何錯誤。我錯在哪裏? – Happy