2015-02-24 78 views
0

我有我的PHP網站(這是使用的API,這就是爲什麼它必須是PHP)的問題。Communicateur通過網絡與客戶端的串行端口

本網站是通過連接到熱敏打印機(通過串行端口)的樹莓派b +啓動的,我使用python腳本來測試打印機。

現在我的問題是:是否可以通過網絡發送數據,使覆盆子打印一些數據?所以發送一個像寫入端口'/ dev/ttyxxx'客戶端的指令?

感謝您的幫助

回答

0

如果你的意思是:「我有一個需要訪問服務器的串行端口的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

0

我想到了幾種解決方案;基本上你會希望你的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

相關問題