更新现有 move_uploaded_file 代码以处理数组而不是单个图像上传

update existing move_uploaded_file code to handle an array instead of a single image upload

我扩展了横幅管理器的功能,使其支持多语言。这使用户有机会获得特定语言的标题、html 横幅或图像横幅。

现在所有数据都正确保存到数据库中,但我只能将三张图片中的第一张上传到指定目录。

原来上传图片的两行代码是

if (move_uploaded_file($this->file['tmp_name'], $this->destination . $this->filename)) {
chmod($this->destination . $this->filename, $this->permissions);

我以为改成下面这个词行得通,结果还是只发一张图。

$languages = zen_get_languages();
for ($i=0, $n = sizeof($languages); $i<$n; $i++) {
$language_id = $languages[$i]['id'];
if (move_uploaded_file($this->file['tmp_name'][$language_id] , $this->destination . $this->filename[$language_id])) {
chmod($this->destination . $this->filename[$language_id], $this->permissions);
}

我可以从以下 print_r 命令中看到上传的正确数据可用

print_r($this->file['tmp_name']);

结果

Array ( [2] => /Applications/MAMP/tmp/php/phpVr9JSd [1] => /Applications/MAMP/tmp/php/phpGpYRG9 [4] => /Applications/MAMP/tmp/php/phpfbOoQ4 )

print_r($this->destination);

结果

/Applications/MAMP/htdocs/confetti/images/banners/

print_r($this->filename);

结果

Array ( [2] => stislide1.jpg [1] => stislide2.jpg [4] => stislide3.jpg )

您可能想知道为什么我假设将 [$language_id] 放入 move_uploaded_file 命令会起作用。这个想法是基于这样一个事实,即我用来将正确的 path/name 信息上传到数据库的代码是

for ($i=0, $n = sizeof($languages); $i<$n; $i++) {
$language_id = $languages[$i]['id'];
$db_image_location = (zen_not_null($banners_image_local_array[$language_id])) ? $banners_image_local_array[$language_id] : $banners_image_target . $banners_image->filename[$language_id];

显然,作为 mysqli 上传的一部分,在添加了此上传功能的 class 文件中不起作用。

任何关于我这里哪里出错的指示都将不胜感激。

答案是重写代码,让数组内容由 foreach 处理

foreach($this->file['tmp_name'] as $key => $tmp_name){
  $file_name = $this->filename[$key];
  $file_tmp =$this->file['tmp_name'][$key];

move_uploaded_file($file_tmp, $this->destination. $file_name);
chmod($this->destination . $file_name, $this->permissions);
}

现在正在上传,但是数组中有很多图片