2017-09-22 66 views
0

我無法弄清楚這一點。問題輸出刷新到SSE

我目前在自己的文件中運行我的SSE(服務器發送事件)後端代碼。

header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); // recommended to prevent caching of 
event data. 

function sse_send($msg) { 
    echo "id: " . time() . PHP_EOL; 
    echo "data: " . $msg . PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
    sleep(1); 
} 

我打算通過shell_exec()傳遞這個文件傳遞1個變量,我想發送給客戶端。

我的問題是,我可以看到字符串被作爲$ argv已傳遞的[1],但因爲它返回0。我不能把它發送給客戶端,我可以手動輸入的值入發送功能,它會工作。我可以比較$ argv [1] ==='在這裏插入它的值',它會產生真實的,但由於某種原因,如果我使用$ argv [1]或任何其他我已經分配它的變量,它不會發送到客戶端價值。

+1

'$ argv'和'$ arv'不會出現在問題 – guest271314

+0

的代碼中,您已經創建了一個函數... sse_send ...您從不調用該函數......另外,這與javascript無關全部 –

+0

SSE ==服務器發送事件 – RiggsFolly

回答

0

使用您的外部文件的include(),而不是shell_exec()。它會更高效,更可靠(沒有機會陷入安全模式的限制),最重要的是,它應該可以工作。

我假設調用shell_exec()的php腳本正在Web服務器上運行。當你使用shell_exec()來調用一個php腳本時,它將它作爲一個單獨的php進程運行,並使用它自己的stdin/stdout/etc。您需要在運行您的Web服務器的過程中運行flush(),並且ob_flush()的運行過程相同。

+0

感謝您的輸入Darren!我的問題是小姐在理解如何正確設置事物。 我能夠通過將一個get變量傳遞給我的SSE.php文件來識別我正在嘗試更新的加載欄,然後在DB中記錄進度並且我的所有SSE.php必須是向客戶報告進展情況。記錄一旦完成就會被刪除。 爲我的腳本實現加載欄更難以應付!試圖通過會話來做到這一點,但瞭解到會話鎖定困難的方式! – Ayn