【发布时间】:2015-07-09 10:44:04
【问题描述】:
我正在尝试创建一个代码,该代码通过文件上传控制从本地计算机中选择一个 csv 文件。 csv 文件包含我要从服务器下载的文件的名称。当我按下提交按钮时,代码会读取 csv 文件并提取必须下载的文件的名称。现在代码应该创建一个 zip 文件并仅将那些文件添加到 csv 文件中提到的 zip 文件中。为此,我创建了以下代码:
<?php
if(isset($_POST['submit'])){
$filename=$_FILES['filename'];
$handle = fopen($_FILES['filename']['tmp_name'],"r");
$i=0;
while(($data = fgetcsv($handle,1000,","))!== FALSE){
$filenum[$i]=$data[0];
$i++;
}
function create_zip($files = array(),$destination = '',$overwrite = false) {
//if the zip file already exists and overwrite is false, return false
if(file_exists($destination) && !$overwrite) { return false; }
//vars
$valid_files = array();
//if files were passed in...
if(is_array($files)) {
//cycle through each file
foreach($files as $file) {
//make sure the file exists
if(file_exists("uploadedfiles/".$file)) {
$valid_files[] = $file;
}
}
}
//if we have good files...
if(count($valid_files)) {
//create the archive
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
//add the files
foreach($valid_files as $file) {
$zip->addFile($file,$file);
}
print_r($zip);
//debug
echo 'The zip archive contains ',$zip->numFiles,' files with a status of ',$zip->status;
if (file_exists($destination) ){
// push to download the zip
echo "hiii";
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename="' . $destination . '"');
readfile($destination);
// remove zip file is exists in temp path
unlink($destination);
} else {
echo "error";
}
//close the zip -- done!
$zip->close();
//check to make sure the file exists
return file_exists($destination);
}
else
{
return false;
}
}
$result = create_zip($filenum,$_SERVER['DOCUMENT_ROOT'].'/misc/my-archive.zip');
}
?>
<form enctype='multipart/form-data' action='fileuploadproject.php' method='post'>
<input size='50' type='file' name='filename' id='filename'><br>
<input type='submit' name='submit' value='Download'>
</form>
当语句 print_r($zip); 时,我正在获取添加到 zip 文件中的 csv 文件名称已执行,但我找不到在服务器文件夹中创建的文件。所以我无法下载文件。应该做什么才能将 csv 文件中的文件名添加到 zip 文件中,然后将其下载到本地 PC。请帮我找出我错在哪里。谢谢。
【问题讨论】:
-
创建zip文件的文件夹的权限是什么..?
-
在这里你删除文件
unlink($destination)然后不久之后,你尝试返回一个布尔值,如果它存在,它将永远不存在return file_exists($destination); -
在调用 zip 文件头之前,您已经输出到浏览器,在代码中与 zip 文件无关的这些头之后也有输出。这行不通。
-
^ 它应该提供一个 zip 文件作为下载文件,但由于
echo导致其中的输出无效,该 zip 文件会损坏
标签: php