【问题标题】:PHP Server Side Printing Ubuntu ServerPHP 服务器端打印 Ubuntu 服务器
【发布时间】:2012-06-25 10:56:39
【问题描述】:

我一直在研究执行此操作所需的内容,结果有点困惑。

让我们直截了当地说,这是一个基于本地的 Intra-net,我知道 PHP 是服务器端的。

我正在基于 Web 的 PHP、JAVA、Jquery Idea 上运行公司管理解决方案。我们想直接从“LINUX”服务器打印报告和收据等。

我已经在服务器上安装了 cups 并且服务器打印正常,我现在只是纠结于是否真的可以让服务器打印我们直接从 PHP 代码生成的 pdf 文件。

即使我们有一个 bash 脚本来运行并检查目录打印 pdf 然后删除它,我也会很高兴,即使我暂时认为这是一种解决方法。

就像我说的,我明白如果这是在 WWW 上完成的,那么就会有一些可以利用的漏洞。如果我要在 www 上运行这个系统,我将拥有一个完全不同的站点,该站点不允许打印,并且不需要此功能。

提前谢谢你

亚历克斯

【问题讨论】:

    标签: php printing lamp intranet cups


    【解决方案1】:

    如果 CUPS 配置正确,从 shell 打印 PDF 就像字面上一样简单

    lpr myfile.pdf
    

    因此,一旦您将 PDF 写入临时文件,您就可以使用任何可用的 PHP 函数来执行该 shell 命令:exec()shell_exec()system()

    您甚至可以在不编写临时文件的情况下执行此操作,并通过 STDIN 将数据直接提供给 lpr(尝试在 shell 上以 cat myfile.pdf | lpr 为例)。

    如果您使用proc_open() 运行程序,您可以在 PHP 中将数据提供给程序的 STDIN。 PHP Manual 中的第一个示例可以适应如下内容:

    <?php
    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin is a pipe that the child will read from
    );
    
    $process = proc_open('lpr', $descriptorspec, $pipes);
    
    if (is_resource($process)) {
        // $pipes now looks like this:
        // 0 => writeable handle connected to child stdin
        // 1 => readable handle connected to child stdout
        // Any error output will be appended to /tmp/error-output.txt
    
        fwrite($pipes[0], $pdf_data);
        fclose($pipes[0]);
    }
    ?>
    

    【讨论】:

      【解决方案2】:

      使用PHP::PRINT::IPP

      这是使用 PHP 从 Web 打印的最安全和最简单的方法。在这里你不必启用像exec()shell_exec()等可利用的php函数。

      基本用法

       <?php
        require_once(PrintIPP.php);
      
        $ipp = new PrintIPP();                        
        $ipp->setHost("localhost");
        $ipp->setPrinterURI("/printers/epson");
        $ipp->setData("./testfiles/test-utf8.txt"); // Path to file.
        $ipp->printJob();                                                          
      ?>
      

      Reference

      【讨论】:

      • 但是您只能使用 PrintIPP 打印 txt,而这家伙正在询问 PDF。
      【解决方案3】:

      明智地使用 php 的 shell_exec() 应该允许您在创建 PDF 后立即同步打印它们,从而避免使用 bash。

      我没有使用shell_exec() 进行打印,因此无法提供详细信息,但本质上,如果您可以成功编写 UNIX 打印命令,那么您可以编写shell_exec() 指令。

      【讨论】:

      • 其实是shell_exec()
      • 感谢您的快速响应,我将研究 shell_exec() 如果有人可以添加这种方式,将不胜感激
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多