面对一些因为各种各样原因而未扩展file_get_content功能的服务器。是不是有些头疼。下面给大家贴出一个类,可以解决这个问题。调用方法跟file_get_content一样。
可以如下调用:
//$result = HttpUtil::DoGet('http://www.baidu.com');
//echo($result);
**************************以下为code***********************************************
<?php
class HttpUtil{
public static function DoGet($url){
$url2 = parse_url($url);
//var_dump($url2);
$url2["path"] = (!isset($url2["path"]) || $url2["path"] == "" ? "/" : $url2["path"]);
$url2["port"] = (!isset($url2["port"]) || $url2["port"] == "" ? 80 : $url2["port"]);
$host_ip = @gethostbyname($url2["host"]);
$fsock_timeout = 2; //2 second
if(($fsock = fsockopen($host_ip, $url2['port'], $errno, $errstr, $fsock_timeout)) < 0){
return false;
}
$request = $url2["path"] .(isset($url2["query"]) ? "?".$url2["query"] : "");
$in = "GET " . $request . " HTTP/1.0\r\n";
$in .= "Accept: */*\r\n";
$in .= "User-Agent: Payb-Agent\r\n";
$in .= "Host: " . $url2["host"] . "\r\n";
$in .= "Connection: Close\r\n\r\n";
if(!@fwrite($fsock, $in, strlen($in))){
fclose($fsock);
return false;
}
return self::GetHttpContent($fsock);
}
public static function GetHttpContent($fsock=null) {
$out = null;
while($buff = @fgets($fsock, 2048)){
$out .= $buff;
}
fclose($fsock);
$pos = strpos($out, "\r\n\r\n");
$head = substr($out, 0, $pos); //http head
$status = substr($head, 0, strpos($head, "\r\n")); //http status line
$body = substr($out, $pos + 4, strlen($out) - ($pos + 4));//page body
if(preg_match("/^HTTP\/\d\.\d\s([\d]+)\s.*$/", $status, $matches)){
if(intval($matches[1]) / 100 == 2){
return $body;
}else{
return false;
}
}else{
return false;
}
}
}
?>
分享到:
相关推荐
此外,对于超时问题,`file_get_contents` 有一个名为`ini_set('default_socket_timeout', $seconds)` 的设置,可以用来调整超时时间,而cURL则直接通过`CURLOPT_CONNECTTIMEOUT` 进行控制。如果遇到`file_get_...
解决这个问题的一种方法是使用 `cURL` 库代替 `file_get_contents`。`cURL` 提供了更丰富的配置选项,可以处理 GZIP 压缩。在 `cURL` 设置中,添加 `CURLOPT_ENCODING` 参数,并将其值设为 `"gzip"`,如下所示: ``...
如果您无法修改服务器配置,或者上述方法不适用,您可以选择使用cURL库来代替 `file_get_contents`。cURL是一个强大的URL传输库,支持多种协议,包括HTTPS。下面是一个使用cURL的示例函数 `http_request`,它封装了...
在此文档中,提到有两种方法可以解决file_get_contents的超时问题。 一种方法是通过增加超时的时间限制。文档中指出,set_time_limit()函数并不影响file_get_contents的执行超时,因为它仅仅是设置PHP脚本执行的总...
今天因工作需要,需要用 curl / file_get_contents 获取需要授权(Authorization)的页面内容,解决后写了这篇文章分享给大家。 PHP curl 扩展,能够在服务器端发起POST/GET请求,访问页面,并能获取页面的返回数据。 ...
总的来说,当遇到 `file_get_contents()` 的超时问题时,可以尝试通过设置 `context` 参数或者切换到 cURL 扩展库来解决。cURL 提供了更多的灵活性和控制权,尤其是在处理远程资源时,它通常被视为更可靠的选择。...
举例来说,当尝试从远程服务器获取数据时,使用`file_get_contents`可能遇到超时问题,即使设置了超时限制也可能不生效。此时,切换到`curl`,通过`curl_setopt`设置超时、用户代理等参数,可以显著提高稳定性和成功...
### 服务器无法发邮件的问题彻底解决了 在日常的网站运营及维护过程中,我们经常会遇到一些棘手的技术问题,其中服务器无法发送邮件就是一种常见的故障。本文将详细介绍如何在服务器已经屏蔽了所有发邮件函数的情况...
$file_content = file_get_contents($file_path); $file_size = filesize($file_path); $file_type = mime_content_type($file_path); $post_data = array( 'file' => base64_encode($file_content), 'filename' ...
try (WatchService watcher = FileSystems.getDefault().newWatchService()) { directory.register(watcher, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, ...
- **解决方法**: - 检查URL是否正确且可达。 - 确保目标服务器正常运行并能响应请求。 - 检查网络连接状态。 - 在PHP.ini中开启`allow_url_fopen` 设置,允许通过URL访问文件。 - 使用异常处理机制来捕获和处理...
local file_info = ngx.req.get_post_args() local file_name = file_info["upload_field_name"]["name"] local file_size = tonumber(file_info["upload_field_name"]["size"]) local file_path = file_info[...
这里介绍六种不同的方法: 1. **file_get_contents**:这是最简单的获取网页内容的方法,适合基本需求。例如: ...在使用这些方法时,记得检查服务器配置(如cURL扩展)和处理可能出现的错误情况。
$email_content = file_get_contents($file); // 2. 使用PHP的mailparse扩展解析EML if (function_exists('mailparse_msg_parse')) { $parsed_message = mailparse_msg_parse($email_content); $structure = ...
PHPOK系统的GETSHELL1漏洞通过利用缓存类的不当设计以及对`file_put_contents`函数的不安全使用,使得攻击者能够绕过安全措施并在服务器上执行任意代码。此外,反序列化漏洞也为攻击者提供了额外的攻击途径。对于...
CGIC(Common Gateway Interface C Library)是一个开源的C语言库,专门为Web服务器上的CGI(Common Gateway Interface)程序设计...它极大地简化了Web服务器与外部程序之间的交互,促进了Web服务的灵活性和可扩展性。
对于简单的POST请求,还可以使用file_get_contents函数配合stream_context_create创建一个上下文来实现: ```php $data = array('param1' => 'value1', 'param2' => 'value2'); $options = array('http' => array('...