Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP压缩并从多个文件夹下载文件_Php_Download_Directory_Zip - Fatal编程技术网

PHP压缩并从多个文件夹下载文件

PHP压缩并从多个文件夹下载文件,php,download,directory,zip,Php,Download,Directory,Zip,因此,我正在为字体创建一个localhost网站,我设法让用户选择多个文件到一个购物车中,如果它们来自同一文件夹,例如C:/fonts/a或C:/fonts/b,则可以下载,但如果a和b都有文件,则无法下载 那么有可能做到这一点吗?类似于从a和b下载选定的文件 下面是我的download.php代码 <?php include 'dbfunctions.php'; if (!$link) {

因此,我正在为字体创建一个localhost网站,我设法让用户选择多个文件到一个购物车中,如果它们来自同一文件夹,例如C:/fonts/a或C:/fonts/b,则可以下载,但如果a和b都有文件,则无法下载

那么有可能做到这一点吗?类似于从a和b下载选定的文件

下面是我的download.php代码

            <?php
            include 'dbfunctions.php';

            if (!$link) {
                die(mysqli_error($link));
            }
            $sql="SELECT id, Font_Name, Font_Family
                        FROM font";
            $result = mysqli_query($link, $sql) or die(mysqli_error($link));

            while($row = mysqli_fetch_array($result)){

            $Font_Family = $row['Font_Family'];
            $a = file_get_contents('./a.txt');
            $file_dir = file_get_contents('./font_path.ini');

            $path = $file_dir.$Font_Family.$a;

            $error = ""; //error holder
            if(isset($_POST['createpdf']))
            {
            $Font_Family = $_POST['Font_Family'];
            }
            $file_folder = $path;// folder to load files
            if(extension_loaded('zip'))
            {
            // Checking ZIP extension is available
            if(isset($_POST['files']) and count($_POST['files']) > 0)
            {

            // Checking files are selected
            $zip = new ZipArchive(); // Load zip library
            $zip_name = time().".zip"; // Zip name
            if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE)
            {
             // Opening zip file to load files
            $error .= "* Sorry ZIP creation failed at this time";
            }
            foreach($_POST['files'] as $file)
            {
            $zip->addFile($file_folder.$file,pathinfo($file,PATHINFO_BASENAME)); 
            readfile($path);

            }
            $zip->close();
            if(file_exists($zip_name))
            {
            // push to download the zip
            header('Content-type: application/zip');
            header('Content-Disposition: attachment; filename="'.$zip_name.'"');
            readfile($zip_name);
            // remove zip file is exists in temp path
            unlink($zip_name);
            }

            }
            else
            $error .= "* Please select file to zip ";
            }
            else
            $error .= "* You dont have ZIP extension";
            }

            ?>

您可以选择每种字体,而不考虑目录,并将其复制到临时目录,例如,
C:/fonts/temp/cartID/
。然后,您可以压缩字体目录(一些来自/fonts/a,一些来自/fonts/b)并提供下载。然后需要进行垃圾收集,即删除temp cartID dir


只是我的2¢

php给了你什么问题?他们只是把is当作并关闭它。我该怎么做?互联网上有类似的例子吗?我真的找不到。因为这是我的主管建议的,我肯定有。我不熟悉windows,但这里有一个php代码中的linux示例:exec(“cp/fonts/a/font_name.ttf/fonts/temp/845/font_name.ttf”);exec(“cp/fonts/b/font2.ttf/fonts/temp/845/font2.ttf”)。。。预成型你的拉链和下载。。。exec(“rm/fonts/temp/845/”;也可以查看这个页面:因为有一些windows命令,而且它是一个本机的php启动函数(我刚刚学到了一些新东西!)。这取决于。在他们确认“顺序”之前,我不会复制文件,所以我会在download.php脚本中进行复制。可能在购物车内容的
while
循环中,您已经找到了所需文件的位置,因此只需将其复制到temp dir即可。