PHP: $zip->addFile 问题
PHP: $zip->addFile issues
我编写了一个简单的脚本来将文件添加到存档中。绞尽脑汁后我无法让脚本运行。
我这里有一个 php 文件,它从一个复选框中读取,在复选框中选择的 file/s 被添加到数组 $file.
$path = ('a path');
$dir = scandir('another path');
if(isset($_POST["submit"])){
if(!isset($_POST["File"])){
echo 'A file must be selected to archive it';
} else {
require_once('zip_function.php');
$file = $_POST['File'];
$goZipper = goZipper($file, $path);
if($goZipper == false) {
echo ("Error");
} else {
echo ("Success");
}
}
}
调用函数goZipper并将$file和目的地传递给它,函数如下。
function goZipper($files, $destination = '',$overwrite = true) {
if(file_exists($destination) && !$overwrite) {
echo"File exists";
return false;
}
if(count($files)){
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true){
echo"Error opening destination";
return false;
}
foreach($files as $file){
$zip->addFile($file,basename($file));
echo("<pre>");
var_dump($zip);
exit();
}
$zip->close();
return file_exists($destination);
}
else{
return false;
}
}
该函数每次调用时都返回 true。但是没有文件被添加。谁能在这里发现一个明显的错误?
ZipArchive::addFile() 期望第一个参数是包含文件名的字符串。但是您要将 $_POST['File'] 的值传递给它,这是一个数组,因为 $_POST['File'] 是一个二维数组。
See here for the contents of $_POST['File'].
您需要做的是更改此行:
$zip->addFile($file,basename($file));
收件人:
$zip->addFile($file['tmp_name'],$file['name']);
Zip::addFile needs absolute path in the first parameter, and the second parameter would be file name as mention in PhpDOc
$zip->addFile('/path/to/index.txt', 'newname.txt');
并确保您正在获取具有绝对路径的 $file
变量。如果您从浏览器上传文件,那么您应该在第一个参数
的 $zip->addFile
方法中使用 $_FILE['file']['tmp_name']
我编写了一个简单的脚本来将文件添加到存档中。绞尽脑汁后我无法让脚本运行。
我这里有一个 php 文件,它从一个复选框中读取,在复选框中选择的 file/s 被添加到数组 $file.
$path = ('a path');
$dir = scandir('another path');
if(isset($_POST["submit"])){
if(!isset($_POST["File"])){
echo 'A file must be selected to archive it';
} else {
require_once('zip_function.php');
$file = $_POST['File'];
$goZipper = goZipper($file, $path);
if($goZipper == false) {
echo ("Error");
} else {
echo ("Success");
}
}
}
调用函数goZipper并将$file和目的地传递给它,函数如下。
function goZipper($files, $destination = '',$overwrite = true) {
if(file_exists($destination) && !$overwrite) {
echo"File exists";
return false;
}
if(count($files)){
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true){
echo"Error opening destination";
return false;
}
foreach($files as $file){
$zip->addFile($file,basename($file));
echo("<pre>");
var_dump($zip);
exit();
}
$zip->close();
return file_exists($destination);
}
else{
return false;
}
}
该函数每次调用时都返回 true。但是没有文件被添加。谁能在这里发现一个明显的错误?
ZipArchive::addFile() 期望第一个参数是包含文件名的字符串。但是您要将 $_POST['File'] 的值传递给它,这是一个数组,因为 $_POST['File'] 是一个二维数组。
See here for the contents of $_POST['File'].
您需要做的是更改此行:
$zip->addFile($file,basename($file));
收件人:
$zip->addFile($file['tmp_name'],$file['name']);
Zip::addFile needs absolute path in the first parameter, and the second parameter would be file name as mention in PhpDOc
$zip->addFile('/path/to/index.txt', 'newname.txt');
并确保您正在获取具有绝对路径的 $file
变量。如果您从浏览器上传文件,那么您应该在第一个参数
$zip->addFile
方法中使用 $_FILE['file']['tmp_name']