使用PHP读取远程文件的四种方法

转自:http://www.qiandabao.com/wdgz/47.html


使用PHP读取远程文件的四种方法

1 fopen()
2 file_get_contents()
3 curl
4 socket

fopen()和file_get_contents()需要在php.ini配置文件中设置allow_url_open = on

fopen():

$handle = fopen("http://www.example.com/", "rb");
$contents = "";
while (!feof($handle)) {
 $contents .= fread($handle, 8192);
}
fclose($handle);

file_get_contents():

$contents = file_get_contents("http://www.example.com/");

Curl:

if (function_exists('curl_init')) {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
   curl_setopt($ch, CURLOPT_HEADER, 0);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1;)');
   $contents = curl_exec($ch);
   curl_close($ch);
}

Socket:

function getRemoteFile($url) {
    $parsedUrl = parse_url($url);
	$host = $parsedUrl['host'];
	if (isset($parsedUrl['path'])) {
	 	$path = $parsedUrl['path'];
	} else {
	    $path = '/';
    }

    if (isset($parsedUrl['query'])) {
	    $path .= '?'.$parsedUrl['query'];
	}

	if (isset($parsedUrl['port'])) {
	    $port = $parsedUrl['port'];
    } else {
	  	$port = 80;
    }

    $timout = 10;
    $response = '';
    $fp = @fsockopen($host, $port, $errno, $errstr, $timout);

    if (!$fp) {
        echo "Connect to $url failed";
    } else {
        fputs($fp, "Get $path HTTP/1.0\r\n".
        "Host: $host\r\n".
        "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1;) \r\n".
        "Accept:*/*\r\n".
        "Accept-Language: zh-CN, zh;q=0.5\r\n".
        "Accept-Charset: GB-2312, utf-8;q=0.7,*'q=0.7\r\n".
        "Keep_Alive: 300\r\n".
        "Connection: keep-alive\r\n".
        "Referer: http://$url\r\n\r\n");
        while ($line = fread($fp, 4096)) {
		    $response .= $line;
        }
		fclose($fp);
        $pos = strpos($response, "\r\n\r\n");
        $response = substr($response, $pos +4);
    }
    return $response;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值