Печать PHP на локальный термопринтер, не работает без сетевого имени

Я создал приложение POS (Point of Sale) на PHP, которое может печатать напрямую на термопринтере. В большинстве случаев я запускаю приложение на локальном веб-сервере, используя WAMP.

Часть кода печати:

$printer = "\\\\localhost\\TM-T88V";

// Open connection to the thermal printer
$fp = fopen($printer, "w");
if (!$fp){
  die('no connection');
}

$data = " PRINT THIS ";

// Cut Paper
$data .= "\x00\x1Bi\x00";

if (!fwrite($fp,$data)){
  die('writing failed');
}

Этот код работает нормально, пока ПК подключен к сети. Я могу заставить PHP подключаться к общему принтеру (либо на том же компьютере, либо на компьютере в сети), используя fopen и «LOCALHOST» или «COMPUTER-NAME»: fopen("\\localhost\TM-T88V" ,'ш');

Если я отключу компьютер от сети, PHP больше не сможет подключиться к \\localhost или \\COMPUTER-NAME.

Я пробовал такие вещи, как: fopen('TM-T88V'), fopen('\\.\TM-T88V'), но я продолжаю получать "[function.fopen]: не удалось открыть поток: нет такого файла или каталога ...".

Как подключиться к локальному (общему) принтеру (желательно по имени) без активного сетевого подключения?


person Bauke Boorsma    schedule 22.04.2012    source источник
comment
Используя петлевой адаптер, я нашел способ обойти проблему, таким образом, компьютер все еще «думает», что у него есть сетевое подключение, поэтому он может разрешить \\localhost. Но я думаю, что должен быть способ подключиться напрямую к принтеру.   -  person Bauke Boorsma    schedule 23.04.2012
comment
Привет Бауке. Не могли бы вы объяснить решение этой проблемы немного подробнее. Мы в той же ситуации, что и вы год назад. Мы не можем отправить печать на термопринтер Zebra. Мы также попробовали ваш код, но он не сработал.   -  person Nitin Srivastava    schedule 09.07.2013
comment
Привет Бауке. Большое спасибо за идею. Мы смогли решить это, наконец, и с нашей стороны. Единственное, что нам нужно было сделать, это предоставить общий доступ к принтеру по сети, а затем получить к нему доступ через сеть. Loopback адаптер нам не подошел.   -  person Nitin Srivastava    schedule 10.07.2013
comment
@Nitin, извините за поздний ответ. Рад видеть, что вы решили это. Если сделать принтер общим принтером, вы сможете использовать php-код для печати данных. Если вам нужно получить доступ к принтеру на том же компьютере, и этот компьютер не имеет активного сетевого подключения, в этом случае вам понадобится петлевой адаптер (я не нашел обходного пути). Вам также все равно нужно будет сделать принтер общим в этой ситуации.   -  person Bauke Boorsma    schedule 30.08.2013


Ответы (2)


Вы пробовали fopen("PRN", "w")?

person alganet    schedule 22.04.2012
comment
Да, у меня есть. Это также дает мне ошибку «Не удалось открыть поток...». Я установил термопринтер в качестве принтера по умолчанию, но это тоже не помогает. - person Bauke Boorsma; 23.04.2012

Вот фрагмент кода, который я использую для своего задания на печать в PHP:

$handle = printer_open('Printer Name in windows here');

if($handle) { // Make sure the printer is present before sending the job
// print job here
}
person pollux1er    schedule 25.08.2016