一个关于fopen(url)的怪现象.

vitalgg 2010-04-13 10:37:27
问题描述:
A主机(北京)用fopen只读方式远程以http方式打开B主机(浙江)的一个文件.结果总是打不开或打开耗时很长。
A主机用fopen通过C主机(上海)中转打开B主机的一个文件。成功率100%,用时也不长。

原来一直怀疑是网络路由的问题。但是用curl方式打开文件却很快。大概比fopen快上一倍。
fopen的效率真的很低.

想了好多天,一直没结果。希望知道的高手给个解释,谢谢!


中转代码fopen方式。:

<?php
if( isset($_GET[ 'req' ]) ) {

$s = fopen( base64_decode( $_GET[ 'req' ] ),"r" );
$ret = stream_get_contents( $s, -1 );
fclose( $s );
echo $ret;
}

?>


curl方式:

// CURL 方法
$ch = curl_init( );
curl_setopt( $ch,CURLOPT_URL,$uri );
curl_setopt( $ch,CURLOPT_HEADER,0 );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER,1 );
$ret= curl_exec( $ch );
curl_close( $ch );
echo $ret;


...全文
173 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kyzy_yy_pm 2010-04-15
  • 打赏
  • 举报
回复
curl涉及的不深
vitalgg 2010-04-15
  • 打赏
  • 举报
回复
up回复内容太短了!
程序猿之殇 2010-04-13
  • 打赏
  • 举报
回复
具体区别,你要检查php的源代码了.
curl用的是libcurl,
fopen打开url是基于什么原理就不清楚了.
vitalgg 2010-04-13
  • 打赏
  • 举报
回复
以上fopen也是通过http打开文件的
fopen("http://....","r");
vitalgg 2010-04-13
  • 打赏
  • 举报
回复
通过C主机中转是相当快的
phpboy 2010-04-13
  • 打赏
  • 举报
回复
如果B主机没有allow url fopen

fopen获取内容的话本来就是有一定概率的,即便通过C主机也应该一样

curl是通过http协议获取到页面内容的
vitalgg 2010-04-13
  • 打赏
  • 举报
回复
其实用socket更快的。只不过后期处理麻烦一些.


$sock = socket_create( AF_INET,SOCK_STREAM,SOL_TCP );
socket_connect( $sock,"xxx.xxx.com",80 );
$request = 'GET '.$uri.' HTTP/1.1'."\r\n".
'Host:xxx.xxx.com'."\r\n\r\n";

socket_write( $sock,$request );
$ret = socket_read( $sock,1024 );


fishgogo2 2010-04-13
  • 打赏
  • 举报
回复
顶一下吧,不懂了
mu_rain 2010-04-13
  • 打赏
  • 举报
回复
顶一下吧,之前写采集的时候,
我也发现用curl 会比 file_get_contents 要快一些。
可惜未进行深究,借此处看答案了。
liuahuilele 2010-04-13
  • 打赏
  • 举报
回复
不太明天 顶下吧

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧