【发布时间】:2021-04-28 13:39:22
【问题描述】:
我有一台网络打印机(POS 打印机)连接到我的路由器,并且我有打印机的 IP 和端口。我想直接从网络服务器发送打印指令。例如,如果我访问 example.com/print.php,它会将指令发送到我的本地网络打印机并开始打印。 重要的是,可以从同一网络上的任何设备访问此网页,并且能够将打印指令发送到我的本地网络打印机。
这是我到目前为止所做的,使用 localhost/print.php 我可以使用任何浏览器成功地将打印指令发送到本地网络打印机,因为它们都在同一个网络中。但是 localhost 在 iPad 上不起作用。
This is what I have so far, printing via localhost using computer browsers.
我正在使用这个 GitHub 代码 escpos-php 成功地从 localhost 打印到本地网络打印机,下面是代码示例:
<?php
require __DIR__ . '/vendor/autoload.php';
use Mike42\Escpos\Printer;
use Mike42\Escpos\PrintConnectors\NetworkPrintConnector;
try {
$connector = new NetworkPrintConnector("192.168.1.87", 9100);
$printer = new Printer($connector);
$printer -> text("Hello World!\n");
$printer -> cut();
$printer -> close();
} catch (Exception $e) {
echo "Couldn't print to this printer: " . $e -> getMessage() . "\n";
}
?>
现在,这段代码很容易执行,而且工作起来很神奇,但是当我尝试从我的服务器运行相同的代码时,它无法连接到打印机,因为它们不在同一个网络中。我检查了此代码的作者常见问题解答部分并找到了此答案。
解决方案 1: 构建您的应用程序,以便服务器可以看到您的打印机。
解决方案 2:使用运行客户端的应用程序来传送打印数据。
第二个解决方案是这个问题的一个很好的解决方案,但这是我想要实现的。
This is what I'm looking for, printing via the webserver using any device within the local network.
请注意,连接到路由器的计算机不再运行。
当我访问 example.com/print.php 网页时,它会通过网络服务器向打印机发送指令,但正如您在这种情况下看到的那样,服务器无法与打印机通信。
在第一个解决方案中,作者提供了以下选项:
选项 1:改为在 LAN 上运行您的服务器,并阅读上面有关通过网络打印的部分
选项 2:设置 VPN,以便您的云托管服务器也可以访问 LAN
选项 3:通过 SSH 或 TLS 通过其他一些安全隧道将打印机暴露给服务器
我猜第一个选项不适合我,但第二个选项是设置 VPN,以便我的云托管服务器也可以访问 LAN。这是一个很好的解决方案,但在某些时候,会有数百名像我这样的用户通过同一个网络服务器使用数百台打印机,我猜在这种情况下使用 VPN 并不能很好地工作。
此时,第三个选项很有希望,如果计算机不再运行,我如何通过安全隧道通过 SSH 或 TLS 将打印机公开到服务器。
是否有任何简单的方法可以仅使用打印机的 IP 和端口将打印指令从网络服务器发送到本地网络打印机?如果这意味着将打印机暴露在互联网上或移除防火墙。
【问题讨论】:
标签: php printing vpn remote-server local-network