Php 以zip格式下载随机文件

Php 以zip格式下载随机文件,php,html,random,directory,Php,Html,Random,Directory,几天前我发布了我的代码,现在我已经掌握了它。我已经获得了随机文件,但是,当他们压缩它成为一个zip.cpgz文件解压缩后。我确信这与我在循环中使用数组的方式有关,但我不太确定如何解决这个问题 <?php //./uploads $dir = "./uploads"; $nfiles = glob($dir.'*.{aiff}', GLOB_BRACE); $n=1; while ($n<=10){ $n ++; $arr[$n] = rand(2, sizeof($n

几天前我发布了我的代码,现在我已经掌握了它。我已经获得了随机文件,但是,当他们压缩它成为一个zip.cpgz文件解压缩后。我确信这与我在循环中使用数组的方式有关,但我不太确定如何解决这个问题

 <?php 
 //./uploads
$dir = "./uploads";
$nfiles = glob($dir.'*.{aiff}', GLOB_BRACE);     
$n=1;
while ($n<=10){
$n ++;
$arr[$n] = rand(2, sizeof($nfiles)-1);
print($arr[$n]);
print("   ");
}


$zip = new ZipArchive();
$zip_name = "zipfile.zip";
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
    $error .= "* Sorry ZIP creation failed at this time";
}

foreach($arr as $file){
    $path = "./uploads".$file;
    $zip->addFromString(basename($path),  file_get_contents($path)); 
}

$zip->close();

header('Content-Type: application/zip');
header('Content-disposition: attachment; filename='.$zip_name);
readfile('zipfile.zip');

?>

另外,如果你有点迷路,这里是我正在努力实现它。单击下载按钮最近帮助另一个用户在没有随机选择的情况下获得类似的工作,您可能会发现以下内容很有用。这会在目录中搜索特定的文件扩展名,然后随机选择10个压缩并发送的文件。将$sourcedir和$ext更改为适合-希望有帮助

/* From David Walsh's site - modified */
function create_zip( $files = array(), $destination = '', $overwrite = false ) {
    if( file_exists( $destination) && !$overwrite ) { return false; }
    $valid_files = array();
    if( is_array( $files ) ) {
        foreach( $files as $file ) if( file_exists( $file ) ) $valid_files[] = $file;
    }
    if( count( $valid_files ) ) {
        $zip = new ZipArchive();
        if( $zip->open( $destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE ) !== true) return false;
        foreach( $valid_files as $file ) $zip->addFile( $file, pathinfo( $file, PATHINFO_FILENAME ) );
        $zip->close();
        return file_exists( $destination );
    }
    return false;
}
/* Simple function to send a file */
function sendfile( $filename=NULL, $filepath=NULL ){
    if( file_exists( $filepath ) ){

        if( !is_file( $filepath ) or connection_status()!=0 ) return FALSE;

        header("Cache-Control: no-store, no-cache, must-revalidate");
        header("Pragma: no-cache");
        header("Expires: ".gmdate("D, d M Y H:i:s", mktime( date("H")+2, date("i"), date("s"), date("m"), date("d"), date("Y")))." GMT");
        header("Content-Type: application/octet-stream");
        header("Content-Length: ".(string)( filesize( $filepath ) ) );
        header("Content-Disposition: inline; filename={$filename}");
        header("Content-Transfer-Encoding: binary\n");

        if( $file = @fopen( $filepath, 'rb' ) ) {
            while( !@feof( $file ) and ( connection_status()==0 ) ) {
                print( fread( $file, 1024*8 ) );
                flush();
            }
            @fclose( $file );
        }
        return( ( connection_status()==0 ) and !connection_aborted() );
    }
}



/* Select a random entry from the array */
function pick( $arr ){
    return $arr[ rand( 0, count( $arr )-1 ) ];
}

/* The directory to which the zip file will be written before sending */
$target=__DIR__.'\zipfile.zip';

/* The directory you wish to scan for files or create an array in some other manner */
$sourcedir = 'C:\Temp\temp_uploads';

/* File extension to scan for */
$ext='txt';

/* Placeholder to store files*/
$output=array();

/* Scan the dir, or as mentioned, create an array of files some other way */
$files=glob( realpath( $sourcedir ) . DIRECTORY_SEPARATOR . '*.'.$ext );


/* Pick 10 random files from all possible files */
do{
    $rnd=pick( $files );
    $output[ $rnd ] = $rnd;
}while( count( $output ) < 10 );

/* streamline array */
$output=array_values($output);



if( $target ) {
    /* Zip the contents */
    $result=create_zip( $output, $target, true );

    /* Send the file - zipped! */
    if( $result ) {
        $res=call_user_func( 'sendfile', 'zipfile.zip', $target );
        if( $res ) unlink( $target );
    }
}

你确定它不起作用?我已经加载了你的zip文件并解压缩了它,我得到了上传的SX文件。所以我没有得到zip.cpgz文件。

当我尝试下载链接时,我得到了一个包含21个空文件的zip存档!顺便说一句-你网站上的html是无效的-没有关闭上传链接的标签,你就是那个人!哇,这样做更有意义,显然,我的电脑是唯一一台不让我解压的电脑…它对你有用吗?我可以下载zip文件,但所有21个文件都是空的,现在我遇到了致命错误:第47行的/home/ghostx19/public_html/phDownloader.php超过了30秒的最长执行时间。我该如何修复此错误。很抱歉,我仍在学习zipfile仍然包含空文件,但速度问题似乎已得到解决,目前没有关于最大执行时间的错误。你仍然面临问题吗?我只是不知道为什么文件是空的。数组只是保存一个名称还是什么?