检查PHP7中的打印机状态

检查PHP7中的打印机状态,php,printing,php-7,zebra-printers,Php,Printing,Php 7,Zebra Printers,我正在测试下面的代码以打印带有自定义文本的标签 $outputString='^XA ^FO100, 200 ^AD,50,25 ^FH_^FD Hello world _7E ^FS ^XZ'; $Ip='xxx.xxx.x.xx'; $port='xxxx' $fp = fsockopen($Ip, $port, $errno, $errstr); if (!$fp) { echo "$errstr ($errno)<

我正在测试下面的代码以打印带有自定义文本的标签

    $outputString='^XA
^FO100, 200
^AD,50,25
^FH_^FD Hello world _7E ^FS
^XZ';
     $Ip='xxx.xxx.x.xx';
     $port='xxxx'
        $fp = fsockopen($Ip, $port, $errno, $errstr);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        try {
            $kk=fwrite($fp, $outputString, strlen($outputString));
            fclose($fp);
            echo 'Successfully Printed';
        } catch (Exception $e) {
            echo 'Caught exception: ', $e->getMessage(), "\n";
        }
    }
$outputString='^XA
^FO100200
^广告,50,25
^你好,世界
^XZ′;
$Ip='xxx.xxx.x.xx';
$port='xxxx'
$fp=fsockopen($Ip、$port、$errno、$errstr);
如果(!$fp){
回显“$errstr($errno)
\n”; }否则{ 试一试{ $kk=fwrite($fp,$outputString,strlen($outputString)); fclose($fp); echo“成功打印”; }捕获(例外$e){ 回显“捕获的异常:”,$e->getMessage(),“\n”; } }

它工作正常,但我正在寻找任何方法或途径,以确定打印机是否已成功打印数据,即如果没有纸张,它仍会打印成功打印

您需要的是ZPL命令
~HS
(主机状态)。它返回一个三行响应,其中包含许多关于打印机当前状态的有用信息。前两行提供标签显示、出纸、平视、温度过高/过低等标志


有关更多详细信息,请参阅

我怀疑,如果不从打印机编码某些内容,它将返回成功,因为您只检查它是否进入队列,而不检查它是否打印(使用
mail()
函数时也会出现类似问题)@treyBake
fwrite
始终返回相同的内容,即使打印机是否打印。那么,您是否有其他方法来确定?如果是关于队列的,则可能会分析队列数据:(不,PHP要做的就是检查它是否成功添加到队列中,这就是PHP连接结束的地方。我已经将~HS添加到我的zpl代码中,但它仍然没有返回任何内容。请指导我!!
~HS
是一个独立的zpl命令(不需要包含在
^XA
..
^XZ
中)。我发现最好在打印标签之前发送。在发送
~HS
之后,您的代码需要从套接字/端口读取,直到它看到三个
\r\n
终止的行。然后解析大部分固定格式的标志集,如果没有错误条件,则可以安全地发送标签格式。