如何使用 PHP 或任何其他编程语言访问 IP 打印机
Posted
技术标签:
【中文标题】如何使用 PHP 或任何其他编程语言访问 IP 打印机【英文标题】:How to access IP Printer Using PHP Or any Other Programming Language 【发布时间】:2020-01-05 15:28:43 【问题描述】:在实施有助于访问 IP 打印机的解决方案时,我有点卡住了,据您所知,我正在使用的技术堆栈如下所述。
php version 7.2,
Apache 2.4
mysql 5
Method 1.
我已经尝试使用 PECL 的 php_printer.dll 扩展来实现它,但它没有成功,我执行了以下步骤, 1.下载php_printer.dll文件, 2.放在php的ext目录下 3.通过在 php.ini 文件中放置 extension=php_printer.dll 来启用扩展, 4.重启服务器
Method 2.
使用套接字函数。我将 IP 地址和端口传递给套接字函数并创建了实例,然后执行了写入操作。 这不会引发任何错误,但打印机没有响应。
Method 1:
$printer_name = "Canon G4010 series";
$handle = printer_open($printer_name);
printer_start_doc($handle, "My Document");
printer_start_page($handle);
$font = printer_create_font("Arial", 100, 100, 400, false, false, false, 0);
printer_select_font($handle, $font);
printer_draw_text($handle, 'This sentence should be printed.', 100, 400);
printer_delete_font($font);
printer_end_page($handle);
printer_end_doc($handle);
printer_close($handle);
Method 2: Using Sockets
<?php
echo "<h2>TCP/IP Connection</h2>\n";
$port = 9100;
$ip = "192.168.1.5";
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
echo "socket_create() failed. reason: " . socket_strerror($socket) . "\n";
else
echo "OK.\n";
echo "Try to connect '$ip' Port '$port'...\n";
$result = socket_connect($socket, $ip, $port);
if ($result < 0)
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
else
echo "Connect OK\n";
$in = "This is Robin, I'm testing whether the printer is working fine or not!!\r\n";
$out = '';
if(!socket_write($socket, $in, strlen($in)))
echo "socket_write() failed. reason: " . socket_strerror($socket) . "\n";
else
echo "Send Message to Server Successfully!\n";
echo "Send Information:<font color='red'>$in</font> <br>";
while($out = socket_read($socket, 8192))
echo "Receive Server Return Message Successfully!\n";
echo "Received Message:",$out;
echo "Turn Off Socket...\n";
socket_close($socket);
echo "Turn Off OK\n";
?>
期望:运行文件后打印文件
Method1:
出错
PHP Warning: PHP Startup: Unable to load dynamic library 'php_printer.dll' (tried: D:/Webhost/Php/72/ext/php_printer.dll (%1 is not a valid Win32 application.), D:/Webhost/Php/72/ext/php_php_printer.dll.dll (The specified module could not be found.)) in Unknown on line 0
方法2:不抛出任何错误但不执行预期任务。
【问题讨论】:
方法 2:您实际上不会(直接)使用套接字。你也可以使用驱动程序。您只需设置一个驱动程序即可使用网络打印协议。 方法一:你显然下载了错误的二进制文件。除了直接下载任意 dll 文件之外,必须有官方的方式来安装该扩展... 方法二:除非你想学习底层网络打印机协议,否则直接使用socket是不行的。 【参考方案1】:如果您需要服务器端实现,则需要安装正确的驱动程序,我个人从未使用过该 PECL 扩展,因此无法指导您找到解决方案。也许如果你熟悉 JS,你可以做一个 chrome 扩展,使用printerProvider 来访问你的打印机。
【讨论】:
以上是关于如何使用 PHP 或任何其他编程语言访问 IP 打印机的主要内容,如果未能解决你的问题,请参考以下文章
如何以 json 或任何其他格式访问 Graphite RAW 数据?
PHP:我如何通过他/她的 IP 地址确定某人是不是来自美国?
如何统一访问ip设置centos7 php7.0 laravel?