我使用php创建了一个包含一些图片的ziparchive。当我尝试重命名文件时,这工作正常。这是有效的代码:
$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中带有标题名称的文件是空的。我做错了什么?
答案 0 :(得分:0)
如果我运行
$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];
}
通过这种方式,您可以确定图像的路径和标题具有相同的索引,但不建议这样做,因为必须对数组进行排序。
我建议你改变数组,你的代码应该是那样的