首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP雲打印類實現:數據收集入隊列、JS觸發打印、狀態輪詢

     編輯:PHP 綜合知識

設計思路

無網絡打印機環境下,將打印任務寫入數據庫隊列,前端頁面輪詢調用 window.print() 實現打印。

核心類結構

class Wprint {
    private $data = array();
    private $handle;

    public function __construct() {
        $this->link(); // 連接數據庫
        $this->collect($_POST["username"], $_POST["content"], $_POST["ip"]);
        $this->handle(); // 入隊並顯示排隊信息
    }

    private function collect($username, $content, $ip) {
        $code = array(
            "username" => $username,
            "content" => $this->check($content),
            "ip" => $ip,
            "state" => 0, // 0待打印 1已打印
            "priority" => 0
        );
        array_push($this->data, $code);
    }

    private function handle() {
        foreach ($this->data as $value) {
            $sql = "INSERT INTO print (username,content,ip,state,priority) VALUES ('{$value["username"]}','{$value["content"]}','{$value["ip"]}','{$value["state"]}','{$value["priority"]}')";
            if (mysql_query($sql)) {
                $id = mysql_insert_id();
                echo "數據收集成功,排隊ID:$id";
                $this->num($id); // 顯示前方排隊人數
            }
        }
    }

    public function Yprint() { // 打印執行頁面調用
        $sql = "SELECT id,content FROM print WHERE state=0 ORDER BY id ASC LIMIT 1";
        $row = mysql_fetch_array(mysql_query($sql));
        if ($row["content"]) {
            echo "<script>window.print();</script>";
            mysql_query("UPDATE print SET state=1 WHERE id={$row['id']}");
            echo "打印完成";
        }
    }
}

流程說明

  1. 客戶端提交打印內容 → 服務端入庫,返回排隊ID及前方人數
  2. 打印終端打開打印頁面 → 輪詢調用 Yprint()
  3. 獲取最早未打印任務 → 輸出內容 + JS觸發打印 → 標記已打印

解決了無網絡打印機環境下的排隊打印問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved