二进制安全函数,用于在PHP中发送文件块

时间:2014-02-24 14:23:31

标签: php download binaryfiles chunking

我精心设计了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更好的功能(向浏览器发送文件),这将是脚本文件编码的独立性 - 因为,例如,会强制二进制传输到浏览器?

1 个答案:

答案 0 :(得分:1)

对于小文件,您应该使用readfile,这样您就可以将所有文件发送到客户端。对于非常大的文件,由于memory problems,这些功能可能无效。

如果您需要在发送之前处理它,还有一个函数file_get_contents可以将所有文件内容放入变量中。像readfile一样只推荐用于“小”文件。 “small”取决于允许运行PHP进程的内存(php.ini中的memory_limit参数)。通常服务器将其设置为8M到128M,默认为16MB。