【问题标题】:Print directly to network printer using php使用php直接打印到网络打印机
【发布时间】:2011-06-24 18:38:57
【问题描述】:

我无法使用 php 将页面打印到网络打印机。
但是,如果它是本地打印机,则此方法有效。 我已经安装了 php_printer.dll 并在 php.ini 中启用 以下是代码:

//$handle  =  printer_open("Send To OneNote 2007"); ///This Works

$handle = printer_open('\\\\192.168.0.8\\Canon MF4320-4350'); 
printer_set_option($handle, PRINTER_MODE, "RAW");
printer_write($handle, "TEXT To print");
printer_close($handle);

显示错误

警告:printer_write() [function.printer-write]:无法分配 第 16 行 E:\Server\xampp\htdocs\Kiosk\Admin\print.php 中的打印机作业 [5]

【问题讨论】:

    标签: php windows printing network-printers


    【解决方案1】:

    尝试使用 "s 与 4\ 或 's 与 3。例如:

    $handle = printer_open("\\\\192.168.0.8\\Canon MF4320-4350");
    // or
    $handle = printer_open('\\\192.168.0.8\Canon MF4320-4350');
    

    另外,请尝试使用域名而不是 IP(例如 computer-namefull.address.example.com)。

    【讨论】:

    • 各种方法都试过了,还是没用。感谢您的回复
    • 嗯,这很奇怪,因为 php.net 手册页上的 cmets 似乎表明它可以正确使用这些方法。
    【解决方案2】:

    单看那个字符串,感觉很可能是反斜杠转义出错了。

    调试提示:在变量中设置您的网络地址,而不是直接在printer_open() 中。然后使用print() 或类似的方式显示该值。

    <?php
       $addr = '\\\\192.168.0.8\\Canon MF4320-4350';
       print $addr;
       printer_open($addr);
       ...
    ?>
    

    这将允许您查看正在使用的字符串的值,这可能有助于您了解问题所在,更重要的是,帮助您了解如何修复它。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      如果您使用命令行 PHP (CLI),则可以打印到网络打印机。顺便说一句,您的 $addr 是正确的。

      当您将 PHP 与 Apache 结合使用时,问题就出在 PHP 上。在 Windows 中,您的 php 脚本将在用户 SYSTEM 下运行。出于安全考虑,所有网络资源对 SYSTEM 不可见。

      要解决此问题,请创建一个具有管理员权限(或至少具有网络资源可见性)的新用户。在 Windows 中,如果您将 Apache 作为服务运行,请单击 Apache Service Monitor 中的 SERVICE 按钮。在 Apache 2.2 下,右键单击属性。在 LOGIN 选项卡下,将用户从 SYSTEM 更改为您新创建的用户帐户。重启阿帕奇。您现在应该可以运行 PHP 脚本以打印到网络打印机了。

      【讨论】:

        猜你喜欢
        • 2012-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-04-12
        • 2017-04-21
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多