Как скопировать / переместить изображения из массива в папку в php - PullRequest
0 голосов
/ 01 марта 2012

У меня есть две папки с именами 'avatars' и 'small_avatars'. Я пытаюсь сравнить содержимое этих папок (в обеих есть изображения) друг с другом, используя массивы, например (см. Код ниже), но я не думаю, что это работает. Может ли кто-нибудь это проверить и указать, что нужно изменить, чтобы оно заработало? Нужно ли мне определять тип данных файла, который я сохраняю в массив?

   $dirBig= $root.AVATAR_DIRECTORY;
   $dirSmall= $root.SMALL_AVATAR_DIRECTORY;

   $imagesBig = array("image/gif","image/jpg","image/jpeg","image/png");
   $imagesSmall = array("image/gif","image/jpg","image/jpeg","image/png");

   // check if avatar directory exists then copy the names 
   // of the files to an array
   if (is_dir($dirBig)){
       // for debug purposes
      echo ("$dirBig on dir </br></br>");
       }else{
      echo ("dir not found\n" );
   }
   if ($isot=opendir($dirBig)){

      while ((false !== $file = readdir($isot))):
      if ($file[0] == ".")continue; {
         echo ("Filename in avatars : $file </br>");
         $imagesBig[]=$file;
      }
      endwhile;
      closedir($isot);
   }

   // check if small avatar directory exists then copy the names 
   // of the files to an array
   if (is_dir($dirSmall)) {
      echo ("</br>".SMALL_AVATAR_DIRECTORY. " on dir </br></br>");

   }else{
      echo("dir not found \n");
   }
   if ($pienet=opendir($dirSmall)) {
      while ((false !== $file = readdir($pienet))) :

      if ($file[0] == ".") continue;{

         echo ("Filename in small avatars: $file</br>");
         $imagesSmall[] = $file;
      }
      endwhile;
   closedir($pienet);
   }

//compare the two arrays with each other
$comp_result= array_diff($imagesBig, $imagesSmall);`

Результат сравнения двух массивов друг с другом содержит имена файлов, которые не присутствуют в папке small_avatar. Имена файлов не имеют таких расширений, как: ". Jpg, .png и т. Д. Следующее, чего я пытаюсь добиться, это скопировать эти изображения из" $ comp_result "в папку" small_avatar ", попробовав это: edit Заменен прежний цикл For для этого foreach. Теперь ошибок нет, но изображения по-прежнему не копируются из массива в папку ...: (

    $a = $comp_result;
  foreach ($a as $img){

     if (move_uploaded_file($img, $dirSmall)){
        $imagetools->resizeImage($dirSmall, NULL, NULL, NULL, THREAD_AVATAR_MAX_WIDTH, THREAD_AVATAR_MAX_HEIGHT, AVATAR_KEEP_IMAGE_ASPECT_RATIO);
     }else{
         echo("Copying file ".$img." failed to dir ".$dirSmall." !</br>");

  }
  }

Но это не работает. Я получаю сообщения об ошибках, такие как:

  • Предупреждение: copy (): имя файла не может быть пустым
  • Предупреждение: копия (5006): не удалось открыть поток: файл или каталог не существует в ... И мой массив начинается с [4], а не [0] ?? Есть идеи, почему это происходит?

Я был бы очень признателен, если бы кто-нибудь помог мне заставить эту функцию работать. Я искал в Google уже пару дней.

Я пытался glob(), но это не давало мне никаких значений ...

Заранее спасибо! :)

1 Ответ

0 голосов
/ 01 марта 2012

Я не могу решить все ошибки, но я думаю, что первая (неопределенное смещение) заключается в том, что эту строку

(false !== $file = readdir($isot))

нужно записать как

(false !== ($file = readdir($isot)))

, потому чтоприоритет оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...