Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过web与客户端串口通信_Php_Serial Port_Raspberry Pi - Fatal编程技术网

Php 通过web与客户端串口通信

Php 通过web与客户端串口通信,php,serial-port,raspberry-pi,Php,Serial Port,Raspberry Pi,我的PHP网站有一个问题(它使用的是API,这就是为什么它必须是PHP) 这个网站是在raspberry pi b+上启动的,它连接到热敏打印机(通过串行端口),我使用python脚本来测试打印机 现在我的问题是:有没有可能通过网络发送数据,让树莓打印一些数据?那么发送一条类似于write的指令到端口“/dev/ttyxxx”客户端 感谢您的帮助如果您的意思是:“我有一个需要访问服务器串行端口的PHP应用程序”: PHP可以访问服务器上的串行端口(在本例中是raspberry pi)。PHP将其

我的PHP网站有一个问题(它使用的是API,这就是为什么它必须是PHP)

这个网站是在raspberry pi b+上启动的,它连接到热敏打印机(通过串行端口),我使用python脚本来测试打印机

现在我的问题是:有没有可能通过网络发送数据,让树莓打印一些数据?那么发送一条类似于write的指令到端口“/dev/ttyxxx”客户端

感谢您的帮助

如果您的意思是:“我有一个需要访问服务器串行端口的PHP应用程序”: PHP可以访问服务器上的串行端口(在本例中是raspberry pi)。PHP将其视为普通文件

从:


我想到了几种解决方案;基本上,您希望您的php页面解析数据并创建可打印的可信的输出(即PDF文件,如果您的打印机支持此功能)

您的下一个任务是如何将此可信的输出发送到打印机。同样,存在几种解决方案

  • 让您的php脚本执行系统可执行文件,例如,
    cat output.pdf>/dev/ttyxxx
    (很明显,我不知道如何从unix打印)。请注意,可执行文件根本不依赖于输入,即,您希望降低注入攻击等风险。这一点要求您创建的output.pdf是可信的

  • 使用cron作业查找输出文件并将其发送到打印机。上述考虑因素同样适用。这可能更好,因为如果多个php会话试图打印一个文档,它可以避免瓶颈

  • 围绕上述内容构建一个较小的框架,如果出现错误等,可以进行报告。但基本上,选项1+魔术

  • 总之,将流程分为两个步骤。接受输入、解析和检查错误/恶意输入并为打印机创建所需输出的程序。这可以在一个受保护的环境中完成,如果受到黑客攻击,该环境不会暴露系统(至少不会比通常的php暴露更多)。
    然后,第2步负责将输出发送到硬件,可以是bash脚本、可执行文件,也可以是python。

    谢谢你的回答,亲爱的朋友,但我想你误解了我,或者我没有解释清楚。树莓不是服务器,而是客户端(有点像PoS)!因此,我需要一个解决方案,以便服务器执行一些神奇的神秘代码,这将允许我写入客户机的串行端口^^(或一些可以执行python代码的php代码)。感谢您的帮助,您的raspberry Pi正在运行web浏览器以连接到PHP网站?哪个浏览器?它可能需要的任何浏览器。它运行Linux,所以如果需要,我可以安装Mozilla或Chrome。我只需要一些解决方案^^谢谢您的帮助。您可能仅限于Chrome串行API(可用于Chrome应用程序和扩展)。嘿@Tremmors原来我也要用我的树莓皮做招待。所以你发布的解决方案效果很好,我只是有一个问题,数据流对于热敏打印机来说太快了(比如当我写“这是一个测试!”时,它显示:“出于某种原因,!Z.HZ.HXÉtest!”)。你能帮我吗?已经谢谢你了!亲爱的朋友,谢谢你的回答。您的解决方案很好,但我的问题是,所有必须自动执行的操作(我在网站上按1按钮=生成文件+执行将打印文件的python代码)是否可以通过web执行某些python脚本?谢谢,所以串口不是在托管php的服务器上,而是在客户端上。服务器上的php无法在客户机上执行任何操作。它可能需要一个浏览器插件,其中php脚本发送一个插件截获并可在客户端执行的输出,但这是一个重大的安全风险!你能给我@mrgumble链接一些教程或视频,告诉我如何通过一个插件做到这一点吗?那太好了。谢谢你的帮助。
    <?php
    // Set timeout to 500 ms
    $timeout=microtime(true)+0.5;
    
    // Set device controle options (See man page for stty)
    exec("/bin/stty -F /dev/ttyS0 19200 sane raw cs8 hupcl cread clocal -echo -onlcr ");
    
    // Open serial port
    $fp=fopen("/dev/ttyS0","c+");
    if(!$fp) die("Can't open device");
    
    // Set blocking mode for writing
    stream_set_blocking($fp,1);
    fwrite($fp,"foo\n");
    
    // Set non blocking mode for reading
    stream_set_blocking($fp,0);
    do{
      // Try to read one character from the device
      $c=fgetc($fp);
    
      // Wait for data to arive 
      if($c === false){
          usleep(50000);
          continue;
      }  
    
      $line.=$c;
    
    }while($c!="\n" && microtime(true)<$timeout); 
    
    echo "Responce: $line";  
    ?>