fputs($fp_send, $send_all);
stream_set_timeout($fp_send, 30);
$result = fread($fp_send, 8192);
我在本機運行時,可以取到完整的結果。
可我傳到伺服器上後,只能除到幾百個字元。
請問要如何配製呢?是要個伺服器配製什嗎?
還有沒有其它方法?
環境:LAMP
註:不要用 while,會很慢。
回複討論(解決方案)
你的網路太慢了
你的網路太慢了
是說網路太慢,所以用while很慢嗎?
除去網路的因素,還有沒有方法一次性讀取檔案所有內容呢?
完整的檔案也才4千多位元組。
我傳到伺服器上面後只能讀到一千多位元組。
本機用fread可以讀到所有字元。
註:本機用戶端也是跟外網通訊。
你有 stream_set_timeout($fp_send, 30);
那麼 30 秒還取不回資料,難道不是網路太慢了嗎?
如果我說是你兩邊的程式有問題,那你可能早就跳腳了
本機測試代碼片斷:
代碼一,用fread:
$fp = fsockopen($server, $port, $errno, $errstr ,30);
fputs($fp, $send_all);
stream_set_timeout($fp, 30);
$result = fread($fp, 5000);
print_r($result);
代碼二,用fgets:
$fp = fsockopen($server, $port, $errno, $errstr ,30);
fputs($fp, $send_all);
stream_set_timeout($fp, 30);
$result = '';
while(!feof($fp)) {
$result.= fgets($fp,1024);
}
print_r($result);
註:$server為外網伺服器位址
問題:
代碼一的結果很快,代碼二非常慢,會逾時。
請問是什麼原因,代碼有問題嗎?
本機測試代碼片斷:
代碼一,用fread:
$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = fread($fp, 5000);print_r($result);
代碼二,用fgets:
$fp = fsockopen($server, $port, $errno, $errstr ,30);fputs($fp, $send_all);stream_set_timeout($fp, 30);$result = '';while(!feof($fp)) { $result.= fgets($fp,1024);}print_r($result);
註:$server為外網伺服器位址
問題:
代碼一的結果很快,代碼二非常慢,會逾時。
請問是什麼原因,代碼有問題嗎?
註:完整取到的資料量為4000位元組。