PHP 5.6 — PHP: $ zip-> addFile проблемы

Я написал простой скрипт для добавления файлов в архив. После долгих царапин я не могу заставить скрипт работать.

У меня есть файл php, который читает из флажка, файл / ы, выбранные в флажке, добавляются в массив $ 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 каждый раз, когда она вызывается. Но файлы не добавляются. Кто-нибудь может заметить очевидную ошибку здесь?

0

Решение

ZipArchive :: AddFile () ожидает, что первый параметр будет строкой, содержащей имя файла. Но вы передаете ему значение $ _POST [‘File’], которое является массивом, а $ _POST [‘File’] является двумерным массивом.
Смотрите здесь содержимое $ _POST [‘File’].

Что вам нужно сделать, это изменить эту строку:

$zip->addFile($file,basename($file));

Для того, чтобы:

$zip->addFile($file['tmp_name'],$file['name']);
2

Другие решения

Индекс :: AddFile нужен абсолютный путь в первом параметре, а вторым параметром будет имя файла, как упомянуто в PHPDoc

$zip->addFile('/path/to/index.txt', 'newname.txt');

И убедитесь, что вы получаете $file переменная с абсолютным путем. если вы загружаете файл из браузера, вы должны использовать $_FILE['file']['tmp_name'] в $zip->addFile метод по первому параметру

1

По вопросам рекламы [email protected]