【发布时间】:2020-08-27 11:19:48
【问题描述】:
我对 PHP 套接字完全陌生,我现在将它们用于一个简单的目的:我想在 Cron Job 和网络之间传递信息,因为我的主机阻止我使用putenv,这是我找到的最佳解决方案。
阅读official documentation,这是我尝试做的:
$host = "localhost"; //or ssl://mydomain.com
$socket = fsockopen($host, 80, $no, $err,0);
if(!$err)
{
var_dump(fputs($socket, "random text"));
var_dump(filesize($socket));
var_dump(fgets($socket, filesize($socket)));
fclose($socket);
}
这是我得到的输出:
int(3)
NULL
bool(false)
所以看起来fput 成功了,但由于某种原因它实际上并没有写任何东西(fwrite 和fread 的结果相同。
更新:
对于任何对此感兴趣的人,我发现 another solution 使用 a completely different approach。
现在我只需要测试一下;如果它由于任何原因不起作用,我将继续使用 peakle 的解决方案
【问题讨论】:
-
您为什么期望
filesize()返回对套接字有意义的东西?毕竟,套接字不是文件。 -
@PresidentJamesMoveonPolk 甚至写 11 it
fgets()返回false -
您似乎将套接字与文件混淆了。套接字是连接的一半。当你有一个连接的套接字时,你写的任何东西都只能在连接的另一端读取,而不是同一端。同样,您可以读取的唯一数据是从另一端发送的数据。
-
@PresidentJamesMoveonPolk 我需要帮助来了解如何实现另一端,以及在两次 cronjobs 之间将这些数据保存在哪里
-
只需将其存储在文件中即可。
标签: php sockets cron port fwrite