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,用户还希望看到他们上传到服务器的照片 课程目标:
已创建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');//下载时:仍然为空/无效。
可能出现的问题1a.已解决:。创建的文件可以在关闭后立即放入zip存档
2a.手册页对此参数显示:“要添加的文件的路径”
2b.尝试将路径放在域名后,但未成功:
$zip->addFile('/f1/f2/f3/f.csv');
2c.
i.已解决:参数只是文件名。在这种情况下不需要路径。
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'];
}
}