2017-09-22 36 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