Php 获取ZipArchive::close()函数和要创建的zip文件夹时出现问题
我正在尝试从刚上载的文件创建zip附件。为了确认,我尝试上载的文件正在上载。该问题仅限于zip部分和下面的代码 这是我收到的错误: 警告:ZipArchive::close():无法删除文件:没有此类文件 或中的目录 对于这一行代码:Php 获取ZipArchive::close()函数和要创建的zip文件夹时出现问题,php,file,file-upload,zip,ziparchive,Php,File,File Upload,Zip,Ziparchive,我正在尝试从刚上载的文件创建zip附件。为了确认,我尝试上载的文件正在上载。该问题仅限于zip部分和下面的代码 这是我收到的错误: 警告:ZipArchive::close():无法删除文件:没有此类文件 或中的目录 对于这一行代码: $f->close(); 有人知道我做错了什么吗 以下是完整的代码: $date = new DateTime(); $fu = new fileUpload(); $filename = $fu->upload(); $uploadedFileTy
$f->close();
有人知道我做错了什么吗
以下是完整的代码:
$date = new DateTime();
$fu = new fileUpload();
$filename = $fu->upload();
$uploadedFileTypes = $fu->getImageFileTypes();
$extensions = ['pdf','jpg', 'jpeg', 'png', 'gif'];
$differentExtensions = array_diff($uploadedFileTypes, $extensions);
if (count($differentExtensions) > 0) {
$f = new ZipArchive();
$zip = $f->open('uploads/' . $_FILES['uploadedFile']['name'][0] . ".zip", ZipArchive::CREATE | ZipArchive::OVERWRITE);
if ($zip) {
for ($index = 0; $index < count($_FILES['uploadedFile']['name']); $index++) {
$f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);
}
$f->close();
$message["attachment[0]"] = curl_file_create("uploads/{$file['uploadedFile']['name'][0]}.zip",
pathinfo("uploads/{$file['uploadedFile']['name'][0]}.zip", PATHINFO_EXTENSION),
$file['uploadedFile']['name'][0] . ".zip");
}
$date=new DateTime();
$fu=新文件上传();
$filename=$fu->upload();
$uploadedFileTypes=$fu->getImageFileTypes();
$extensions=['pdf'、'jpg'、'jpeg'、'png'、'gif'];
$differencetensions=array_diff($uploadedFileTypes,$extensions);
如果(计数($differencetensions)>0{
$f=新的ZipArchive();
$zip=$f->open('uploads/'.$\u文件['uploadedFile']['name'][0]。.zip',ZipArchive::CREATE | ZipArchive::OVERWRITE);
如果($zip){
对于($index=0;$indexaddFile($\u文件['uploadedFile']['tmp\u名称][$index],$\u文件['uploadedFile']['name'][$index]);
}
$f->close();
$message[“attachment[0]”]=curl_file_create(“uploads/{$file['uploadedFile']['name'][0]}.zip”,
pathinfo(“uploads/{$file['uploadedFile']['name'][0]}.zip”,pathinfo_扩展名),
$file['uploadedFile']['name'][0].“.zip”);
}
文件上载类:
class fileUpload
{
public function __construct()
{}
public $imageFileTypes = [];
public function getImageFileTypes()
{
return $this->imageFileTypes;
}
public function upload() {
if (!empty($_FILES["uploadedFile"]["name"])) {
$file_count = count($_FILES['uploadedFile']['name']);
$results = [];
for ($i = 0; $i<$file_count; $i++) {
// echo $file['uploadedFile']['name'][$index] . "\n";
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["uploadedFile"]["name"][$i]);
$uploadOk = 1;
//$imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// here's the important bit
$this->imageFileTypes[] = $imageFileType = strtolower(pathinfo($target_file, PATHINFO_EXTENSION));
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
return 0;
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["uploadedFile"]["tmp_name"][$i], $target_file)) {
$results[] = basename($_FILES["uploadedFile"]["name"][$i]);
} else {
return 0;
}
}
}
return $results;
class文件上传
{
公共函数构造()
{}
public$imageFileTypes=[];
公共函数getImageFileTypes()
{
返回$this->imageFileTypes;
}
公共函数上传(){
如果(!空($_文件[“uploadedFile”][“name”])){
$file_count=计数($_FILES['uploadedFile']['name']);
$results=[];
对于($i=0;$i,正如我在评论中提到的那样,看起来您正在将上载的文件移动到$fu->upload()
调用中的uploads/
目录中。但是,当您对它们进行压缩时,您使用$\u files['uploadedFile']['tmp\u name']
数组作为其位置来引用文件的“旧”位置
在脚本更改中:
$f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);
到
您是否检查了$zip
或$f
的值?请共享。@zbeevar\u dump($zip);
输出bool(true)
var\u dump($f)
:对象(ZipArchive)#5(5){[“status”]=>int(0)[“statusSys”]=>int(0)[“numFiles”]=>int(0)[“filename”=>字符串(53)”/php/uploads/zip.PNG[“comment”]=>string(0)”}
听起来好像没有添加文件。Is$f->addFile()
返回false
?文件是否存在且可读,是否有来自open\u basedir
等的限制?我认为您不必在尝试压缩文件之前将文件复制到永久位置;但您是否尝试过这样做?PHP中上载的文件是一些奇怪的小鬼影,很难处理在某些上下文中。谢谢!这创建了zip,但是没有检索到zip。那么我必须修改此部分吗?message[“附件[0]”]=curl\u文件\u创建(“上载/{$filename[0]}.zip”、pathinfo(“上载/{$filename[0]}.zip”、pathinfo扩展名)、$filename[0]..zip”);
我会像您在$f->open()
调用中那样引用zip路径/文件名:'uploads/.$\u FILES['uploadedFile']['name'][0]。“.zip”
但这只是一个猜测。谢谢您的帮助!
$f->addFile($_FILES['uploadedFile']['tmp_name'][$index], $_FILES['uploadedFile']['name'][$index]);
$f->addFile('uploads/'.basename($_FILES["uploadedFile"]["name"][$index], basename($_FILES["uploadedFile"]["name"][$index]);