问题描述:
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;
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;
fopen("http://....","r");
curl用的是libcurl,
fopen打开url是基于什么原理就不清楚了.
我也发现用curl 会比 file_get_contents 要快一些。
可惜未进行深究,借此处看答案了。
$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 );