PHP ZipArchive 删除文件名的第一个字符
PHP ZipArchive Removing First Character of Filenames
下面的代码成功创建了指定目录和所有子目录的 zip 文件。我遇到的问题是最终结果从根目录中的每个文件名和文件夹名中删除了第一个字符;同样的行为不会发生在子目录中。
<?php
require('../config/config.php');
$rootPath = $abs_path.'/includes/qrcodes/'; // SOURCE FOLDER TO ZIP
$zipFilename = 'qr_images.zip';
$zip = new ZipArchive();
$zip->open($zipFilename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($files as $name => $file)
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
if (!$file->isDir())
{
$zip->addFile($filePath, $relativePath);
}else {
if($relativePath !== false)
$zip->addEmptyDir($relativePath);
}
}
$zip->close();
?>
目前生成的 zip 文件包括:
- 再见(文件夹)
- radio_1.png
- radio_2.png
- nfosys(文件夹)
- infosys_1.png
- ehicles(文件夹)
- vehicle_1.png
- vehicle_2.png
文件夹应命名为 "radios"、"infosys" 和 "vehicles"。
该代码似乎是为没有结尾反斜杠的 $rootpath 变量设计的。如果您要更改它 $rootPath = $abs_path.'/includes/qrcodes';
,则需要 substr 处的 +1。否则,相对路径将以“/”开头。
下面的代码成功创建了指定目录和所有子目录的 zip 文件。我遇到的问题是最终结果从根目录中的每个文件名和文件夹名中删除了第一个字符;同样的行为不会发生在子目录中。
<?php
require('../config/config.php');
$rootPath = $abs_path.'/includes/qrcodes/'; // SOURCE FOLDER TO ZIP
$zipFilename = 'qr_images.zip';
$zip = new ZipArchive();
$zip->open($zipFilename, ZipArchive::CREATE | ZipArchive::OVERWRITE);
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);
foreach ($files as $name => $file)
{
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($rootPath) + 1);
if (!$file->isDir())
{
$zip->addFile($filePath, $relativePath);
}else {
if($relativePath !== false)
$zip->addEmptyDir($relativePath);
}
}
$zip->close();
?>
目前生成的 zip 文件包括:
- 再见(文件夹)
- radio_1.png
- radio_2.png
- nfosys(文件夹)
- infosys_1.png
- ehicles(文件夹)
- vehicle_1.png
- vehicle_2.png
文件夹应命名为 "radios"、"infosys" 和 "vehicles"。
该代码似乎是为没有结尾反斜杠的 $rootpath 变量设计的。如果您要更改它 $rootPath = $abs_path.'/includes/qrcodes';
,则需要 substr 处的 +1。否则,相对路径将以“/”开头。