проблема с загрузкой изображений с загрузкой файла php

Привет, ребята, я загружаю изображения, используя метод загрузки файлов @PhP @ Если я загружаю 10 изображений за раз (каждое изображение имеет размер 2000/3000). то функция сохранения по клику не работает. если я загружу 5 изображений или менее пяти изображений, тогда он работает нормально, что не так с моим кодированием, я просто включаю свой php-код в этот пост <input value="Save" type="submit" name="SubSave" id="SubSave" onClick="return changes();">

 if($_POST['SubSave'] == "Save"){
    $aid = $_GET['rid'];
 $updcount = $_POST['theValue'];


if($_SESSION["almgtype"]==1 || (GetUserNoPhoto($_SESSION["almgid"]))>(GetTotalPhotoCount1($_SESSION["almgid"],$aid))) {


  $uid = $_SESSION["almgid"];

 for($k=1;$k<=$updcount;$k++) { 
        //echo $k;
   echo $_FILES["uploadfile"]["type"];

if($_FILES["uploadfile".$k]["name"]!="") {

if(($_FILES["uploadfile".$k]["type"] == "image/gif") || ($_FILES["uploadfile".$k]["type"] == "image/jpeg")|| ($_FILES["uploadfile".$k]["type"] == "image/pjpeg") || ($_FILES["uploadfile".$k]["type"] == "image/png")) {

 if ($_FILES["uploadfile".$k]["error"] > 0)
  {
  echo "Error: " . $_FILES["uploadfile".$k]["error"] . "<br />";
  }
else
  {  
       move_uploaded_file($_FILES["uploadfile".$k]["tmp_name"],
      "photoalbum/" . $_FILES["uploadfile".$k]["name"]);
      $uploadfile =  "photoalbum/" . $_FILES["uploadfile".$k]["name"];
  } 
  $path  = $uploadfile;
  $checklist = "select * from amt_photos1 where aid = '".trim($aid)."' and uid = '".trim($uid)."' and path = '".trim($path)."'";
  $chkresult  = mysql_query($checklist);
  if(mysql_num_rows($chkresult) == 0) {
  $i = 0;
  $path =$uploadfile;
  $result = "insert into amt_photos1 set uid = '".trim($uid)."',
                                     aid = '".trim($aid)."',
                                     path = '".trim($path)."',
                                     status = '0',
                                     createdby = '".$_SESSION["almgid"]."',
                                     createddate = now()";

  $rowlist = mysql_query($result) or die("Error:(".mysql_error().")".mysql_error());


                } 
                /**********************  if file already exist means ******************************************/
                else {
                $err= "The Uploaded file name ".$path." Is already exisit in the Album. Rename It or try to add Any other Photos";

                    }
                /**********************  if file already exist means ******************************************/
                $path ="";
                $uploadfile = "";
                $i  = "";
                }  // file extention
                     else {
        $err= "Unable To Upload The File Please Check The File Extention.Try Again Later";
     }

                }
                }
                }



                } // if save close

person Meena    schedule 15.11.2010    source источник
comment
К вашему сведению, ваше нефильтрованное использование $_GET['rid'] в качестве переменной $aid в выражении SQL делает ваше приложение уязвимым для атак SQL-инъекций. Вы должны исправить это как можно скорее.   -  person Hamish    schedule 15.11.2010


Ответы (3)


Вероятно, вам нужно изменить максимальный размер POST в файле конфигурации php.ini (настройка post_max_size).

person Hamish    schedule 15.11.2010
comment
Также вы можете увеличить max_execution_time. - person James Anderson; 15.11.2010
comment
И убедитесь, что у вас нет никаких директив Apache, ограничивающих размер сообщения. Чтение ваших журналов ошибок, вероятно, поможет. - person Dan Grossman; 15.11.2010
comment
Извините, я новичок в этом, где я включаю, что max_size есть любая другая доступная ссылка, значит, предложите мне - person Meena; 15.11.2010

Вы можете использовать команду phpinfo() для сброса конфигурации. Вероятно, как заявляли другие, вам нужно увеличить размер загрузки и время выполнения.

Их можно изменить с помощью файла .htaccess.

php_value upload_max_filesize 20M
php_value post_max_size 20M
php_value max_execution_time 200
php_value max_input_time 200
person WolfRevoKcats    schedule 15.11.2010

В качестве предупреждения: ваш сценарий обработки загрузки сделает совершенно тривиальной полную подрывную работу вашего сервера:

  1. Вы слепо верите, что значение $_FILES[...]['type'] установлено правильно - это значение полностью находится под контролем пользователя, и он может запихнуть в "image/jpeg" и загрузить любой тип файла, какой захочет.
  2. Вы слепо верите, что значение $_FILES[...]['filename'] установлено правильно — опять же, это значение полностью находится под контролем пользователя, и он может запихнуть его в «hackme.php», если захочет.
  3. Вы вслепую записываете файл в каталог своего фотоальбома, но не проверяете, содержит ли указанное пользователем имя файла данные о пути.

Итак, что произойдет, если кто-то загрузит следующий файл:

$_FILES['uploadfile0']['type'] = 'image/gif';
$_FILES['uploadfile0']['filename'] = '../pwn_me.php';

Теперь вы успешно поместили предоставленный пользователями PHP-скрипт НА ВАШ ВЕБ-СЕРВЕР, и теперь они могут делать все, что захотят.

Кроме того, ваши запросы к базе данных вслепую вставляют одни и те же данные в запросы, оставляя вас открытыми для атак путем внедрения SQL-кода. Кроме того, вы не проверяете конфликты имен файлов до тех пор, пока ПОСЛЕ того, как вы переместите файл. Таким образом, кто-то может загрузить вредоносный скрипт, но сделать это только один раз для этого конкретного имени файла. Поздравляем, вы внедрили версионные атаки на свой сервер. У вас будут «pwn_me.php», «pwn_me2.php», «pwn_me3.php», «my_little_pwnme.php» и так далее.

person Marc B    schedule 15.11.2010