大多数现代浏览器都允许自动下载某些类型的文件,而无需任何服务器端代码,例如 PHP 脚本。例如,zip 文件或 EXE 文件。
如果 HTML 超链接指向 ZIP 或 EXE 文件,则浏览器会下载该文件并弹出保存对话框。但是,txt文本文件、图像文件等不会下载,而是在浏览器中打开的,您可以将其保存到本地文件系统中。
readfile() 函数
要下载 txt、jpg 等文件(而不是浏览器自动打开它们),我们可以使用 PHP 内置函数库的 readfile() 函数。
此函数读取文件并将其写入输出缓冲区。
第二个参数 $use_include_path 默认为 false,因此将下载当前目录中的文件。如果设置为 true,则将搜索添加到 php.ini 配置的 include_path 设置的目录以查找要下载的文件。
readfile() 函数返回读取的字节数或 false,即使它是否成功完成。
示例
以下 PHP 脚本显示了 readfile() 函数的用法。
要下载文件,应将 Content-Type 响应标头设置为 application/octect-stream 。此 MIME 类型是二进制文件的默认值。浏览器通常不会执行它,甚至不会询问是否应该执行它。
此外,将 Content-Disposition 标头设置为 attachment 会提示弹出“另存为”对话框。
将上述脚本另存为文档根文件夹中的 “download.php”。确保要下载的文件位于同一文件夹中。
启动服务器并在浏览器中访问 http://localhost/download.php。您将获得一个“另存为”对话框,如下所示 -

您可以选择一个名称并下载文件。
对于大型文件,您可以从文件流中读取具有特定预定义大小的块。如果 Content-Disposition 头设置为 “attachment”,浏览器会将其保存在本地文件系统中,如上例所示。