0

shell_exec() を使用して、次の PHP コード (すべて 1 行) を使用して、LAN に保存されている PDF を Adob​​e Reader を介して LAN 上のプリンターに自動的に印刷しています。

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

私が期待しているのは、アドビ リーダーを開き、ネットワーク上で PDF を開き、ネットワーク プリンターに印刷することです。この行で PHP スクリプトを実行すると、Adobe Reader が開いたり、印刷されたりしません。ただし、そのコードをコピーしてコマンド プロンプト (クライアント側) で実行すると、動作して出力されます。コマンド ラインはわずかに変更されているだけです (すべて 1 行で)。

"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 の 2 つのインスタンスを開く以外は何も実行されないため、PHP スクリプトが完了しないようです。私はとても混乱しています...

4

1 に答える 1

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 スクリプトが機能しない理由です。二重のバックスラッシュは、1 つだけ入力したかのようにシェルに出力されます! そのコード行のすべてのバックスラッシュをエスケープする必要があります。

shell_exec("'C:\\Program Files\\Adobe\\Reader 10.0\\Reader\\AcroRd32.exe' 
    /t \\\\hnurensp01\\RepairTickets\\179694.pdf \\\\hnurenfp01\\Accounts_FS-1128MFP");
于 2012-05-02T15:10:13.163 に答える