断点续传下载的方法详解_php技巧_脚本之家

函数代码一:删除目录及目录下的所有文件复制代码 代码如下://循环删除目录和文件函数function delDirAndFile{if ( $handle = opendir {while ( false !== ( $item = readdir {if ( $item != "." && $item != ".." ) {if ( is_dir {delDirAndFile;} else {if( unlinkecho "成功删除文件: $dirName/$itemn”;}}}closedir;ifecho “成功删除目录: $dirNamen”;}}?>函数代码二:仅删除指定目录下的文件,不删除目录文件夹。复制代码 代码如下://循环目录下的所有文件function delFileUnderDir{if ( $handle = opendir {while ( false !== ( $item = readdir {if ( $item != "." && $item != ".." ) {if ( is_dir {delFileUnderDir;} else {if( unlinkecho "成功删除文件: $dirName/$itemn”;}}}closedir;}}?>使用方法示例:假设需要删除一个名叫”upload”的同级目录即此目录下的所有文件,你可以通过以下代码完成:复制代码 代码如下:delDirAndFile;?>假设需要删除一个名叫”upload”目录下的所有文件,你可以通过以下代码完成:delFileUnderDir;?>

最近导出的时候出现一个php内存溢出的问题,原因就是在于下载的时候读取生成的临时文件过大,PHP内存无法容纳,一开如是想到更改PHP内存限制,但是这个只是一个缓兵之计,于是想到了另外一个方法是把文件分次读取,并下载。 以下是源代码:复制代码 代码如下:404 File not found!"); } $len = filesize; //获取文件大小 $filename = basename; //获取文件名字 $outFile_extension = strtolower(substr(strrchr; //获取文件扩展名 //根据扩展名 指出输出浏览器格式 switch { case "exe" : $ctype = "application/octet-stream"; break; case "zip" : $ctype = "application/zip"; break; case "mp3" : $ctype = "audio/mpeg"; break; case "mpg" : $ctype = "video/mpeg"; break; case "avi" : $ctype = "video/x-msvideo"; break; default : $ctype = "application/force-download"; } //Begin writing headers header; header("Cache-Control: public"); //设置输出浏览器格式 header("Content-Type: $ctype"); header("Content-Disposition: attachment; filename=" . $outFile); header("Accept-Ranges: bytes"); $size = filesize; //如果有$_SERVER['HTTP_RANGE']参数 if (isset ($_SERVER['HTTP_RANGE'])) { /*Range头域 Range头域可以请求实体的一个或者多个子范围。 例如, 表示头500个字节:bytes=0-499 表示第二个500字节:bytes=500-999 表示最后500个字节:bytes=-500 表示500字节以后的范围:bytes=500- 第一个和最后一个字节:bytes=0-0,-1 同时指定几个范围:bytes=500-600,601-999 但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206返回而不是以200 。 */ // 断点后再次连接 $_SERVER['HTTP_RANGE'] 的值 bytes=4390912- list = explode("=", $_SERVER['HTTP_RANGE']); //if yes, download missing part str_replace; //这句干什么的呢。。。。 $size2 = $size -1; //文件总字节数 $new_length = $size2 - $range; //获取下次下载的长度 header("HTTP/1.1 206 Partial Content"); header("Content-Length: $new_length"); //输入总长 header("Content-Range: bytes $range$size2/$size"); //Content-Range: bytes 4908618-4988927/4988928 95%的时候 } else { //第一次连接 $size2 = $size -1; header("Content-Range: bytes 0-$size2/$size"); //Content-Range: bytes 0-4988927/4988928 header("Content-Length: " . $size); //输出总长 } //打开文件 $fp = fopen; //设置指针位置 fseek; //虚幻输出 while { //设置文件最长执行时间 set_time_limit; print ; //输出文件 flush; } fclose;

:Because PHP's integer type is signed, and many IP addresses will result in negative integers.:其官方手册中提到,可以“you need to use the "%u" formatter of sprintf to get the string representation of the unsigned IP address”即,printf( '%u', ip2long;或者将其先转换为二进制然后在转换为十进制,bindec( decbin( ip2long;$strIp = '182.118.0.0';

echo ip2long; //此时输出的-1233780736echo '
';echo bindec( decbin ); // 输出3061186560,与MySQL函数输出一致~

本文由澳门新葡亰平台官网发布于编程,转载请注明出处:断点续传下载的方法详解_php技巧_脚本之家

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。