file_get_contents的超时在PHP中不起作用
发布时间:2020-12-13 16:56:19 所属栏目:PHP教程 来源:网络整理
导读:我创建了一个类来在 PHP中使用一些HTTP方法.在这里,我有一个HTTP POST的方法 public function post ($content,$timeout=null){ $timeInit = new DateTime(); $this-method = 'POST'; $header = array(); $header['header'] = null; $header['content'] = is_
我创建了一个类来在
PHP中使用一些HTTP方法.在这里,我有一个HTTP POST的方法
public function post ($content,$timeout=null) { $timeInit = new DateTime(); $this->method = 'POST'; $header = array(); $header['header'] = null; $header['content'] = is_array($content) ? http_build_query($content) : $content; $header['method'] = $this->method; if ($timeout != NULL) { $header['header'] .= "timeout: $timeout" } $header['header'] .= "Content-length: ".strlen($header['content']); $headerContext = stream_context_create(array('http' => $header)); $contents = file_get_contents($this->url,false,$headerContext); $this->responseHeader = $http_response_header; $timeFinal = new DateTime(); $this->time = $timeInit->diff($timeFinal); return $contents; } 基本上,我创建了一个$header并使用file_get_contents将一些$content发布到URL中. 我没有看到任何错误,我无法得到我正在发送的标题. SO中的其他类似问题建议使用Curl(我正在使用它,但由于其他原因我正在更改file_get_contents)或fsockopen,但这不是我需要的. 存在一些使用file_get_contents设置超时的方法? 解决方法
对于stream_context_create()
http://php.net/manual/en/function.stream-context-create.php,它需要[array $options [,array $params]]
当你传递$header时,看起来你没有正确构建数组.会不会像这样的工作? public function myPost($content,$timeout = null) { $timeInit = new DateTime(); $this->method = 'POST'; $header = array(); $header['header'] = null; $header['content'] = is_array($content) ? http_build_query($content) : $content; $header['method'] = $this->method; if ($timeout) { $header['header']['timeout'] = $timeout; } $header['header']['Content-length'] . strlen($header['content']); $headerContext = stream_context_create(array('http' => $header)); $contents = file_get_contents($this->url,$headerContext); $this->responseHeader = $http_response_header; $timeFinal = new DateTime(); $this->time = $timeInit->diff($timeFinal); return $contents; } 但更好的方法是使用它,如例子所示,例如, $timeInit = new DateTime(); // all your defaults go here $opts = array( 'http'=>array( 'method'=>"POST",) ); //this way,inside conditions if you want $opts['http']['header'] = "Accept-language: enrn" . "Cookie: foo=barrn"; $context = stream_context_create($opts); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |