Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Загрузка больших файлов на сервер.


Автор: NNaarreekk 23.11.2007, 22:32
Вопрос уже поднимался, но у меня немножко другая проблема.

Если загружаем маленкий файл то все OK.
А как только файлики становятся пару MB то Game Over!

Оказалось что при больших файлах переменная поступает пустой.
Скрипт на одном хостинге работает, на другом - нет.

И сааааааамое интересное что в локале не работает smile

Буду рад любой помощи (можно и денги на счет передавать;))


Автор: Nagash 24.11.2007, 01:55
в php.ini исправь upload_max_filesize = 2M на нужный размер.

Но лучше в сценарии: ini_set("upload_max_filesize", 5M) - укажи нужный размер.

скорее всего проблема в этом, но могут быть и варианты.

Автор: NNaarreekk 24.11.2007, 13:28
Спасибо за совет.

Сейчас попробую!

Автор: NNaarreekk 24.11.2007, 14:05
Что-то не получилось!:(

Код

<form action='?z=1' method='post' enctype='multipart/form-data'>
<input type='file' name='nkar'></input>
<input type='submit'>
</form>
<?
if($z==1){
ini_set("upload_max_filesize", "25M");
 $nkar = $HTTP_POST_FILES['nkar']['tmp_name'];
  $nkar_name = $HTTP_POST_FILES['nkar']['name'];
  $nkar_size = $HTTP_POST_FILES['nkar']['size'];
  $nkar_type = $HTTP_POST_FILES['nkar']['type'];
  $nkar_error = $HTTP_POST_FILES['nkar']['error'];
if ($nkar_error > 0)
  {
    echo 'Problem: ';
    switch ($nkar_error)
    {
      case 1:  echo 'Размеры файла превосходит предельно возможные!<br>';  break;
      case 2:  echo 'Размеры файла превосходит предельно возможные!<br>';  break;
      case 3:  echo 'Загрузка файла произошла частично!<br>';  break;
      case 4:  echo 'Файл не загружен!<br>';  break;
    }
    exit;
  }
   if (is_uploaded_file($nkar))
  {
     if (!move_uploaded_file($nkar, $nkar_name))
     {
        echo 'Продлема: Невозможно перенести файл!<br>';
        exit;
     }
  } 
  else 
  {
    echo 'Problem: Possible file upload attack. Filename: '.$nkar_name;
    exit;}
}
?>


Вот примерно такой код есть.
Если файл большой то дает ошибку
'Problem: Possible file upload attack. Filename: '

Автор: SDEVIL 24.11.2007, 15:32
Необходимо создать файлик в директории где расположен скрипт с загрузкой:
Название ".htaccess"
Содержание файла:
Код

php_value upload_max_filesize 50M
php_value post_max_size 50M

<IfModule mod_charset.c> 
  CharsetRecodeMultipartForms off 
  # и другие директивы mod_charset
</IfModule>


И вот скрипт самой загрузки:
Это в самом начале файла пишеш:
Код

<?
set_time_limit(0);
?>


Скрипт загрузки:
Код

    echo("Настройки сервера: <br>");
    echo("upload_max_filesize: ".ini_get("upload_max_filesize")."<br>");
    echo("post_max_size: ".ini_get("post_max_size")."<br>");

  
   if($_FILES["filename"]["size"] > 1024*50*1024)
   {
     echo ("Размер файла превышает 50 мегабайт");
     exit;
   }
   if(copy($_FILES["filename"]["tmp_name"],
     $_SERVER["DOCUMENT_ROOT"].'/'.$_FILES["filename"]["name"]))
   {
     echo("Файл успешно загружен <br>");
     echo("Характеристики файла: <br>");
     echo("Имя файла: ");
     echo($_FILES["filename"]["name"]);
     echo("<br>Размер файла: ");
     echo($_FILES["filename"]["size"]);
     echo("<br>Каталог для загрузки: ");
     echo($_FILES["filename"]["tmp_name"]);
     echo("<br>Адрес к файлу: ");
     echo($_SERVER["DOCUMENT_ROOT"].'/'.$_FILES["filename"]["name"]);
     echo("<br>Тип файла: ");
     echo($_FILES["filename"]["type"]);
   } else {
      echo("Ошибка загрузки файла");
   }



Сам парился ОЧЕНЬ долго, но этот скрипт работает! smile По крайней мере где апач...

Автор: NNaarreekk 24.11.2007, 17:01
SDEVIL, спасибо за код. В этом случае уже не надо но пригодится!


Nagash, 
Цитата(Nagash @  24.11.2007,  01:55 Найти цитируемый пост)
ini_set("upload_max_filesize", 5M)


Сработало!


Точнее у меня не сработало, пока я думал почему позвонил заказчик и поблогодарил за хорошую работу  smile 

Автор: Anarki 25.11.2007, 10:44
Цитата(NNaarreekk @ 24.11.2007,  20:01)
SDEVIL, спасибо за код. В этом случае уже не надо но пригодится!


Nagash, 
Цитата(Nagash @  24.11.2007,  01:55 Найти цитируемый пост)
ini_set("upload_max_filesize", 5M)


Сработало!


Точнее у меня не сработало, пока я думал почему позвонил заказчик и поблогодарил за хорошую работу  smile

Это уже устарело.
Цитата

upload_max_filesize    "2M"    PHP_INI_PERDIR    PHP_INI_ALL in PHP <= 4.2.3.

Для php версии  выше 4.2.3, в скрипте нельзя устанавливать через ini_set

http://www.php.net/manual/en/ini.php#ini.list

Автор: NNaarreekk 25.11.2007, 16:27
Anarki, а ка же сделать?

А если на сервервере поменяют версию PHP что код не будет работать?

Автор: Anarki 25.11.2007, 17:19
Цитата(NNaarreekk @ 25.11.2007,  19:27)
Anarki, а ка же сделать?

А если на сервервере поменяют версию PHP что код не будет работать?

Я имел ввиду, что если в скрипте писать, может и не сработать (ini_set('upload_max_filesize',...))
А до этого примеры приводили верные, в .htaccess можно записать и кинуть в папку.
И вообще в мануале расписано же насчет этого, что можно включать и где(везде, в php.ini в .htaccess или httpd.conf)

Автор: NNaarreekk 28.11.2007, 16:36
Ну главное что заработало!

Спасибо всем!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)