更新现有 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);
}
现在正在上传,但是数组中有很多图片
我扩展了横幅管理器的功能,使其支持多语言。这使用户有机会获得特定语言的标题、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);
}
现在正在上传,但是数组中有很多图片