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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Upload файлов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Tox
Отправлено: 30 Мая, 2012 - 18:32:52
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Тут находится очень интересная статья про аплоад файлов. Я вот решил поэкспериментировать с исходником, представленным там же:
PHP:
скопировать код в буфер обмена
  1. <?
  2. $max_image_width        = 380;
  3. $max_image_height       = 600;
  4. $max_image_size         = 64 * 1024;
  5. $valid_types            =  array("gif","jpg", "png", "jpeg");
  6.  
  7. if (isset($_FILES["userfile"])) {
  8.         if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  9.                 $filename = $_FILES['userfile']['tmp_name'];
  10.                 $ext = substr($_FILES['userfile']['name'],
  11.                         1 + strrpos($_FILES['userfile']['name'], "."));
  12.                 if (filesize($filename) > $max_image_size) {
  13.                         echo 'Error: File size > 64K.';
  14.                 } elseif (!in_array($ext, $valid_types)) {
  15.                         echo 'Error: Invalid file type.';
  16.                 } else {
  17.                         $size = GetImageSize($filename);
  18.                         if (($size) && ($size[0] < $max_image_width)
  19.                                 && ($size[1] < $max_image_height)) {
  20.                                 if (@move_uploaded_file($filename, "/path/")) {
  21.                                         echo 'File successful uploaded.';
  22.                                 } else {
  23.                                         echo 'Error: moving fie failed.';
  24.                                 }
  25.                         } else {
  26.                                 echo 'Error: invalid image properties.';
  27.                         }
  28.                 }
  29.         } else {
  30.                 echo "Error: empty file.";
  31.         }
  32. } else {
  33.         echo  '
  34.         <form enctype="multipart/form-data" method="post">
  35.         <input type="hidden" name="MAX_FILE_SIZE" value="64000">
  36.         Send this file: <input name="userfile" type="file">
  37.         <input type="submit" value="Send File">
  38.         </form>';
  39. }
  40. ?>

У меня все время "Error: moving fie failed.". Решил убрать @, ошибки:
Warning: move_uploaded_file(/path/) [function.move-uploaded-file]: failed to open stream: No such file or directory in upload.php on line 21
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move phpBDA4.tmp' to '/path/' in upload.php on line 21
Error: moving fie failed.
Почему не пашет, как лечить? Загрузил на сервер, папке, где будут хранится изображение, дал права 777, все равно те же ошибки. Еще раз почитал все функции с php.net, вроде все должно работать. Почему происходит обратное?


-----
In Console We Trust. Code hard. Or die.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Мая, 2012 - 18:46:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Второй параметр move_uploaded_file должен указывать на файл (несуществующий, как правило), а не на директорию.


-----
PostgreSQL DBA
 
 Top
Tox
Отправлено: 30 Мая, 2012 - 19:18:45
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Мелкий пишет:
Второй параметр move_uploaded_file должен указывать на файл (несуществующий, как правило), а не на директорию.

я поменял:
$name = $_FILES['userfile']['name'];
if (move_uploaded_file($filename, "/images/avatars/$name")), но все равно не работает - те же ошибки


-----
In Console We Trust. Code hard. Or die.
 
 Top
Мелкий Супермодератор
Отправлено: 30 Мая, 2012 - 19:28:45
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




А этот путь к файлу существует?
Я, как обычно, очень косо смотрю на путь от / - это как бы корень ФС.


-----
PostgreSQL DBA
 
 Top
Tox
Отправлено: 30 Мая, 2012 - 19:35:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




ну это понятно, что корень ФС) на винде запускал через openserver, скрипт лежит в той же папке, что и images


-----
In Console We Trust. Code hard. Or die.
 
 Top
Kreks
Отправлено: 30 Мая, 2012 - 20:31:23
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Авг. 2011  
Откуда: Ульяновск


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. // Стандарт опробуйте        
  4. if ($_FILES['userfile']['error'] == 0) {
  5. $tmp = ($_FILES['userfile']['tmp_name']);
  6. $name = ($_FILES['userfile']['name']);
  7. move_uploaded_file($tmp,$name);
  8. }
  9.  
  10.  


Опробуйте код выше он загрузит в корень. Надо как нибудь глянуть тот код из примера и выложить рабочий вариант...

(Отредактировано автором: 30 Мая, 2012 - 20:37:26)

 
 Top
Kreks
Отправлено: 31 Мая, 2012 - 22:17:46
Post Id



Гость


Покинул форум
Сообщений всего: 70
Дата рег-ции: Авг. 2011  
Откуда: Ульяновск


Помог: 0 раз(а)




Собственно решил посмотреть скрипт, исправить его, для новичков. Итак

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?
  4.  
  5. # Максимально разрешенная ширина
  6. $max_image_width        = 380;
  7. # Максимально разрешенная высота
  8. $max_image_height       = 600;
  9. # Максимально разрешенный размер 64 кб php.ini = 2mb
  10. $max_image_size         = 64 * 1024;
  11. # Допустимые разрешения файлов
  12. $valid_types            =  array("gif","jpg", "png", "jpeg");
  13.  
  14. if (isset($_FILES["userfile"])) { # Если файл передан
  15.    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
  16.         $filename = $_FILES['userfile']['tmp_name']; # имя файла во временном
  17.                 $namefile = $_FILES['userfile']['name']; # Имя загружаемого файла
  18.                 $path = 'upload'; # Папка куда будем загружать
  19.                 $ext = substr($_FILES['userfile']['name'],1 + strrpos($_FILES['userfile']['name'], ".")); # Определяем разрешение загружаемого файла PNG JPG etc...
  20.                
  21.                 # Проверка чтобы размер файла не привышал заданный
  22.                 if (filesize($filename) > $max_image_size) {
  23.                         echo 'Ошибка: Размер файла > 64K.';
  24.                 # Проверка разрешения файла чтобы не загружали например txt)
  25.                 } elseif (!in_array($ext, $valid_types)) {
  26.                         echo 'Ошибка: Неверный тип файла.';
  27.                 } else {
  28.                 # Получаем размеры изображения в массиве
  29.                         $size = GetImageSize($filename);
  30.                         # Сверяем размеры чтобы были менее заданной ширины и высоты
  31.                         if (($size) && ($size[0] < $max_image_width) && ($size[1] < $max_image_height)) {
  32.                                 # Перемещаем из временной папки куда нам надо
  33.                                 if (move_uploaded_file($filename, "$path/$namefile")) {
  34.                                         echo 'Файл успешно загружен.';
  35.                                 } else {
  36.                                 # Что то пошло не так
  37.                                         echo 'Ошибка: Перемещение файла не удалось.';
  38.                                 }
  39.                                
  40.                         } else {
  41.                                 echo 'Ошибка: неверные свойства изображения.';
  42.                         }
  43.                 }
  44.  
  45.     } else {
  46.                 echo "Ошибка. Выберите файл";
  47.         }
  48.        
  49. } else {
  50.    
  51. echo '
  52.         <form enctype="multipart/form-data" method="post">
  53.         <input type="hidden" name="MAX_FILE_SIZE" value="64000">
  54.         Выберите файл: <input name="userfile" type="file">
  55.         <input type="submit" value="Загрузить">
  56.         </form>';
  57. }
  58. ?>
  59.  
  60.  


Все прокомментировал думаю понятно теперь, все загружается проверено. Также мой комментарий. в php.ini есть несколько параметров отвечающих за максимально возможный размер файла. По умолчанию = 2мб. В этом скрипте пытаются уменьшить максимальный размер файла до 64кб и собственно приписывают такую строку
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <input type="hidden" name="MAX_FILE_SIZE" value="64000">
  3.  


Я бы посоветовал убрать эту строку совсем.Так как она не безопасна,и злоумышленник может ее легко подделать.

Cтандартной проверки php вполне достаточно :


Ну собственно,пользуйтесь.

(Отредактировано автором: 31 Мая, 2012 - 22:19:19)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB