У меня есть две папки с именами '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()
, но это не давало мне никаких значений ...
Заранее спасибо! :)