Использование PHP shell_exec для автоматической печати PDF по сети на сетевой принтер, который не работает

Я использую shell_exec() для автоматической печати PDF-файла, который хранится в локальной сети, на принтер в локальной сети через Adobe Reader, используя следующий PHP-код (все в одной строке):

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-скрипт никогда не завершается. я так запуталась...


person weedave    schedule 02.05.2012    source источник
comment
Попробуйте также избежать косых черт в пути к AcrdoRD2. C:\\Program Files\\Adobe\\...   -  person Nadh    schedule 02.05.2012
comment
Пробовал, но все равно без радости. Кроме того, я попытался избежать путей для PDF и принтера - все равно ничего. :(   -  person weedave    schedule 02.05.2012
comment
Хорошо, echo shell_exec("'C:\\Program Files...") и посмотрим, что он напечатает. Возможно полезные сообщения об ошибках.   -  person Nadh    schedule 02.05.2012
comment
Кроме того, пробовал разные переключатели для Adobe Reader, поэтому нет переключателя, чтобы просто открыть его - ничего не происходит, и /p, чтобы открыть диалоговое окно печати - ничего не происходит. Когда я говорю, что ничего не происходит, я на самом деле имею в виду, что два экземпляра acrord32.exe запускаются на несколько секунд, а затем закрываются. Так что, похоже, проблема не в файле PDF, а в acrord32.exe :|   -  person weedave    schedule 02.05.2012
comment
Ничего не печатал, попробовал print_r(shell_exec(....)) и вернул 1   -  person weedave    schedule 02.05.2012
comment
На всякий случай проверьте, работает ли ваш PHP в безопасном режиме.   -  person Nadh    schedule 02.05.2012
comment
давайте продолжим это обсуждение в чате   -  person weedave    schedule 02.05.2012


Ответы (1)


Попробуй это:

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");
person Duroth    schedule 02.05.2012
comment
Не удалось заставить его работать с помощью Adobe Reader. Пробовал команды LPR с сервисом LPD и т.д. - для меня катастрофа! ржу не могу. В итоге использовал Fox It PDF Reader с аналогичной командой: START "Print Document" "C:\Program Files (x86)\Foxit Software\Foxit Reader\Foxit Reader.exe" /t "D:\xampp\htdocs\instrument\app\webroot\Docs\%1.pdf" "\\<machine_name>\<printer_name>" - person weedave; 14.05.2012
comment
Я выполняю команду echo shell_exec('C:\\Program Files\\Foxit Software\\Foxit Reader\\Foxit Reader.exe' /t \\\\c:\\billdoc_260.pdf \\\\192.168.0.122\\ EPSON TM-T82II Receipt52); где 192,168,0,122 — это Ipaddess, а EPSON TM-T82II Receipt52 — это имя принтера, но файл не печатается и не выдается никаких ошибок. Где я не прав? - person Happy; 02.05.2014