草庐IT

php - php中的可变长度数据包

我正在接收通过UDP发送到我的服务器的数据包。我正在使用socket_read来读取数据,并且一切正常。但是我遇到了一个错误。在我的例子中,socket_read的长度参数并不总是相同的。数据的长度可以在50-150字节之间的任何范围内。保持不变的一件事是数据集以\x00字节结尾。在遇到这个字节之前,如何让读取函数始终读取?我已经尝试过PHP_NORMAL_READ标志,但文档说它只以\n或\r结尾,这真的不是我想要的(试过它对我的数据不起作用)。同时,socket_read的php页面在length参数描述中指出,Themaximumnumberofbytesreadisspecif

php - PHP 脚本可以检测套接字是否已关闭吗?

PHP脚本如何检测套接字是否已closed由远程方? 最佳答案 来自socket_read():socket_read()returnsthedataasastringonsuccess,orFALSEonerror(includingiftheremotehosthasclosedtheconnection).Theerrorcodecanberetrievedwithsocket_last_error().Thiscodemaybepassedtosocket_strerror()togetatextualrepresentat

php - 不使用 gethostbyname 从 DNS 获取 IP?

PHP的gethostbyname()就超时而言,功能似乎不可配置。我想将DNS请求限制在1秒或更短时间,因为再出现问题时应该忽略。那么,有没有一种方法可以改用套接字或cURL进行DNS查询?我能够使用节省服务器资源的PHP流发出SMTP请求,所以我希望对DNS查询做同样的事情。 最佳答案 关于PHParticle的评论有一些设置/包括超时的选项:http://www.php.net/manual/en/function.gethostbyname.php#92870 关于php-不使用

PHP 自定义 SMTP 邮件函数返回错误 fputs 发送字节失败 errno=32 Broken pipe

我编写了下一个自定义PHP函数来通过SMTP邮件服务器发送邮件。functionsend($format='text'){$smtpServer='mail.mymailserver.com.mx';$port='25';$timeout='60';$username='myuser';$password='mypassword';$localhost='www.mydomain.com.mx';$newLine="\r\n";$smtpConnect=fsockopen($smtpServer,$port,$errno,$errstr,$timeout);fputs($smtpCon

php - 如何终止 PHP session ?

这个一般性话题之前已经出现过,here,here,here,毫无疑问,互联网上的其他地方也是如此。在我的例子中,与这些不同,挂起是由一个永远不会收到消息的阻塞套接字引起的,也许这就是为什么那里描述的解决方案对我不起作用的原因。我正在串联开发一个C++应用程序,它通过本地套接字连接与php脚本通信,当C++应用程序崩溃时,它让php脚本的套接字等待一条永远不会到来的消息。我试过使用session_destroy和session_unset(在session_start之前在脚本中首先调用它们)但它们不起作用;即使退出并重新启动浏览器也无济于事。如果删除session_start,我只能停

php - 在共享主机上打开套接字

我正在尝试使用以下代码在主机上打开一个套接字:$timeout=10;$s=stream_socket_client('mywebsite.com:80',$errcode,$errstring,$timeout);$message="GET/index.phpHTTP/1.0\r\n\r\n";fwrite($s,$message);while(!feof($s)){echofread($s,1024);}没什么特别的,只是我找到的一个例子。问题是每次我运行代码时都会得到不同的文件。我认为这是因为主机是共享的。有没有办法解决这个问题,即可靠地提取我要获取的正确文件?谢谢。

php - 在套接字关闭之前,我对套接字的 fwrite 不会被刷新。如何改变?

在套接字关闭之前,我对套接字的fwrite不会被刷新。如何改变?我希望它在每次fwrite后刷新。我试过:1)flush()2)fflush()3)ob_implicit_flush(true);这些都不起作用,我仍然必须退出php才能让我的套接字接收数据。包括一些示例代码,有什么问题吗?while($clientSocket=socket_accept($this->serviceConnection)){while($clientMessage=socket_read($clientSocket,1024)){echo'Relayingmessagetoserver:'.$clie

php - 在 PHP 中正确快速地进行 TELNET 的方法。套接字或 curl

几乎所有PHP中的TELNET实现示例都使用套接字(fsockopen)。这对我不起作用,因为它需要NotAcceptable时间(约60秒)。我已经尝试将fsockopen用于其他目的,发现它比cURL慢。问题#1:为什么套接字这么慢?更新:我发现我们需要设置stream_set_timeout函数,我们可以控制套接字执行时间。我很好奇如何设置适当的超时或如何在收到响应后使其“停止等待”。我无法使用cURL实现相同的功能。我应该将需要发送到telnet的命令放在哪里?CURLOPT_CUSTOMREQUEST是正确的选择吗?我正在做这样的事情:classTELNETcURL{publ

php - php中的持久本地域套接字

我找到的这个问题的答案(例如here、here和here)都涉及pfsockopen(),它似乎适合非本地套接字连接。但是,到目前为止我编写的代码使用php通过本地连接访问C++服务器。我希望这种连接是持久的(这样我就可以顺便将它用于Comet)。这是我的非持久性版本:我发现,现在我不能简单地将“$sock”保存为$_SESSION变量并在每次调用此脚本时访问它。关于如何将其变成持久连接的任何提示? 最佳答案 正如您提供的链接指出的那样,php不是一种持久性语言,并且无法在session(即页面加载)之间保持持久性。您可以通过将第二

php - ZeroMQ PUB/SUB 不适用于 PHP

我目前正在处理一个相当大的数据处理任务,需要拆分和分配处理。我有一个使用ZeroMQ的PUSH/PULL机制的完整工作流水线原型(prototype)-正在发送“处理”数据并完成OK。但是,一旦数据被扇出并且处理完成,我需要指示工作人员(在while/true循环中运行)终止。我认为为此使用ZMQ的PUB/SUB机制是明智的。但是,工作人员没有收到任何控制消息。令人沮丧的是,如果我切换到PUSH/PULL机制,工作人员会收到消息并正确终止。我从这里复制了一些原型(prototype)代码:http://pastebin.com/myZyWQ1E您可以看到生产者(向工作人员发送数据的位)