Введение
В моем личном проекте я использую:
Файловые операции с Flysystem работают нормально как в папке project_dir/public
, так и в папках project_dir/data
.
Проблема
Когда я пытаюсь создать ZIP-архив в public
В каталоге произошла ошибка: Could not open zip archive at:zip:\\test123\my_zip_test.zip, error: 5
.
Мой код
Контроллер, который создает ZIP-файл
<?php
namespace App\Controller;
use App\UltraHelpers\UltraAccess;
use App\UltraHelpers\UltraWhereabouts;
use League\Flysystem\Adapter\Local;
use League\Flysystem\Filesystem;
use League\Flysystem\MountManager;
use League\Flysystem\ZipArchive\ZipArchiveAdapter;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
class AdminZipController extends BaseController
{
/**
* @Route("/zip", name="zip")
*/
public function createZipArchive(Request $request, SessionInterface $session, MountManager $mountManager, ContainerInterface $container)
{
$kernel_project_dir = $container->getParameter('kernel.project_dir');
$adapter_public = new Local($kernel_project_dir .'/public/uploads/');
$adapter_zip = new ZipArchiveAdapter($kernel_project_dir .'/public/uploads/');
$filesystem_public = new Filesystem($adapter_public);
$filesystem_zip = new Filesystem($adapter_zip);
$mountManager->mountFilesystem('public', $filesystem_public);
$mountManager->mountFilesystem('zip', $filesystem_zip);
$public_path = 'public://test123/';
$public_zip = 'zip://test123/my_zip_test.zip';
$adapter_zip->openArchive($public_zip);
// get all files in directory
$files_2_zip = $mountManager->listContents($public_path, false);
// itereate trough all files in directory
foreach ($files_2_zip as $object)
{
$mountManager->copy($object['path'], $public_zip);
}
$adapter_zip->getArchive()->close();
return $this->render('default/create_zip_archive.html.twig', []);
}
}
Обновление 1
Поскольку создание ZIP-файла продолжается в папке public
, не должно возникать проблем с отсутствием доступа.
Обновление 2
Поскольку я использую Flysystem mount manager
для простого управления файлами черезта же файловая система, но в разных местах. Я хотел бы использовать ту же настройку и для файлов ZIP.
Обновление 3
Обнаружено, что ZipAdapter
использует PHP ZipArchive
.В документации коды ошибок .Итак, моя проблема: error 5 = read error
Наконец
Я что-то упустил?
Спасибо за ваши идеи и предложения!