Php 创建一个简单的套接字
我对PHP套接字完全陌生,目前我将使用它们有一个简单的目的:我想在Cron作业和net作业之间传递信息,因为我的主机阻止我使用Php 创建一个简单的套接字,php,sockets,cron,port,fwrite,Php,Sockets,Cron,Port,Fwrite,我对PHP套接字完全陌生,目前我将使用它们有一个简单的目的:我想在Cron作业和net作业之间传递信息,因为我的主机阻止我使用putenv,这是我找到的最好的解决方案 读了这本书,我试着这么做: $host = "localhost"; //or ssl://mydomain.com $socket = fsockopen($host, 80, $no, $err,0); if(!$err) { var_dump(fputs($socket, "random text")); v
putenv
,这是我找到的最好的解决方案
读了这本书,我试着这么做:
$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
的结果相同)
更新: 对于任何对此感兴趣的人,我都会找出它的用途
现在我只需要测试一下;如果它由于任何原因不起作用,我将继续使用peakle的解决方案您的脚本中有一些错误,比如:fsockopen中的零超时,提供
资源
到文件大小
函数,我修复了一些错误,如果您在本地主机
域上的服务器工作正常,它将退出正确回答:
<?php
$host = 'localhost';
$socket = fsockopen($host, 80, $no, $err, 30);
if (!$err) {
var_dump(fputs($socket, "random text"));
while (!feof($socket)) {
echo fgets($socket, 4096);
}
fclose($socket);
}
为什么希望filesize()
为套接字返回有意义的内容?毕竟,套接字不是文件。@PresidentJamesMoveonPolk甚至编写了11itfgets()
返回false
您似乎把套接字与文件混淆了。套接字是连接的一半。当您有连接的套接字时,您所写的内容只能在连接的另一端读取,而不能在同一端读取。同样,您能读取的唯一数据是从另一端发送的数据。@PresidentJamesMoveonPolk我需要帮助来理解如何实现另一端,以及在cronjob之间的时间段将这些数据保存在何处必须将其存储在一个文件中。它仍然无法工作。fgets
不断返回false
@Foxel您想使用套接字在没有Web服务器的进程之间进行通信吗?还是为了什么?因为我写了使用webserver的解决方案:)如果首先要使用putenv
,那么最好的解决方案和更简单的方法是使用文件写入?因为使用套接字非常复杂,所以我有一个Web服务器(XAMPP提供的localhost和托管服务提供的my domain),我更喜欢使用套接字,因为创建一个空白文件来存储一行数据似乎是一个无效的解决方案me@Foxel套接字解决方案示例:,由于sockets的复杂性,我强烈推荐您使用类似dotenv for php的工具:,我认为这将是解决您的问题的一个不错的选择。我的主机服务已禁用了putenv
,这个库还能工作吗?