为什么下载php文件失败

下载php文件失败是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出,其解决办法就是实现分段下载,并限制下载速度即可。

为什么下载php文件失败

推荐:《PHP视频教程》 

解决PHP下载大文件失败,并限制下载速度

1.问题:

PHP在使用readfile函数定义下载文件时候,文件不可以过大,否则会下载失败,文件损坏且不报错;

立即学习“PHP免费学习笔记(深入)”;

2.原因:

这个是因为readfile读取文件的时候会把文件放入缓存,导致内存溢出;

3.解决:分段下载,并限制下载速度;

<?php //设置文件最长执行时间set_time_limit(0);if (isset($_GET['filename']) && !empty($_GET['filename'])) {    $file_name = $_GET['filename'];    $file = __DIR__ . '/assets/' . $file_name;} else {    echo 'what are your searching for?';    exit();}if (file_exists($file) && is_file($file)) {    $filesize = filesize($file);    header('Content-Description: File Transfer');    header('Content-Type: application/octet-stream');    header('Content-Transfer-Encoding: binary');    header('Accept-Ranges: bytes');    header('Expires: 0');    header('Cache-Control: must-revalidate');    header('Pragma: public');    header('Content-Length: ' . $filesize);    header('Content-Disposition: attachment; filename=' . $file_name);    // 打开文件    $fp = fopen($file, 'rb');    // 设置指针位置    fseek($fp, 0);    // 开启缓冲区    ob_start();    // 分段读取文件    while (!feof($fp)) {        $chunk_size = 1024 * 1024 * 2; // 2MB        echo fread($fp, $chunk_size);        ob_flush(); // 刷新PHP缓冲区到Web服务器        flush(); // 刷新Web服务器缓冲区到浏览器        sleep(1); // 每1秒 下载 2 MB    }    // 关闭缓冲区    ob_end_clean();    fclose($fp);} else {    echo 'file not exists or has been removed!';}exit();

登录后复制

 

以上就是为什么下载php文件失败的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2123579.html

(0)
上一篇 2025年2月24日 19:50:44
下一篇 2025年2月22日 21:31:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • lnmp下如何删除php

    lnmp删除php的方法:首先执行命令“/etc/init.d/php-fpm5.6 stop”停止PHP的进程;然后通过命令“rm -f”删除对应版本的相关目录和文件即可。 推荐:《PHP视频教程》  以删除PHP 5.6版本为例: 先停…

    2025年2月24日
    200
  • php去除字符串中的数字的方法

    php去除字符串中数字的方法:首先创建一个PHP示例文件;然后使用正则表达式“$class=preg_replace(“/\d+/”,”, $res);”实现去除字符串中的数字即可。 推荐:《PHP视频教…

    2025年2月24日
    200
  • php如何修改上传图片大小

    php修改上传图片大小的方法:首先打开脚本文件;然后使用getimagesize函数获取图片尺寸;最后通过imagecreatetruecolor等函数方法修改图片大小即可。 推荐:《PHP视频教程》  PHP修改图片大小的实现方法 主要通…

    2025年2月24日
    200
  • php如何安装snmp扩展

    php安装snmp扩展的方法:首先进入ext文件夹下的snmp文件夹;然后设置配置文件;接着通过“make && make install”命令进行编译;最后将模块增加进配置文件并重启服务即可。 推荐:《PHP视频教程》  …

    2025年2月24日
    200
  • php删除多级目录的方法

    php删除多级目录的方法:首先创建一个PHP示例文件;然后定义一个rmdirs方法;接着通过“while (false!==($child=$d->read())){..}”方法清除目录里面的所有文件;最后调用rmdirs方法删除即可…

    2025年2月24日
    200
  • php怎么删除对象的属性

    php删除对象的属性的方法:可以利用unset()函数来删除。unset()函数用于销毁给定的变量,例如【unset($address[‘addAddress’]);】,表示删除address对象的【addAddre…

    2025年2月24日
    200
  • windows下怎么安装php开发环境

    windows下安装php开发环境的方法:1、下载并安装apache;2、修改apache配置文件并添加环境变量;3、安装php并编辑配置文件;4、安装mysql并添加php_mysqli.dll扩展。 一、Apache (推荐教程:php…

    2025年2月24日
    200
  • php如何将字符串转为数组

    php将字符串转为数组的方法:可以利用explode()函数来实现。explode()函数可以使用一个字符串分割另一个字符串,并返回由字符串组成的数组,例如【explode(‘,’,$str,0)】。 explode…

    2025年2月24日
    200
  • php怎样把字符串转换成小写形式

    php把字符串转换成小写形式的方法:可以利用内置函数strtolower()来进行转换。strtolower()函数可以把字符串中的全部大写字母转换为小写,例如【strtolower(“Hello WORLD.”)】…

    2025年2月24日
    200
  • php如何获取数据库查询结果

    php获取数据库查询结果的方法:可以利用mysqli_fetch_array()函数来获取。mysqli_fetch_array()函数可以从数据库查询结果集中取得一行作为数组,例如【mysql_query($sql)】。 mysqli_f…

    2025年2月24日
    200

发表回复

登录后才能评论