Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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 添加csv文件后下载的zip存档为空 如有必要,可以跳过目标。它们提供有关程序的上下文/背景。_Php_Mysql_Csv - Fatal编程技术网

Php 添加csv文件后下载的zip存档为空 如有必要,可以跳过目标。它们提供有关程序的上下文/背景。

Php 添加csv文件后下载的zip存档为空 如有必要,可以跳过目标。它们提供有关程序的上下文/背景。,php,mysql,csv,Php,Mysql,Csv,问题: 当我下载一个应该包含csv文件的zip归档文件时,我会得到一个空的归档文件或无效的归档文件。现在,我可以在服务器上制作包含csv的zip存档,并通过FileZilla下载。这不是期望的用例。用户希望在单击按钮后自动下载 关于程序: 代理注册参加活动(即RSVP),并提供一组照片。 对于每个代理,有+1张照片。用户希望下载每个事件的所有RSVP列表(即注册数据)。对于每个RSVP,用户还希望看到他们上传到服务器的照片 课程目标: 在mysql查询服务器上创建csv文件(每行为RSVP) 对

问题:
当我下载一个应该包含csv文件的zip归档文件时,我会得到一个空的归档文件或无效的归档文件。现在,我可以在服务器上制作包含csv的zip存档,并通过FileZilla下载。这不是期望的用例。用户希望在单击按钮后自动下载

关于程序:
代理注册参加活动(即RSVP),并提供一组照片。 对于每个代理,有+1张照片。用户希望下载每个事件的所有RSVP列表(即注册数据)。对于每个RSVP,用户还希望看到他们上传到服务器的照片

课程目标:

  • 在mysql查询服务器上创建csv文件(每行为RSVP)
  • 对于每一行,为该行的/RSVP照片创建zip存档
  • 需要:1个csv文件和多个zip存档,全部放在一个大存档中
  • 最终结果:将所有文件添加到一个zip存档中并下载给用户
  • 附录:每次请求时都需要新生成这个大zip文件
  • 程序的当前状态:
    已创建CSV文件。下面是添加到ZipArchive对象的。下载了zip文件,发现它是空的

    //存储查询结果。包括以显示流程
    $result=mysqli_查询($dbh,$sql);
    //打开要将信息写入的文件。
    $file=fopen('event-report.csv','w');
    $txt.='标题公司'。'事件ID'。'事件时间'。'名字,'.'姓电子邮件,'.'“代理公司”电话号码清单ID“.”网址'。'地址,'.'拉链。“\n”;
    while($row=mysqli\u fetch\u row($result)){
    对于($i=0;$iopen('test.zip',ZIPARCHIVE::CREATE)==TRUE){
    $zip->addFile('event-report.csv');
    如果(文件_存在($zip->getFromName('event-report.csv')){
    回声“存在”;
    }
    否则{
    回声“不存在”;
    echo$_服务器['DOCUMENT_ROOT'];
    }
    }
    否则{
    回显“失败代码”;
    }
    $zip->close();
    如果(!$return){
    echo“您没有对当前文件夹的写入权限。”;
    }
    否则{
    echo“您确实有访问权。”;//如果没有标题,则在服务器上成功创建了包含csv的zip文件。
    }
    标题('Content-disposition:attachment;filename=download.zip');
    标题(“内容类型:应用程序/zip”);
    readfile($dir.'/test.zip');//下载时:仍然为空/无效。
    
    可能出现的问题

  • Zip找不到该文件,因为它是同时创建的。
    1a.已解决:。创建的文件可以在关闭后立即放入zip存档
  • addFile参数不正确或缺少。
    2a.手册页对此参数显示:“要添加的文件的路径”
    2b.尝试将路径放在域名后,但未成功:
    $zip->addFile('/f1/f2/f3/f.csv');

    2c.
    i.已解决:参数只是文件名。在这种情况下不需要路径。
  • 问题

  • 如何将csv文件、zip存档或任何文件添加到 另一个zip存档,这样我下载时它就不会是空的
  • 此实现是否不正确,因为我正在尝试添加文件 创建zip存档后立即将其删除?请参阅可能的问题1
  • 如果这个问题可以通过一点阅读来解决,那么你可以链接哪些资源来指导我呢?我花了一个小时 一整天都在读关于这个问题的书,我不觉得 理解我在这里遗漏了什么。
    3a

  • 在添加到归档文件时,需要使用绝对路径进行显式操作

    $zip->addFile($abs_path, $relative_path); 
    

    解决方案:在调用readfile()之前刷新头文件。我知道我不需要flush(),但我还是把它放在那里了。请参阅帮助我包含这两条语句的帖子

    我还通过错误检查改变了一些小事情,我想我会在下面提到:
    我创建了一个具有特定权限的目录,该目录将保存我要放入存档的文件。这是在创建csv和zip之前在开始时完成的

    $dir = 'tmp/';
    if ( !file_exists($dir) ) {
        mkdir ($dir, 0777);
    }
    
    打开文件也已更改。它现在涉及我创建的新目录:

    $zip = new ZipArchive;
    if($zip->open($dir.'test.zip', ZIPARCHIVE::CREATE) === TRUE ){
    
        $res = $zip->addFile('tmp/event-report.csv', 'event-report.csv');                           //add the report csv file.
        if ($res){
            echo "Exists ";
        }
        else{
            echo "Does Not Exist ";
            //echo $_SERVER['DOCUMENT_ROOT'];
        }
    }
    

    感谢所有参与此问题或刚刚查看此问题的人。

    我还没有创建其他zip存档。我现在只使用我当前拥有的1个csv文件进行测试。理论上,它被添加到zip存档并下载到我上面的代码片段中。调试有点混乱,因为打开的浏览器选项卡o下载立即关闭。看不到任何回显数据。将路径设置为完整路径:例如
    $zip->addFile($\u SERVER['DOCUMENT\u ROOT'../path/to/my/file.csv');
    下一个错误是
    readfile($file);
    您希望在这里读什么?不确定为什么
    readfile($file)
    存在。我不希望阅读任何内容。将其删除。此外,编辑帖子以包括一些错误检查。我尝试使用
    $\u服务器['DOCUMENT\u ROOT']
    但它返回了我无法访问的路径中的文件夹名称(即
    home/showsell/restofpath
    其中home和showsell是我在服务器上看不到的文件夹)。因此,我只使用了之后的内容+
    /path/to/my/file.csv
    (替换为正确的目录)。没有成功。我还尝试了未知的文件夹名称,也没有成功。
    readfile()
    是必需的!此函数调用将文件内容发送到
    stdout
    (即HTTP响应)!确保“test.zip”在进程结束时存在。请检查
    ZipArchive::close()的返回值
    。如果
    为false
    ,则您可能没有对当前文件夹的写入权限。请尝试将Zip文件写入您知道您有写入权限的绝对位置。谢谢!我修改了addFile参数,但仍然存在原始问题。我提交了自己的答案,因为我现在似乎可以使用它。
    $dir = 'tmp/';
    if ( !file_exists($dir) ) {
        mkdir ($dir, 0777);
    }
    
    $zip = new ZipArchive;
    if($zip->open($dir.'test.zip', ZIPARCHIVE::CREATE) === TRUE ){
    
        $res = $zip->addFile('tmp/event-report.csv', 'event-report.csv');                           //add the report csv file.
        if ($res){
            echo "Exists ";
        }
        else{
            echo "Does Not Exist ";
            //echo $_SERVER['DOCUMENT_ROOT'];
        }
    }