Communicateur通过网络与客户端的串行端口

问题描述:

我有我的PHP网站(这是使用的API,这就是为什么它必须是PHP)的问题。Communicateur通过网络与客户端的串行端口

本网站是通过连接到热敏打印机(通过串行端口)的树莓派b +启动的,我使用python脚本来测试打印机。

现在我的问题是:是否可以通过网络发送数据,使覆盆子打印一些数据?所以发送一个像写入端口'/ dev/ttyxxx'客户端的指令?

感谢您的帮助

如果你的意思是:“我有一个需要访问服务器的串行端口的PHP应用程序”: 这是可能的PHP访问服务器上的串行端口(在这种情况下, ,你的覆盆子pi)。 PHP认为它是一个普通的文件。

PHP Fopen page

<?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"; 
?> 

如果你的意思是:“我有一个网站,出于某种原因需要送东西到客户端的串行端口” 那么唯一的解决方案是一个浏览器应用程序。

有Chrome应用程序可以使用的Chrome Serial APIVideo Example

+0

谢谢你的回答亲爱的朋友,但我想你误解了我,或者我没有解释得很好。树莓不是服务器,但它是客户端(有点像PoS)!所以我需要一个解决方案,以便服务器执行一些神奇的arcanic代码,这将允许我写入客户端的^^(或一些php代码,我可以执行我的python代码)的串行端口。感谢您的帮助 – SolidTerre 2015-02-24 13:25:29

+0

因此,您的树莓派正在运行Web浏览器连接到PHP网站?哪个浏览器? – Tremmors 2015-02-24 15:51:18

+0

无论它需要什么浏览器。它运行Linux,因此我可以根据需要安装Mozilla或Chrome。我只需要一些解决方案^^' 谢谢你的帮助。 – SolidTerre 2015-02-25 09:12:17

我想到了几种解决方案;基本上你会希望你的php页面解析数据并创建一个trusted可以打印的输出(例如,如果你的打印机支持这个PDF文件)。

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

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

  2. 对输出文件进行cron-job查找并将它们发送到打印机。与上述相同的考虑适用。这可能会更好,因为如果多个php会话尝试打印文档,它可以避免瓶颈。

  3. 构建一个较小的框架围绕上述可以报告错误发生等等。但仍然,基本上选项1 +魔术。

总而言之,将过程分为两步。一个接受输入,解析并检查错误/恶意输入,并为打印机创建所需的输出。这可以在受保护的环境中完成,如果遭到黑客攻击,则不会暴露系统(至少不会超过通常的PHP)。 第2步然后负责发送输出到硬件,无论是bash脚本,可执行文件或python。

+0

谢谢您的回答,亲爱的朋友。你的解决方案是好的,但我的问题是,所有必须自动发生(我按下1个网站上的按钮=使文件+执行python代码,将打印文件) 是否有可能通过执行一些python脚本网络? 谢谢 – SolidTerre 2015-02-24 13:52:09

+0

啊,所以串口不是在托管php的服务器上,而是在客户端上。在服务器上的php不能在客户端上执行任何事情。它可能需要一个浏览器插件,在这个插件中,php脚本发送一个插件拦截并可以在客户端执行的输出,但这是一个主要的安全风险! – MrGumble 2015-02-24 15:47:54

+0

你能@MrGrumble链接我一些教程或一些视频,告诉我如何通过插件做到这一点?这将是很好的。 谢谢你的帮助。 – SolidTerre 2015-02-25 09:13:13