通常PHP获取文件时,会使用file_get_contents()。但当获取大文件时,可能会报这样的错:
Allowed memory size of 134217728 bytes exhausted (tried to allocate 49422336 bytes)
这是因为file_get_contents()获取文件时,会把文件内容放到一个字符串里, 当字符串大小超过php.ini里设置的memory_limit 参数时,就会报这个错。解决方法是可以把这个参数修改的大一点,一般是128M,可以修改的更大点。但修改后需要重启服务器,这很麻烦。也可以动态修改这个值,使用 ini_set。 本人使用的是下面的方法来解决:
$handle = fopen("远程文件地址", "rb");
$fp = fopen('vv.mp4', 'w');//打开一个文件,
while (!feof($handle)) { //循环读取远程文件
$contents = '';
$contents = fread($handle, 1048576);//每次读取1M
fwrite($fp, $contents);//将远程文件内容写入打开的vv.mp4文件
}
fclose($handle);
fclose($fp);
这样再大的文件也可以读取,只不过循环次数多点,用时长点。