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 » Программирование на PHP » Загрузка нескольких картинок на сервер

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

1. Vlador - 23 Декабря, 2012 - 16:05:07 - перейти к сообщению
Всем привет. почему не работает загрузка нескольких картинок на сервер?

PHP:
скопировать код в буфер обмена
  1. $max_image_width        = 380;
  2.  
  3. $max_image_height       = 600;
  4.  
  5. $max_image_size         = 64 * 1024;
  6.  
  7. $valid_types            =  array("gif","jpg", "png", "jpeg");
  8.  
  9.  
  10.  
  11. if (isset($_FILES["userfile"])) {
  12.  
  13.         $count = count($_FILES["userfile"]['name']);
  14.  
  15.  
  16.  
  17. for($i = 0; $i < $count; $i++){
  18.  
  19.         if (is_uploaded_file($_FILES['userfile']['tmp_name'][$i])) {
  20.  
  21.                 $filename = $_FILES['userfile']['tmp_name'];
  22.  
  23.                 $ext = substr($_FILES['userfile']['name'],
  24.  
  25.                         1 + strrpos($_FILES['userfile']['name'], "."));
  26.  
  27.                 if (filesize($filename) > $max_image_size) {
  28.  
  29.                         echo 'Error: File size > 64K.';
  30.  
  31.                 } elseif (!in_array($ext, $valid_types)) {
  32.  
  33.                         echo 'Error: Invalid file type.';
  34.  
  35.                 } else {
  36.  
  37.                         $size = GetImageSize($filename);
  38.  
  39.                         if (($size) && ($size[0] < $max_image_width)
  40.  
  41.                                 && ($size[1] < $max_image_height)) {
  42.  
  43.                                 if (@move_uploaded_file($filename, "W:/domains/sajt.com/screen/1.jpg")) {
  44.  
  45.                                         echo 'File successful uploaded.';
  46.  
  47.                                 } else {
  48.  
  49.                                         echo 'Error: moving fie failed.';
  50.  
  51.                                 }
  52.  
  53.                         } else {
  54.  
  55.                                 echo 'Error: invalid image properties.';
  56.  
  57.                         }
  58.  
  59.                 }
  60.  
  61.         } else {
  62.  
  63.                 echo "Error: empty file.";
  64.  
  65.         }
  66.  
  67. }} else {
  68.  
  69.         echo  '<form action="file-upload.php" method="post" enctype="multipart/form-data">
  70.  
  71.  Send these files:<br>
  72.  
  73.  <input name="userfile[]" type="file"><br>
  74.  
  75.  <input name="userfile[]" type="file"><br>
  76.  
  77.  <input type="submit" value="Send files">
  78.  
  79. </form>';
  80.  
  81. }
2. LShark - 23 Декабря, 2012 - 19:42:11 - перейти к сообщению
Объясни, что значит не работает?
Какую ошибку выдает?
Что выдает переменная $_FILES ?
Может у тебя ограничение на сервере на прием размера...
3. kappa - 23 Декабря, 2012 - 20:15:32 - перейти к сообщению
Столько if да еще и elseif нашлось.
Видимо что то перемудрил с кодом.
4. LShark - 23 Декабря, 2012 - 20:17:14 - перейти к сообщению
Сразу вопрос - зачем FOR, когда разумнее foreach ? Тогда и count не понадобится перед этим.

(Добавление)

И вот это мне нравится:
PHP:
скопировать код в буфер обмена
  1. if (@move_uploaded_file($filename, "W:/domains/sajt.com/screen/1.jpg")) {


Ты же их всех под именем 1.jpg в одно и то же место сохраняешь. Причем даже в том случае, если загружали gif или png

Лучше уж либо используй имя файла при добавлении, либо генерируй их рандомом (имена), а расширение приклеивать $ext (ты же его сам определял)...

Ну и намек: W:/domains/sajt.com/screen/1.jpg конечно, локально будет работать, но на удаленном сервере... лучше уж генерируй относительный путь, типа "!temp/"

(Добавление)

Ну и зы:
я обычно не наворачиваю столько ифов с элсами, а просто в начале пишу $erro=""; , а затем последовательно проверяю все пункты, и если ошибка - загоняю в $erro ее сообщение (например:
if (filesize($filename) > $max_image_size) $erro .='Error: File size > 64K.<br>';
if (что то еще) > неправильно) $erro .='Error: И эта хрено тоже кривая.<br>';

Потом в конце проверяю if ($erro!="") {вывожу ошибки на экран} else {вывожу Все ок, бро!}

Меньше вероятность нарваться на проблемы.

 

Powered by ExBB FM 1.0 RC1