使用简单便捷的 file_get_contents("http://example.com/") 函数,来获取一个 URL 的返回内容,但是,如果 http://example.com/ 这个网站响应缓慢,file_get_contents() 就会一直卡在那儿,不会超时。PHP 脚本会一直执行下去。这样,当所有的 php-cgi 进程都卡在 file_get_contents() 函数时,这台 Nginx+PHP 的 WebServer 已经无法再处理新的 PHP 请求了,Nginx 将给用户返回“502 Bad Gateway”。
所以,要做到彻底解决,只能改掉直接使用 file_get_contents("http://example.com/") 的习惯,而是稍微修改一下,加个超时时间,用以下方式来实现 HTTP GET 请求。要是觉得麻烦,可以自行将以下代码封装成一个函数。
<?php $ctx = stream_context_create(array( 'http' => array( 'timeout' => 1 //设置一个超时时间,单位为秒 ) ) ); file_get_contents("http://example.com/", 0, $ctx); ?>
备注:有时候这个超时时间不起作用,还是用curl函数来获取更好,file_get_contents 获取本地文件可能相对好些。
curl 函数简单获取内容:
public function curls($url, $timeout = '10') { // 1. 初始化 $ch = curl_init(); // 2. 设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 3. 执行并获取HTML文档内容 $info = curl_exec($ch); // 4. 释放curl句柄 curl_close($ch); return $info; }
相关推荐
本文将详细讨论`file_get_contents`和`curl`的区别,以及为何`curl_get_contents`可能比`file_get_contents`更为稳定。 `file_get_contents`是一个非常简单且易于使用的函数,它能够读取文件或者URL的内容。然而,...
2. **性能考虑**:在某些情况下,`file_get_contents` 可能比 `cURL` 更快,但具体性能取决于许多因素,包括网络环境、服务器响应时间以及所使用的特定功能。 3. **代理使用**:如果你需要通过代理服务器获取远程...
如果你使用file_get_contents获取远程文件内容返回为空或提示该函数不可用,也许本文能帮到你! 使用file_get_contents和fopen必须空间开启allow_url_fopen。方法:编辑php.ini,设置allow_url_fopen = On,allow_url...
本文将详细讲解当`file_get_contents`获取不到网页内容时,如何通过使用cURL库来解决这个问题。 首先,`file_get_contents` 的基本用法是这样的: ```php $content = file_get_contents('http://example.com'); ``...
当使用file_get_contents函数直接下载图片时,如果没有考虑到服务器可能返回的压缩内容,就可能会导致获取到的数据无法被正确解析为图片,从而出现损坏。同样的,使用cURL获取内容时,如果不设置正确的HTTP头信息...
具体到file_get_contents的使用,如果遇到超时错误,可以通过查看错误提示来判断错误类型,常见的超时错误是读取超时。为了避免或解决这类问题,可以尝试以下两种方法: 1. 增加超时的时间限制:通过设置context的...
解决这个问题的一种方法是使用 `cURL` 库代替 `file_get_contents`。`cURL` 提供了更丰富的配置选项,可以处理 GZIP 压缩。在 `cURL` 设置中,添加 `CURLOPT_ENCODING` 参数,并将其值设为 `"gzip"`,如下所示: ``...
不过,`file_get_contents` 不支持所有协议,且不提供一些高级特性,如自定义头信息、POST 数据或超时控制。当需要更复杂的网络操作时,`file_get_contents` 可能不够用。 3. **Socket** Socket 提供了底层网络...
下面是file_get_contents和curl两个函数同样功能的不同写法file_get_contents函数的使用示例:复制代码 代码如下:< ?php$file_contents = file_get_contents(‘https://www.jb51.net’);echo $file_...
file_get_contents代替使用curl其实不多见了,但有时你碰到服务器不支持curl时我们可以使用file_get_contents代替使用curl,下面看个例子。 当用尽一切办法发现 服务器真的无法使用curl时。或者curl不支持https时。...
示例中的 `vita_get_url_content()` 函数就是这样实现的,先尝试使用 `file_get_contents`,如果失败则转而使用 `curl`。但是,如果两者都被禁用,此函数将无法正常工作。 关于 `file_get_contents` 和 `curl` 的...
如果您无法修改服务器配置,或者上述方法不适用,您可以选择使用cURL库来代替 `file_get_contents`。cURL是一个强大的URL传输库,支持多种协议,包括HTTPS。下面是一个使用cURL的示例函数 `http_request`,它封装了...
function curl_get($url, $gzip=false){ $curl = curl_init($url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 返回结果而不是直接输出 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 设置连接...
PHP提供了多种方法来实现这一目的,其中最为常见的三种方式是使用file_get_contents()函数、curl扩展以及fopen()函数。虽然这三个函数都可以实现资源的读取,但是它们的效率和适用场景存在差异。本篇将详细分析这三...
需要注意的是,虽然file_get_contents()能够完成发送HTTP请求的任务,但在实际的Web开发中,使用专门的HTTP客户端库(如cURL)或者框架提供的HTTP客户端功能会更加方便和可靠。cURL提供了更多配置选项,更好的错误...
另外,curl的性能比file_get_contents高,所以用curl重写file_get_contents function _file_get_contents($s) { $ret = ; $ch = curl_init($s); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch...