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

Форум PHP

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

 

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

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

тема: Вывод сообщений при загрузке файлов на сервер
 
 автор: nameivan   (02.06.2010 в 10:15)   письмо автору
 
 

Доброго времени суток!

Для загрузки файлов на сервер использую такой скрипт


$login=$_SESSION['userName'];
$file = $_FILES['userfile']['tmp_name'];
$filename = $_FILES['userfile']['name'];
if(!empty($file))
{
  ini_set('memory_limit', '32M'); 
  $maxsize = "10000000";
  $extentions = array( "rar","zip","7z","arj","gzip","tar");
  $size = filesize ($_FILES['userfile']['tmp_name']); 
  $type = strtolower(substr($filename, 1+strrpos($filename,".")));
  $new_name = 'tender-'.$login.'-'.time().'.'.$type; 
  if($size > $maxsize)
  { 
     echo ("Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.");
  } 
  elseif(!in_array($type,$extentions)) 
  { 
    $error="Файл имеет недопустимое расширение</b>. Допустимыми являются форматы архивов!";
    mosRedirect1("zayavka.php?variable=$error");
  } 
  else 
  { 
    if (move_uploaded_file($file, "uploads/".$new_name))
         { 
         $msg="Ваша заявка принята!";
          mosRedirect("zayavka.php?variable=$msg");
         }
    else echo "Файл НЕ был загружен.";
  } 
}


Все работает за исключением вот этой строки

echo ("Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.");

Не выводит данное сообщение если размер больше 10 Мб, выдает пустую страницу.
Подскажите что не так?

  Ответить  
 
 автор: Valick   (02.06.2010 в 10:40)   письмо автору
 
   для: nameivan   (02.06.2010 в 10:15)
 

$_FILES['uploadfile']['size'] - размер принятого файла в байтах;

  Ответить  
 
 автор: nameIvan   (02.06.2010 в 10:54)   письмо автору
 
   для: Valick   (02.06.2010 в 10:40)
 

даже если прописать через $_FILES['userfile']['size'] все ровно получаю пустую страницу

  Ответить  
 
 автор: Valick   (02.06.2010 в 11:05)   письмо автору
 
   для: nameIvan   (02.06.2010 в 10:54)
 

показывайте как "прописали"...
Трианон уже Вам намекнул, что код у вас мягко говоря не элегантный :)
начинать нужно с обработки ошибок
$_FILES['uploadfile']['error']
Начиная с PHP 4.2.0, PHP возвращает код ошибки наряду с другими атрибутами принятого файла. 
Он расположен в массиве, создаваемом PHP при загрузке файла, и может быть получен при обращении по ключу ['error']. 
Говоря другими словами, код ошибки можно найти в переменной $_FILES['userfile']['error'].

UPLOAD_ERR_OK 
Значение: 0; Ошибок не возникало, файл был успешно загружен на сервер. 

UPLOAD_ERR_INI_SIZE 
Значение: 1; Размер принятого файла превысил максимально допустимый размер, 
который задан директивой upload_max_filesize конфигурационного файла php.ini.

UPLOAD_ERR_FORM_SIZE 
Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме.

UPLOAD_ERR_PARTIAL 
Значение: 3; Загружаемый файл был получен только частично. 

UPLOAD_ERR_NO_FILE 
Значение: 4; Файл не был загружен. 

  Ответить  
 
 автор: Valick   (02.06.2010 в 11:29)   письмо автору
 
   для: nameIvan   (02.06.2010 в 10:54)
 

<?php
switch ($_FILES['uploadfile']['error'] ){
case 
4: echo "Файл не был загружен."; break;
case 
3: echo "Загружаемый файл был получен только частично."; break;
case 
2: echo "Размер загружаемого файла превысил значение MAX_FILE_SIZE, 
указанное в HTML-форме."
; break;
case 
1: echo "Размер принятого файла превысил максимально допустимый размер, 
который задан директивой upload_max_filesize конфигурационного файла php.ini."
; break;
case 
0: echo "Ошибок не возникало, файл был успешно загружен на сервер."; break;
default: echo
"Неизвестная ошибка";
}
?>

  Ответить  
 
 автор: Trianon   (02.06.2010 в 11:36)   письмо автору
 
   для: Valick   (02.06.2010 в 11:29)
 

Вообще-то этими событиями список ошибок не исчерпывается... уж коль скоро писать что-то универсальное, стоит заглянуть в мануал посвежее. Может быть даже на аглицком.

Но у автора-то другая проблема.
Он не понимает, почему его скрипт так работает.
И что, на мой взгляд, куда более печально - не знает, что предпринять, чтобы понять, что происходит.
Потому что не понимать сей момент почему - это в общем-то рядовая ситуация при программировании.
А вот не знать, какие шаги предпринять, чтобы стало понятно - куда хуже.

  Ответить  
 
 автор: nameIvan   (02.06.2010 в 11:48)   письмо автору
 
   для: Trianon   (02.06.2010 в 11:36)
 

Скрипт работает, не выводит только сообщение о том, что объем превышает допустимый

  Ответить  
 
 автор: Trianon   (02.06.2010 в 12:06)   письмо автору
 
   для: nameIvan   (02.06.2010 в 11:48)
 

Если скрипт работает не так как надо [Вам] - значит [именно для Вас] он не работает.

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

  Ответить  
 
 автор: Valick   (02.06.2010 в 12:06)   письмо автору
 
   для: nameIvan   (02.06.2010 в 11:48)
 

попробуйте написать так
if(!empty($file)) 
{ ...
}else{
echo "а вот тут я про...ал все свои хлебные карточки";
}

  Ответить  
 
 автор: nameIvan   (02.06.2010 в 12:10)   письмо автору
 
   для: Valick   (02.06.2010 в 12:06)
 

Вот! Исходя из того что выводится эта фраза про карточки следует вывод что файл не передается.
Максимальный размер загружаемого файла 2 Мб по умолчанию. Можно ли увеличить размер не внося изменения в upload_max_filesize?

  Ответить  
 
 автор: Gubichev   (02.06.2010 в 18:17)   письмо автору
 
   для: nameIvan   (02.06.2010 в 12:10)
 

Атрибут Enctype прописали в форме?

  Ответить  
 
 автор: Trianon   (02.06.2010 в 10:44)   письмо автору
 
   для: nameivan   (02.06.2010 в 10:15)
 

почему именно его?

  Ответить  
 
 автор: Trianon   (02.06.2010 в 11:31)   письмо автору
 
   для: nameivan   (02.06.2010 в 10:15)
 

>Все работает за исключением вот этой строки
>

>echo ("Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.");
>

>Не выводит данное сообщение если размер больше 10 Мб, выдает пустую страницу.
>Подскажите что не так?

Эта строка в Вашем коде не просто так стоит, а под условием:
<?
  
if($size $maxsize)
  { 
     echo (
"Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.");
  } 


Так если строка не появляется, может условие не срабатывает?
Значения переменных может стоит вывести?
Или хотя бы посмотреть, откуда они такие берутся?

  Ответить  
 
 автор: nameIvan   (02.06.2010 в 11:55)   письмо автору
 
   для: Trianon   (02.06.2010 в 11:31)
 

Попробовал таким образом

 if ($_FILES['userfile']['size'] > 1024*10*1024)
  { 
     echo ("Файл больше 10 мб. Уменьшите размер вашего файла или загрузите другой.");
  } 


Тоже ничего не дает.

$size = filesize ($_FILES['userfile']['tmp_name']);
echo $size; ничего не выводит

  Ответить  
 
 автор: Trianon   (02.06.2010 в 12:11)   письмо автору
 
   для: nameIvan   (02.06.2010 в 11:55)
 

Так а с какого перепугу эта функция...
>$size = filesize ($_FILES['userfile']['tmp_name']);
>echo $size; ничего не выводит
...эта функция будет что-то считать, если файл-то не загрузился?!
Длину чего Вы пытаетесь из-под нее вытащить?

Насчет первого фрагмента, могу сазать, что Valick, советующий первым шагом смотреть значение элемента $_FILES['userfile']['error'] - прав на 100% .
В самом общем случае, если код ошибки показывает что-то нехорошее, остальные поля массива могут оказаться просто напросто ничем не заполнены, так как кода ошибки достаточно для вящей определенности.

  Ответить  
 
 автор: oliss   (02.06.2010 в 18:01)   письмо автору
 
   для: nameivan   (02.06.2010 в 10:15)
 


<?
if($_FILES['uploadfile']['error'] > 0){
    echo 
'Файл НЕ был загружен: ';
    echo 
'<pre>'
    
print_r($_FILES['uploadfile']['error']);   
/*  switch ($_FILES['uploadfile']['error'] ){
    case 4: echo "Файл не был загружен."; break;
    case 3: echo "Загружаемый файл был получен только частично."; break;
    case 2: echo "Размер загружаемого файла превысил значение MAX_FILE_SIZE,указанное в HTML-форме."; break;
    case 1: echo "Размер принятого файла превысил максимально допустимый размер, 
    который задан директивой upload_max_filesize конфигурационного файла php.ini."; break;
    case 0: echo "Ошибок не возникало, файл был успешно загружен на сервер."; break;
    default: echo"Неизвестная ошибка";
    
    } */
    
exit();
}      
else echo 
'Файл успешно загружен.';

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

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