php ziarchive 重命名文件为空
php ziparchive renamed file is empty
我正在使用 php 创建一个包含一些图像的 ziarchive。当我尝试重命名文件时,这很好用。这是有效的代码:
$zip_archive->open(tempnam("tmp", "zip"), ZipArchive::OVERWRITE);
foreach ($images as $image) {
$path = $image['path'];
$title = $image['title'];
if(file_exists($path)){
$zip_file->addFile($path, pathinfo($path, PATHINFO_BASENAME));
}
}
$zip_archive->close();
$images 是一个数组,可能如下所示:
$images = array(
'path' => array(
'folder/title1.jpg',
'folder/title2.jpg'
),
'title' => array(
'new_name1.jpg',
'new_name2.jpg'
)
)
我想将图片命名为标题。
$zip_file->addFile($path, $title);
但是发生的事情是 zip 中标题为名称的文件是空的。我做错了什么?
如果我运行这个
$images = array(
'path' => array(
'folder/title1.jpg',
'folder/title2.jpg'
),
'title' => array(
'new_name1.jpg',
'new_name2.jpg'
)
);
$i = 0;
foreach($images as $image)
var_dump($image, $i++);
我明白了
array(2) {
[0]=>
string(17) "folder/title1.jpg"
[1]=>
string(17) "folder/title2.jpg"
}
int(0)
array(2) {
[0]=>
string(13) "new_name1.jpg"
[1]=>
string(13) "new_name2.jpg"
}
int(1)
这意味着这些
$path = $image['path'];
$title = $image['title'];
都是NULL
您有两种方法可以解决此问题:
将数组更改为
$images = array(
[0] => array(
'path' => 'folder/title1.jpg',
'title' => 'new_name1.jpg'
),
[1] => array(
'path' => 'folder/title2.jpg'
'title' => 'new_name2.jpg',
)
);
在这种情况下,您的初始代码应该可以工作
改变访问数组的方式,做类似
的事情
for($i = 0;$i < count($images['path']);$i++)
{
$path = $image['path'][$i];
$title = $image['title'][$i];
}
这样可以确保图片的路径和标题具有相同的索引,但不建议这样做,因为数组必须排序。
我建议你更改数组,这样你的代码应该没问题
我正在使用 php 创建一个包含一些图像的 ziarchive。当我尝试重命名文件时,这很好用。这是有效的代码:
$zip_archive->open(tempnam("tmp", "zip"), ZipArchive::OVERWRITE);
foreach ($images as $image) {
$path = $image['path'];
$title = $image['title'];
if(file_exists($path)){
$zip_file->addFile($path, pathinfo($path, PATHINFO_BASENAME));
}
}
$zip_archive->close();
$images 是一个数组,可能如下所示:
$images = array(
'path' => array(
'folder/title1.jpg',
'folder/title2.jpg'
),
'title' => array(
'new_name1.jpg',
'new_name2.jpg'
)
)
我想将图片命名为标题。
$zip_file->addFile($path, $title);
但是发生的事情是 zip 中标题为名称的文件是空的。我做错了什么?
如果我运行这个
$images = array(
'path' => array(
'folder/title1.jpg',
'folder/title2.jpg'
),
'title' => array(
'new_name1.jpg',
'new_name2.jpg'
)
);
$i = 0;
foreach($images as $image)
var_dump($image, $i++);
我明白了
array(2) {
[0]=>
string(17) "folder/title1.jpg"
[1]=>
string(17) "folder/title2.jpg"
}
int(0)
array(2) {
[0]=>
string(13) "new_name1.jpg"
[1]=>
string(13) "new_name2.jpg"
}
int(1)
这意味着这些
$path = $image['path'];
$title = $image['title'];
都是NULL
您有两种方法可以解决此问题:
将数组更改为
$images = array( [0] => array( 'path' => 'folder/title1.jpg', 'title' => 'new_name1.jpg' ), [1] => array( 'path' => 'folder/title2.jpg' 'title' => 'new_name2.jpg', ) );
在这种情况下,您的初始代码应该可以工作
改变访问数组的方式,做类似
的事情for($i = 0;$i < count($images['path']);$i++) { $path = $image['path'][$i]; $title = $image['title'][$i]; }
这样可以确保图片的路径和标题具有相同的索引,但不建议这样做,因为数组必须排序。
我建议你更改数组,这样你的代码应该没问题