介绍
在我的个人项目中,我正在使用:
- Symfony v4.2.3;
- PHP v7.2.14
- OnUp Flysystem捆绑包;
- Flysystem ZipArchive。
- 在 Windows 10 Pro 上(php 内置开发服务器);
Flysystem 的文件操作在project_dir/public
文件夹和project_dir/data
文件夹中都可以正常工作。
问题
当我尝试在public
目录中创建 ZIP 存档时出现错误: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
最后
我错过了什么吗?
感谢您的想法和建议!