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