猿问

MAMP 奇怪的行为:php 从 http:// 读取外部文件非常慢

我有一个简单的 PHP 脚本来逐行读取远程文件,然后对其进行 JSON 解码。在生产服务器上一切正常,但在我的本地计算机(MAMP 堆栈、OSX)上 PHP 挂起。它非常慢,需要 2 分钟以上才能生成 JSON 文件。我认为这是json_decode()冻结的。为什么只在 MAMP 上?


我认为它陷入了while循环,因为我无法显示$str作为所有行结果的最终变量。


如果您想知道为什么我需要逐行读取文件,那是因为在真实场景中,远程 JSON 文件是一个 40MB 的文本文件。我唯一好的表现结果就是这样,但是有什么好的建议吗?


有没有配置php.ini可以帮助解决这个问题?


// The path to the JSON File

$fileName = 'http://www.xxxx.xxx/response-single.json';

    

//Open the file in "reading only" mode.

$fileHandle = fopen($fileName, "r");

    

//If we failed to get a file handle, throw an Exception.

if($fileHandle === false){

    error_log("erro handle");

    throw new Exception('Could not get file handle for: ' . $fileName);

}

   

//While we haven't reach the end of the file.

$str = "";

while(!feof($fileHandle)) {

       

    //Read the current line in.

    $line = fgets($fileHandle);

    $str .= $line;

}

    

//Finally, close the file handle.

fclose($fileHandle);

   

$json = json_decode($str, true); // decode the JSON into an associative array

谢谢你的时间。


至尊宝的传说
浏览 78回答 1
1回答

拉丁的传说

我找到了原因。它是路径协议。和$filename = 'http://www.yyy/response.json';它会使服务器冻结 1 到 2 分钟。我将文件更改为使用https协议的另一台服务器,并使用$filename = 'https://www.yyy/response.json';它有效。
随时随地看视频慕课网APP
我要回答