Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: загрузка файла на сервер
 
 автор: Bvz   (11.12.2010 в 06:15)   письмо автору
 
 

в php.ini

; Maximum allowed size for uploaded files.
upload_max_filesize = 28M


загружаю файл больше 8М и меньше 28М
он не выдает ошибку на этапе проверки:
  if(($_FILES['file']['size']<8192000))

и как ни странно выполняется
    echo 'Отладочная информация:';
    print_r($_FILES);
    print "</pre>";

выдавая Array хотя по логике он вообще до этого кода не должен дойти
а он просто подряд исполняется

фрагмент upload.php

if(($_FILES['file']['error']==0))
{
  // устанавливаем максимально допустимый размер загружаемого файла
  // (можно предусмотреть задание в конфигурацинном файле, т.е. в ручную).
  if(($_FILES['file']['size']<8192000))
  {
    // устанавливаем папку загрузки
    $uploaddir = '../../doc/';
    // устанавливаем имя файла
    $uploadfile = $uploaddir . basename($_FILES['file']['name']);
    echo '<pre>';
 
      if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
      {
        echo "Файл успшно загружен.";
      }
      else
      {
        echo "Ошибка загрузки загрузки.";
      }
  
    echo 'Отладочная информация:';
    print_r($_FILES);
    print "</pre>";
  }
  else
  {
    echo "Размер принятого файла превысил максимально допустимый размер администратором сайта.";
  }

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 07:35)   письмо автору
 
   для: Bvz   (11.12.2010 в 06:15)
 

1) а зачем двойные скобки в условиях? Например if(($_FILES['file']['error']==0)). Почему не десятерные? Типа ((((((((if(($_FILES['file']['error']==0)))))))))) ;)
2) каков результат print_r($_FILES); ?

  Ответить  
 
 автор: Bvz   (12.12.2010 в 10:26)   письмо автору
 
   для: kosta_in_net   (12.12.2010 в 07:35)
 

если вы внимательно перечитаете первый пост, то увидите - Array()

  Ответить  
 
 автор: kosta_in_net   (12.12.2010 в 10:38)   письмо автору
 
   для: Bvz   (12.12.2010 в 10:26)
 

что, пустой Array ?

  Ответить  
 
 автор: Trianon   (12.12.2010 в 12:40)   письмо автору
 
   для: Bvz   (12.12.2010 в 10:26)
 

Диагностика ошибок заблокирована, да?

В "нет" как-то не верится.
А если "да" -хочется послать настолько далеко, чтобы человек за php год не брался.

  Ответить  
 
 автор: neadekvat   (12.12.2010 в 12:59)   письмо автору
 
   для: Bvz   (11.12.2010 в 06:15)
 

> // устанавливаем максимально допустимый размер загружаемого файла
Хде? оО

> $uploaddir = '../../doc/';
Пишите от корня.

И таки да - включите вывод ошибок и предупреждений (E_ALL), вас ждет сюрприз.

  Ответить  
 
 автор: Bvz   (12.12.2010 в 21:18)   письмо автору
 
   для: neadekvat   (12.12.2010 в 12:59)
 

сюрприза не случилось, такое возникает когда размер загружаемого файла превышает post_max_size
а как от корня писать?

  Ответить  
 
 автор: Trianon   (12.12.2010 в 21:20)   письмо автору
 
   для: Bvz   (12.12.2010 в 21:18)
 

>сюрприза не случилось,

то есть Вы заранее знали, что у Вас на входе пустой массив $_FILES, и тем не менее, удивлялись результатам работы скрипта?

  Ответить  
 
 автор: Bvz   (12.12.2010 в 22:23)   письмо автору
 
   для: Trianon   (12.12.2010 в 21:20)
 

так я не знал причину того что он пустой файл то через форму якобы загружался
вот и хотел выяснить почему он приходил пустой

  Ответить  
 
 автор: Trianon   (12.12.2010 в 23:03)   письмо автору
 
   для: Bvz   (12.12.2010 в 22:23)
 

так Вы не знали причину в первую очередь из-за выключенных диагностик.

  Ответить  
 
 автор: Bvz   (12.12.2010 в 23:03)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:03)
 

так ошибок то и не выходило в логах то

  Ответить  
 
 автор: Trianon   (12.12.2010 в 23:04)   письмо автору
 
   для: Bvz   (12.12.2010 в 23:03)
 

когда?

  Ответить  
 
 автор: Bvz   (12.12.2010 в 23:06)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:04)
 

когда загружал файл и выдавало пустой массив

  Ответить  
 
 автор: Trianon   (12.12.2010 в 23:14)   письмо автору
 
   для: Bvz   (12.12.2010 в 23:06)
 

Когда стояло error_reporting(E_ALL) или когда не стояло?

  Ответить  
 
 автор: Bvz   (12.12.2010 в 23:25)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:14)
 

когда стояло

  Ответить  
 
 автор: Trianon   (12.12.2010 в 23:28)   письмо автору
 
   для: Bvz   (12.12.2010 в 23:25)
 

вот как?
А строки Notice: Undefined index: file in Z:\home\localhost\www\имяскрипта.php on line N там видно не было совершенно?
Где N - это первая же строка Вашего фрагмента.

  Ответить  
 
 автор: Bvz   (12.12.2010 в 23:51)   письмо автору
 
   для: Trianon   (12.12.2010 в 23:28)
 

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

  Ответить  
 
 автор: Trianon   (13.12.2010 в 00:14)   письмо автору
 
   для: Bvz   (12.12.2010 в 23:51)
 

какой еще скрипт отладки?
Пробуете-то на локальной машине?

  Ответить  
 
 автор: neadekvat   (13.12.2010 в 00:19)   письмо автору
 
   для: Trianon   (13.12.2010 в 00:14)
 

Я поражаюсь наплыву горе программистов новичков последнее время. То есть, качеству их мышления.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 01:21)   письмо автору
 
   для: neadekvat   (13.12.2010 в 00:19)
 

ваше право я поражаюсь как пишут книги в частности авторы данного форума и как показывает практика все в корне неправильно!

  Ответить  
 
 автор: neadekvat   (13.12.2010 в 09:15)   письмо автору
 
   для: Bvz   (13.12.2010 в 01:21)
 

О том и говорю - вам надо все разжевать. Как детям. Программист должен уметь думать самостоятельно.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 01:20)   письмо автору
 
   для: Trianon   (13.12.2010 в 00:14)
 

да на локалке

error_reporting(E_ALL);
ini_set("display_errors", 0);
ini_set('log_errors', 1);
ini_set("error_log","./log/error.log");

  Ответить  
 
 автор: Trianon   (13.12.2010 в 01:56)   письмо автору
 
   для: Bvz   (13.12.2010 в 01:20)
 

На локалке error_reporting = E_ALL должно быть забито в php.ini вместе с display_errors = on без вариантов!
На сервере - соответствующей директивой php_value error_reporting 2047 - в .htaccess
Аналогично и последние две директивы.
И никаких отладочных скриптов. Ошибки должны регистрироваться всегда! А не только когда Вы на них соблаговолите обратить свое августейшее внимание.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 09:48)   письмо автору
 
   для: Trianon   (13.12.2010 в 01:56)
 

ок, спасибо, учел!
и что с этой ошибкой делать?
Notice: Undefined index: file in Z:\home\localhost\www\имяскрипта.php

  Ответить  
 
 автор: sim5   (13.12.2010 в 10:26)   письмо автору
 
   для: Bvz   (13.12.2010 в 09:48)
 

Вы меня помнится очень долго распрашивали о закачке файлов на сервер, и что?

  Ответить  
 
 автор: Bvz   (13.12.2010 в 11:06)   письмо автору
 
   для: sim5   (13.12.2010 в 10:26)
 

с тем я разобрался вопросом, за что огромное спасибо!
а этот вопрос наверное не решаем, т.к. зависит от настроек сервера

  Ответить  
 
 автор: neadekvat   (13.12.2010 в 14:08)   письмо автору
 
   для: Bvz   (13.12.2010 в 11:06)
 

> Notice: Undefined index: file in Z:\home\localhost\www\имяскрипта.php
От настроек?! Не решаемый?! Пиздец, просто пиздец. Сколько вы php занимаетесь?

  Ответить  
 
 автор: Bvz   (13.12.2010 в 15:37)   письмо автору
 
   для: neadekvat   (13.12.2010 в 14:08)
 

это ошибка вылазит когда post_max_size меньше загружаемого файла
и как по вашему решить сей вопрос средсвтами php?
вы только пальцы гнуть умееете но ни разу не проявили свои знание!

  Ответить  
 
 автор: neadekvat   (13.12.2010 в 16:56)   письмо автору
 
   для: Bvz   (13.12.2010 в 15:37)
 

> Notice: Undefined index: file
Предупреждение: неизвестный индекс "file".
Для самых юных читателей: вот у вас массив $array. Вот он объявлен:
$array = array();
и вот я делаю волшебные движения:
echo $array['someindex'];
Как можно было заметить, индекс этот не существует. И потому я увижу ошибку
Notice: Undefined index: someindex
А если сейчас сделать так
echo $somevar;
то на экране будет не менее чудесная надпись
Notice: Undefined variable: somevar

И "пальцы гнуть" значит таки говорить о своих знаниях и уменяих. А я говорю об отсутствии знаний и умения мыслить на уровне программирования у вас.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 18:14)   письмо автору
 
   для: neadekvat   (13.12.2010 в 16:56)
 

и как ларчик открывается?

  Ответить  
 
 автор: kosta_in_net   (13.12.2010 в 18:37)   письмо автору
 
   для: Bvz   (13.12.2010 в 18:14)
 

а ты ваще сделай вывод:
echo '<pre>';
print_r($_POST);
print_r($_FILES);
echo '</pre>';
и посмотри, что пишет. А затем сюда скопируй

  Ответить  
 
 автор: Bvz   (13.12.2010 в 19:40)   письмо автору
 
   для: kosta_in_net   (13.12.2010 в 18:37)
 

вот что пишет

Array
(
)
Array
(
)

  Ответить  
 
 автор: Trianon   (13.12.2010 в 19:46)   письмо автору
 
   для: Bvz   (13.12.2010 в 19:40)
 

То есть оба массива пусты.

На этом шаге мне даже интересно стало...
Почему Вы решили (или скрипт решил - в данном случае не суть важно), что обрабатываете POST-запрос с файловым вложением?

  Ответить  
 
 автор: Bvz   (13.12.2010 в 19:58)   письмо автору
 
   для: Trianon   (13.12.2010 в 19:46)
 

дачерез эту форму:

<form action="upload.php" method="post" enctype="multipart/form-data">
<p>Файл для загрузки:
<input type="file" name="file" />
<input type="submit" name="add" value="загрузить" />
</p>
</form>

маленькие файлы все окей а вот большой вот такая штука
возникает когда размер загружаемого файла превышает post_max_size

ну и так далее

Notice: Undefined index: file in Z:\home\ksk\www\netpanel\reporting\upload.php on line 7
[ убрать подсказку | никогда больше не показывать ]

Это предупреждение, вероятнее всего, возникает вследствие высокого уровня контроля ошибок в PHP, по умолчанию установленного в Денвере (E_ALL). Такой режим вывода ошибок является рекомендуемым и сильно помогает при отладке скриптов. Однако множество готовых скриптов требуют более низкого уровня ошибок.

Вы можете установить более слабый контроль ошибок одним из следующих способов:

    * Впишите в скрипты строчку:

      Error_Reporting(E_ALL & ~E_NOTICE);

      Этот способ особенно удобен, если в скрипте есть один файл (конфигурационный), который подключается всеми остальными.
    * Рекомендуемый способ. Создайте в директории со скриптом файл .htaccess следующего содержания:

      php_value error_reporting 7

    * Исправьте в /usr/local/php/php.ini значение error_reporting на E_ALL & ~E_NOTICE. Этот способ не является рекомендуемым и может привести к серьезным неудобствам при отладке!

[Денвер: показать возможную причину ошибки]
Notice: Undefined index: file in Z:\home\ksk\www\netpanel\reporting\upload.php on line 11



Notice:  Undefined index: file in Z:\home\ksk\www\netpanel\reporting\upload.php on line 19



Warning:  zip_open() [function.zip-open]: Empty string as source in Z:\home\ksk\www\netpanel\reporting\upload.php on line 19

Загруженный файл не является ZIP-архивом




единственное что приходит в голову это в самой форме задать ограничение прикрепляемого файла

  Ответить  
 
 автор: Trianon   (13.12.2010 в 20:26)   письмо автору
 
   для: Bvz   (13.12.2010 в 19:58)
 

Выходит, там вы как-то недоразобрались

За разрыв ленты отдельное спасибо.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 20:45)   письмо автору
 
   для: Trianon   (13.12.2010 в 20:26)
 

так там то все ок, все работает

  Ответить  
 
 автор: Trianon   (13.12.2010 в 20:49)   письмо автору
 
   для: Bvz   (13.12.2010 в 20:45)
 

я ж не говорю, что не работает
Я говорю, что оно само по себе работает, независимо от Вас.
Оно - работает. А как работает, Вы не поняли.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 20:54)   письмо автору
 
   для: Trianon   (13.12.2010 в 20:49)
 

подскажите

  Ответить  
 
 автор: Trianon   (13.12.2010 в 20:57)   письмо автору
 
   для: Bvz   (13.12.2010 в 20:54)
 

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

Попробую еще раз повторить.

Вот Ваш файл (вернее конкретный вызов Вашего файла) upload.php
Почему он решил, что ему передали файл, да еще и методом POST?
Почему, если оба массива пусты?
Как Вы выясняли что POST и что файл в POST'е?

Отдельно. Почему если массивы могут быть пусты, Вы пытаетесь брать в них конкретные элементы?
Без предварительной проверки на пустоту, на существование ключей?

  Ответить  
 
 автор: Bvz   (13.12.2010 в 21:05)   письмо автору
 
   для: Trianon   (13.12.2010 в 20:57)
 

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

  Ответить  
 
 автор: Trianon   (13.12.2010 в 21:19)   письмо автору
 
   для: Bvz   (13.12.2010 в 21:05)
 

откуда мне знать? Ту тему Вы с sim5 решали - не со мной.

проверок здесь Вы не показали.

  Ответить  
 
 автор: Bvz   (13.12.2010 в 21:25)   письмо автору
 
   для: Trianon   (13.12.2010 в 21:19)
 

сейчас все заработало, вот скрипт:


<?php
if($_FILES)
{
  if(!
$_FILES['file']['error'])
  {
    if(
$_FILES['file']['size']<8192000)
    {
      
$uploaddir '../../doc/';
      
$uploadfile $uploaddir.date("YmdHis").".zip";
      if(!
is_resource(zip_open($_FILES['file']['tmp_name'])))
      {
        die(
"Загруженный файл не является ZIP-архивом");
      }
      else
      {
        if (
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
        {
          echo 
"Файл успшно загружен.";
        }
        else
        {
          echo 
"Ошибка загрузки загрузки.";
        }
      }
    }
    else
    {
      echo 
"Размер принятого файла превысил максимально допустимый размер, установленный администратором сайта.";
    }
  }
  else
  {
    echo 
"Ошибка загрузки загрузки: ".ErrorUpload($_FILES['file']['error']);
  }
}
else
{
  echo 
"Файл не был загружен.";
}
// функция определения ошибки загрузки файла
function ErrorUpload($fileerror)
{
$err = array(
             
0=>"Ошибок не возникало, файл был успешно загружен на сервер.",
             
1=>"Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini.",
             
2=>"Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.",
             
3=>"Загружаемый файл был получен только частично.",
             
4=>"Файл не был загружен.",
             
6=>"Отсутствует временная папка.",
             
7=>"Отказ в записи файла на диск.",
             
8=>"Расширение PHP остановило загрузку файла."
             
);
return 
$err[$fileerror];
}
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования