Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建一个简单的套接字_Php_Sockets_Cron_Port_Fwrite - Fatal编程技术网

Php 创建一个简单的套接字

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

我对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"));
    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甚至编写了11it
fgets()
返回
false
您似乎把套接字与文件混淆了。套接字是连接的一半。当您有连接的套接字时,您所写的内容只能在连接的另一端读取,而不能在同一端读取。同样,您能读取的唯一数据是从另一端发送的数据。@PresidentJamesMoveonPolk我需要帮助来理解如何实现另一端,以及在cronjob之间的时间段将这些数据保存在何处必须将其存储在一个文件中。它仍然无法工作。
fgets
不断返回
false
@Foxel您想使用套接字在没有Web服务器的进程之间进行通信吗?还是为了什么?因为我写了使用webserver的解决方案:)如果首先要使用
putenv
,那么最好的解决方案和更简单的方法是使用文件写入?因为使用套接字非常复杂,所以我有一个Web服务器(XAMPP提供的localhost和托管服务提供的my domain),我更喜欢使用套接字,因为创建一个空白文件来存储一行数据似乎是一个无效的解决方案me@Foxel套接字解决方案示例:,由于sockets的复杂性,我强烈推荐您使用类似dotenv for php的工具:,我认为这将是解决您的问题的一个不错的选择。我的主机服务已禁用了
putenv
,这个库还能工作吗?