Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Проблема с загрузкой файла
Форумы портала PHP.SU » PHP » Напишите за меня, пожалуйста » Проблема с загрузкой файла

Страниц (1): [1]
 

1. Reniksa - 16 Января, 2011 - 10:52:18 - перейти к сообщению
Здравствуйте. В рамках создания цмс добавления новостей сайт возникла новая проблема. Вроде все работало и не предвещало беды, но вот что произошло.
Есть функция загрузки файла, в данном случае изображения.

PHP:
скопировать код в буфер обмена
  1. function upload($_FILES,$url,$maxsize = 1024){
  2.     @mkdir("img", 777);
  3.     if($_FILES['IMG']['name'] !=''){
  4.                 //Проверяем размер файла
  5.            if($_FILES['IMG']['size'] != 0 AND $_FILES['IMG']['size']<=($maxsize*1024)) {
  6.                //Проверяем расширение файла
  7.  
  8.                $ext=array(".gif", ".jpeg", ".jpg");
  9. if(in_array(strrchr($_FILES['IMG']['name'],"."),$ext)){
  10.             //Проверяем загрузился ли файл на сервер
  11.                if(is_uploaded_file($_FILES['IMG']['tmp_name']))   {
  12.             //Перемещаем загруженный файл в необходимую папку $url
  13.                 if(move_uploaded_file($_FILES['IMG']['tmp_name'], $url."/".md5(basename($_FILES['IMG']['name'])))) {
  14.                         return TRUE;
  15.  
  16.                 }  else {   return FALSE;}
  17.              }  else {  return FALSE;}
  18.          } else { return FALSE;}
  19.       } else { return FALSE;}
  20.  
  21.     }
  22.     }


Но было замечено, что некоторые изображения получают фнкцией md5 одинаковый код, оттого в папку с изображениями не перемещаются, то есть в базе данных фигурируют, а в папке их нет. А одна статья вообще в базу данных не записывает никакого url. Отчего так может быть? Помогите пожалуйста или советом мудрым или скрипты мои кто не сочтет за труд посмотреть. Я в панике.
2. Мелкий - 16 Января, 2011 - 12:26:16 - перейти к сообщению
Reniksa пишет:
Отчего так может быть?

md5 для того и создавался, чтобы 2 прогона одной строки дали одинаковый результат, но обратно было расшифровывать нецелесообразно.
Т.е. вся ваша ошибка сводится лишь к тому, что у двух загруженных файлов одинаковое исходное имя.

Мне любопытно, почему вы новое имя файла никуда не сохраняете и не возвращаете его из функции, чтобы было бы крайне логично.

А раз есть база данных - то самым красивым выходом будет использовать вместо имени файла номер соответствующей строки автоинкрементного поля - он гарантированно не повторяется и оперировать довольно легко. (кстати, если вы живёте под виндами, то может для вас будет откровением, что расширение файла не значит абсолютно ничего и для хранения файла безразлично, т.е. файл с именем, состоящим только из числа и без расширения - полностью нормальное явление)

 

Powered by ExBB FM 1.0 RC1