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

用于在PHP中发送文件块的二进制安全函数,php,download,binaryfiles,chunking,Php,Download,Binaryfiles,Chunking,我精心设计了一个简单的解决方案,用于在PHP中发送大文件。它使用文件块。此解决方案受各种来源的保护,我复制粘贴了以下代码以实现“分块”: 由于它使用print将每个块发送到浏览器,因此它对字符编码非常敏感,PHP脚本就是在字符编码中编码的。例如,我注意到,当脚本保存在ANSI中时,下载的文件已损坏。仅当我保存并上传以utf-8编码的脚本时,文件就可以了 是否有比打印(将一段文件发送到浏览器)更好的功能,它独立于脚本文件编码——因为,例如,将强制二进制传输到浏览器?对于您应该使用的小文件,这使得您

我精心设计了一个简单的解决方案,用于在PHP中发送大文件。它使用文件块。此解决方案受各种来源的保护,我复制粘贴了以下代码以实现“分块”:

由于它使用
print
将每个块发送到浏览器,因此它对字符编码非常敏感,PHP脚本就是在字符编码中编码的。例如,我注意到,当脚本保存在
ANSI
中时,下载的文件已损坏。仅当我保存并上传以
utf-8
编码的脚本时,文件就可以了


是否有比打印(将一段文件发送到浏览器)更好的功能,它独立于脚本文件编码——因为,例如,将强制二进制传输到浏览器?

对于您应该使用的小文件,这使得您可以将一个文件发送到客户端。对于非常大的文件,这些函数可能由于以下原因而不起作用


此外,如果您需要在发送之前对其进行处理,还可以使用一个函数将所有文件内容放入一个变量中。Like
readfile
仅建议用于“小”文件。“小”取决于允许运行PHP进程的内存(
memory\u limit
PHP.ini中的参数)。通常服务器将其设置为8M到128M,默认为16MB。

谢谢您的建议。然而,它并没有回答我的问题,因为您提到的所有函数也以字符串形式输出文件。顺便说一句:你应该用降价来格式化你的答案,使它们更具可读性。首先,使用链接。所以:写:
[文件获取内容](http://us1.php.net/manual/en/function.file-get-contents.php)
,而不是:
文件获取内容http://us1.php.net/manual/en/function.file-get-contents.php
,因为在表单中,会显示整个链接,从而中断文本流和格式。另外,链接到英文,而不是西班牙文版本的网页。谢谢编辑。我考虑将来的答案。
$handle = fopen($filename, 'rb'); 

while (!feof($handle))
{ 
    print(@fread($handle, $chunksize));

    ob_flush();
    flush();
} 

fclose($handle);