我精心设计了my own version简单解决方案,用于在PHP中发送大型文件。它使用文件块。这个解决方案来自各种来源,我复制粘贴以下代码来实现“分块”:
$handle = fopen($filename, 'rb');
while (!feof($handle))
{
print(@fread($handle, $chunksize));
ob_flush();
flush();
}
fclose($handle);
由于它使用print
将每个块发送到浏览器,因此它对编码PHP脚本的字符编码非常敏感。例如,我注意到,当脚本保存在ANSI
中时,下载的文件已损坏。只有,如果我保存&上传脚本编码在utf-8
,文件很好。
是否有比print
更好的功能(向浏览器发送文件),这将是脚本文件编码的独立性 - 因为,例如,会强制二进制传输到浏览器?
答案 0 :(得分:1)
对于小文件,您应该使用readfile
,这样您就可以将所有文件发送到客户端。对于非常大的文件,由于memory problems,这些功能可能无效。
如果您需要在发送之前处理它,还有一个函数file_get_contents
可以将所有文件内容放入变量中。像readfile
一样只推荐用于“小”文件。 “small”取决于允许运行PHP进程的内存(php.ini中的memory_limit
参数)。通常服务器将其设置为8M到128M,默认为16MB。