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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрип игнорирует $error

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Не обрабатываются ошибки
Reexel
Отправлено: 20 Июля, 2011 - 22:40:11
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Здравствуйте, господа!

Не могу победить код - как не пытался отловить - не могу понять, почему не срабатывают условия. Понимаю, что не идет обработка $error - но как заставить работать должным образом - не ведомо мне.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.    // Установка максимального размера в байтах
  4.     $maxsize = 1000000;
  5.     if (!$_POST['submit'])
  6.     {
  7.         print_r($_FILES);
  8.         $error=" ";
  9.     }
  10.    
  11.     echo 'Шаг 1 пройден.<br />';
  12.     echo $_FILES['upload_file']['tmp_name'].'<br />';
  13.     echo $_FILES['upload_file']['size'].'<br />';
  14.     echo $_FILES['upload_file']['type'].'<br />';
  15.     echo $_FILES['upload_file']['name'].'<br />';
  16.  
  17.     // Проверка факта загрузки файла
  18.     if (!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND
  19.         !isset($error))
  20.     {
  21.         $error = "<b>Вы должны отправить файл!</b><br /><br />";
  22.         uplink($_FILES['upload_file']['tmp_name']);
  23.     }
  24.  
  25.    
  26. echo 'Шаг 2 пройден.<br />';    
  27.     // Проверка размера файла
  28.     if ($_FILES['upload_file']['size'] > $maxsize AND
  29.         !isset($error))
  30.     {
  31.         $error = "<b>Ошибка, размер файла не должен превышать $maxsize байт.</b><br /><br />";
  32.         unlink($_FILES['upload_file']['tmp_name']);
  33.     }
  34.    
  35. echo 'Шаг 3 пройден.<br />';    
  36.     // Проверка типа файла
  37.     if ($_FILES['upload_file']['type'] != "image/gif" AND
  38.         $_FILES['upload_file']['type'] != "image/pjpeg" AND
  39.         $_FILES['upload_file']['type'] != "image/jpeg" AND
  40.         !isset($error))
  41.     {
  42.         $error = 'Можно загружать только файлы .gif и .jpg';
  43.         unlink($_FILES['upload_file']['tmp_name']);
  44.     }
  45.        
  46. echo 'Шаг 4 пройден.<br />';    
  47.     // Загрузка файла
  48.     if (!isset($error))
  49.     {
  50.         copy($_FILES['upload_file']['tmp_name'],
  51.                 "uploads/".$_FILES['upload_file']['name']);
  52.         unlink($_FILES['upload_file']['tmp_name']);
  53.         print 'Спасибо за ваш файл.';
  54.         echo '<br />';
  55.         echo '<br />';
  56.         echo '<a href="logo_setting.php">Попробовать</a> еще?';
  57.         exit;
  58.     }
  59.     else
  60.     {
  61.         echo("$error");
  62.     }
  63. echo 'Шаг 5 пройден.<br />';
  64. ?>
  65.  
  66. <html>
  67. <head></head>
  68. <body>    
  69.     <h1>Логотип сайта</h1>
  70.     <form action="<?PHP echo(htmlspecialchars($_SERVER['PHP_SELF']))?>" method="post" enctype="multipart/form-data">
  71.         Выберите файл для загрузки:        <input type="file" name="upload_file" size="80">
  72.                 <input type="submit" name="submit" value="Загрузить">
  73.     </form>
  74. </body>
  75. </html>
  76.  


Подскажите куда копать.
Пробовал вместо $_FILES и $HTTP_POST_FILES - но толку нуль.

Делаю на localhost, PHP 5.Х. Если нужны какие-то данные еще - отпишу.
Спасибо огромное за помощь, легкого и простого кодинга!
 
 Top
komprenda
Отправлено: 20 Июля, 2011 - 22:41:40
Post Id


Гость


Покинул форум
Сообщений всего: 105
Дата рег-ции: Май 2011  


Помог: 3 раз(а)




.

(Отредактировано автором: 20 Июля, 2011 - 22:42:49)

 
 Top
PATCH
Отправлено: 20 Июля, 2011 - 22:48:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




это че? проверка существование переменой isset() и вообще если не нажата кнопка мы должны оставновить сценарий. и зачем вообще пустая переменая $error?



PHP:
скопировать код в буфер обмена
  1. if(!isset($_POST['submit'])
  2. {
  3.         exit('кнопка не нажата');
  4. }
  5.  


echo 'Шаг 1 пройден.<br />'; - зачем это выводить после каждого шага? сценарий исполняется мимолетно меньше 1 секунды ты это все прочитаеш? вреатли) для такого дела используется javascript с задержкой времени.


PHP:
скопировать код в буфер обмена
  1.  
  2.         if(isset($_POST['add_friend_submit']))
  3.         {
  4.  
  5.                         $mime = mime_content_type($_FILES["filename"]["tmp_name"]);
  6.                         $uploaddir ='../f_img/';
  7.  
  8.                         if(!is_dir($uploaddir))
  9.                         {
  10.                                 exit($uploaddir );
  11.                         }
  12.                         if($mime != "image/gif" and $mime !="image/jpeg" and $mime !="image/jpg" and $mime !="image/png")
  13.                         {exit ("Доступна загрузка только gif, png, jpeg, jpg, ico файлов");}
  14.  
  15.  
  16.                         $uploadfile = $uploaddir.basename($_FILES['filename']['name']);
  17.                                 if (copy($_FILES['filename']['tmp_name'], $uploadfile) or unlink($_FILES['filename']['tmp_name']))
  18.                                 {echo ('файл успешно загружен');}
  19.                         else {echo "Произошла ошибка при загрузке на сервер";}
  20.                 }
  21.                 else(exit('не нажата кнопка'));


вот тебе выдрал со своего) тут конечно не все проверки надо доработатЬ) но все же лучше чем проверка у тебя на тип заливаемого файла (mime tipe у тебя берется с клиента а ты недумал что mime tipe можно подделать? ) хотя и этот тип защиты не 100%

(Отредактировано автором: 20 Июля, 2011 - 23:04:29)

 
 Top
Reexel
Отправлено: 20 Июля, 2011 - 23:50:11
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




echo 'Шаг 1 пройден.' я делал для отладки, чтобы понять, что именно скрипт проходит. Вообще, это пример из книги, но тем не менее он не пашет. Понятно, что он не совершенен, но я пока просто понимаю принцип работы скрипта и языка PHP. После того как заработает данный скрипт, буду внедрять и другие проверки.

Код, который привели Вы, к сожалению пока не могу оценить из-за отсутствия знаний, но пока передо мной стоит задача заставить работать приведенный мною скрипт. Тем не менее, я Вам весьма благодарен. Буду рад, если кто-то поможет понять причину неработы моего скрипта.
 
 Top
PATCH
Отправлено: 21 Июля, 2011 - 00:51:00
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




это ж *** в какой такой книге используют echo для отладки!!! для отладки используют
error_reporting(2047); или если хочеш свое пошагово) то делай так


CODE (html):
скопировать код в буфер обмена
  1.     exit('Шаг 1 пройден.<br />');
  2.     echo $_FILES['upload_file']['tmp_name'].'<br />';
  3.     echo $_FILES['upload_file']['size'].'<br />';
  4.     echo $_FILES['upload_file']['type'].'<br />';
  5.     echo $_FILES['upload_file']['name'].'<br />';


если дошел до сюда то удаляй строку
exit('Шаг 1 пройден.<br />');
и переходи к шагу 2 и там тоже echo замени на exit();
если шаг 2 прошел то опять удаляем строку exit и идем к шагу 3 и делаем аналогично где не выведит смотри код от шаг x-1 до шаг x то есть от 2 до 3 допустим

или еще как вариант сделай логическое выражение

if(выражение){ действие}else{exit('кнопка не нажата');}

прибил бы того кто такую книгу написал)

http://php.su/phphttp/?uploads - вот тебе простой живой пример

PHP:
скопировать код в буфер обмена
  1.     // Загрузка файла
  2.     if (!isset($error))
  3.     {
  4.         copy($_FILES['upload_file']['tmp_name'],
  5.                 "uploads/".$_FILES['upload_file']['name']);
  6.         unlink($_FILES['upload_file']['tmp_name']);
  7.         print 'Спасибо за ваш файл.';
  8.         echo '<br />';
  9.         echo '<br />';
  10.         echo '<a href="logo_setting.php">Попробовать</a> еще?';
  11.         exit;
  12.     }
  13.     else
  14.     {
  15.         echo("$error");
  16.     }
  17. echo 'Шаг 5 пройден.<br />
- вот этот пример мне оч нравится если не существует переменой $error (кстати проверка на существование пишется через if(isset($переменая))) ну да лана от пустим формальности смотри дальше если не существует то выполняем сценарий дальше если существует то выводим ее и пишем ШАГ 5 ПРОЙДЕН!! гениальный автор!!!


тут если посмотреть ошибки через строку) пройди по ссылки и прочитай лучше там простой пример

CODE (htmlphp):
скопировать код в буфер обмена
  1.     <form action="<?PHP echo(htmlspecialchars($_SERVER['PHP_SELF']))?>" method="post" enctype="multipart/form-data">
- вот эта строка просто убила) не проще ли указать файл обработчик? в данном случии наш файл... зачем его выводить через глобальную переменую да и еще и обрабатывать через htmlspecialchars (если эта переменая не передается пользователем откудо тут может быть html коД?)


Инициалы автора в студию)

(Отредактировано автором: 21 Июля, 2011 - 01:04:13)

 
 Top
Мелкий Супермодератор
Отправлено: 21 Июля, 2011 - 07:47:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




PATCH пишет:
это ж *** в какой такой книге используют echo для отладки!!!

Нормальная практика отладки, наряду с понатыкиванием var_dump'ов и print_r'ов на интересующие участки кода. Ну после error_reporting, конечно.

Reexel,ну поехали по коду:
Reexel пишет:
if (!$_POST['submit'])
{
print_r($_FILES);
$error=" ";
}

Это условие отрабатывается всегда, когда получили форму, правильно? И здесь устанавливается переменная $error
Reexel пишет:
// Загрузка файла
if (!isset($error))

А когда у нас нет $error? Когда с формы ничего не пришло. Ну и как загружать файл, который не пришёл?

Кстати, строка 22 - не думаю, что у вас есть функция uplink Подмигивание


-----
PostgreSQL DBA
 
 Top
Reexel
Отправлено: 21 Июля, 2011 - 11:10:41
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




PATCH пишет:
это ж *** в какой такой книге используют echo для отладки!!!


Книга называется "Изучаем PHP и MySQL", автор Мишель Е.Девис, Джон А. Филлипс
Вот скрин с электронной книжки:

(превью нет, но сама картинка видна)

-------------------------------- -------------------------------- -------------------------
Теперь по поводу проверки:
PATCH пишет:
для отладки используют error_reporting(2047); или если хочеш свое пошагово)


Для отладки echo использую я, так как пока не знаю как использовать что-то другое. А тут наглядно я вижу где программа точно прошла. Программирую второй день, так что не обессудьте.

-------------------------------- -------------------------------- -------------------------
PATCH пишет:

PHP:
скопировать код в буфер обмена
  1. <form action="<?PHP echo(htmlspecialchars($_SERVER['PHP_SELF']))?>" method="post" enctype="multipart/form-data">

- вот эта строка просто убила) не проще ли указать файл обработчик? в данном случии наш файл... зачем его выводить через глобальную переменую да и еще и обрабатывать через htmlspecialchars (если эта переменая не передается пользователем откудо тут может быть html коД?)


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

-------------------------------- -------------------------------- -------------------------
Мелкий пишет:
Кстати, строка 22 - не думаю, что у вас есть функция uplink


Виноват, исправлюсь Улыбка

-------------------------------- -------------------------------- -------------------------
Мелкий пишет:
А когда у нас нет $error? Когда с формы ничего не пришло. Ну и как загружать файл, который не пришёл?


Насколько я понимаю. код просто идет дальше? Или я не прав? Идет ряд проверок на тип, размер и прочее - после чего временный файл копируется в папку uploads

-------------------------------- -------------------------------- -------------------------
Пойду копать в сторону функции uplink - это первое.
Второе - чего же он все таки не пашет? Улыбка Простите за недопонимание, видимо сказывается мое историческое образование. PHP учу для саморазвития. Жду не решения вопроса, а стороны, в которую пошлют, остальное готов копать сам.
 
 Top
PATCH
Отправлено: 21 Июля, 2011 - 19:18:48
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




Reexel пишет:
Для отладки echo использую я, так как пока не знаю как использовать что-то другое. А тут наглядно я вижу где программа точно прошла. Программирую второй день, так что не обессудьте.



первое в строке 38 нету такого расширения как pjpeg .



П.с изучаете php второй день зачем полезли в загрузку файлов не зная как работает echo, exit, if else, не зная методов передачи POST GET?????? имхо даже если и знаете вы явно не закрепили знания на практике. и вообще надо программировать с легкого и потом постепено расширять код. т.е то что выше описано эт явно не для новичков которые программирует второй день. да еще и пример с вводом в заблуждение.
PHP:
скопировать код в буфер обмена
  1.  <form action="<?PHP echo(htmlspecialchars($_SERVER['PHP_SELF']))?>" method="post" enctype="multipart/form-data">
- вот это на мой взгляд конкретный ввод заблуждение. а если у нас код будет исполнятся в другом файле? и вы будете писать echo(htmlspecialchars($_SERVER['PHP_SELF'])) потом зададите вопрос почему не работает. да еще и с примером который пребразует html код в сущности зачем?

Мелкий пишет:
Нормальная практика отладки, наряду с понатыкиванием var_dump'ов и print_r'ов на интересующие участки кода. Ну после error_reporting, конечно.


никогда не пробовал через echo. хотя на вкус и цвет у каждого свой ответ) но помойму если через error_repoting ошибок не будет то код спокойно исполнится и может исполнится не правильно т.к дето допустили ошибку в расчетах или в написании условий я лично б использовал exit по этапно и смотрел бы что бы он выводил не жели по 100раз весь код исполнятЬ)

(Отредактировано автором: 21 Июля, 2011 - 19:35:14)

 
 Top
Roler
Отправлено: 21 Июля, 2011 - 19:35:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




PATCH пишет:

читаем для чего используется echo

Ещё неофиты стариков учить будут Хм

Я в ваших то знаниях посомневался бы...
Вывод сообщений по всему хода скрипта используется достаточно часто на этапе разработки.
Если отладка становится совсем потребной, я везде пихаю echo 'Test #n';

Reexel пишет:

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

Странная у вас книжка Улыбка
 
 Top
PATCH
Отправлено: 21 Июля, 2011 - 19:37:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




Roler пишет:
читаем для чего используется echo

Ещё неофиты стариков учить будут

Я в ваших то знаниях посомневался бы...
Вывод сообщений по всему хода скрипта используется достаточно часто на этапе разработки.
Если отладка становится совсем потребной, я везде пихаю echo 'Test #n';

Reexel пишет:

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

Странная у вас книжка

я не правильно описал то что хотел сказать перечитай пост выше который я исправил за 1 минуту до твоего сообщения зачем по 100раз весь код исполнять если где ошибка в расчетах? можно через exit ('Test #n'); по этапно пихать

(Отредактировано автором: 21 Июля, 2011 - 19:41:58)

 
 Top
Roler
Отправлено: 21 Июля, 2011 - 19:42:08
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




PATCH
Да ещё бы ту правильно понять, когда на весь обзац всего пара точек из знаков препинания Улыбка

Смысл в exit()? На вывод сообщений об ошибках это никак не повлияет, зато если заработает весь скрипт, это будет сразу видно. Нет смысла убивать скрипт на каждом этапе ради отладки.
 
 Top
PATCH
Отправлено: 21 Июля, 2011 - 19:43:58
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




Roler пишет:
PATCH
Да ещё бы ту правильно понять, когда на весь обзац всего пара точек из знаков препинания

Смысл в exit()? На вывод сообщений об ошибках это никак не повлияет, зато если заработает весь скрипт, это будет сразу видно. Нет смысла убивать скрипт на каждом этапе ради отладки.

ну автор темы вроде хочет по этапно изучиТЬ) а не сразу ОПА СКРИПТ кое-как зарабОтаЛ, нафиг отладку) п.с на вывод сообщений не чего не повлияет если отрублен error_repoting. если он врублен то тогда и поэтапно ненадо нечего делать , если конечно как я уже говорил нету погрешности в расчетах или условиях

вот еще нашел то что мне нравится в примере:


PHP:
скопировать код в буфер обмена
  1.    echo 'Шаг 1 пройден.<br />';
  2.     echo $_FILES['upload_file']['tmp_name'].'<br />';
  3.     echo $_FILES['upload_file']['size'].'<br />';
  4.     echo $_FILES['upload_file']['type'].'<br />';
  5.     echo $_FILES['upload_file']['name'].'<br />';
  6.  
  7.     // Проверка факта загрузки файла
  8.     if (!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND
  9.         !isset($error))
  10.     {
  11.         $error = "<b>Вы должны отправить файл!</b><br /><br />";
  12.         uplink($_FILES['upload_file']['tmp_name']);
  13.     }


мы сначала выводим всю инфу об поступившем к нам файле ,а потом делаем проверку поступил ли к нам файл? где логика?
(Добавление)
специально для тебя лови твой код со всеми твоими проверками мб и недочеты и есть т.к эта моя вторая практика с загружаемостью файлов однако все проверки работают как и сам скрипт


CODE (htmlphp):
скопировать код в буфер обмена
  1. <?PHP
  2.   // Установка максимального размера в байтах
  3.    $maxsize = 1000000;
  4.         $uploaddir ='img/'; // папка закачки
  5.    if (isset($_POST['submit'])) //проверяем нажата ли кнопка
  6.    {
  7.             if (!is_uploaded_file($_FILES['upload_file']['tmp_name'])) //проверяем отправлен ли файл
  8.          { exit("<b>Вы должны отправить файл!</b><br /><br />");}
  9.                  
  10.                 if ($_FILES['upload_file']['size'] > $maxsize) // проверка превышает ли файл допустимое максимум размер файла на сервере
  11.         {exit("<b>Ошибка, размер файла не должен превышать $maxsize байт.</b>"); }
  12.                
  13.                 if ($_FILES['upload_file']['type'] != "image/gif" AND //проверка на заливаемый тип файла (легко подделать 2-3 минуты и shell на нашем сервере
  14.        $_FILES['upload_file']['type'] != "image/jpg" AND
  15.        $_FILES['upload_file']['type'] != "image/jpeg")
  16.         {
  17.                 exit('Можно загружать только файлы .gif и .jpg и .jpeg');
  18.         }
  19.                
  20.                 $uploadfile = $uploaddir.basename($_FILES['upload_file']['name']); //загружаем файл
  21.                 if (copy($_FILES['upload_file']['tmp_name'], $uploadfile) or unlink($_FILES['upload_file']['tmp_name']))
  22.                 {
  23.                 print 'Спасибо за ваш файл.<br/>
  24.                 информация о файле:<br>'
  25.                 .$_FILES['upload_file']['tmp_name'].'<br />'
  26.                 .$_FILES['upload_file']['size'].'<br />'
  27.                 .$_FILES['upload_file']['type'].'<br />'
  28.                 .$_FILES['upload_file']['name'].'<br />'
  29.                 .'<br /><a href="logo_setting.php">Попробовать еще?</a> ';
  30.                 exit;
  31.                 }
  32.                 else {exit('произошла ошибка при загрузки файла');}
  33.                
  34.    }
  35. ?>        
  36.  
  37. <html>
  38. <head></head>
  39. <body>    
  40.     <h1>Логотип сайта</h1>
  41.     <form action="testss.php" method="post" enctype="multipart/form-data">
  42.         Выберите файл для загрузки:        <input type="file" name="upload_file" size="80">
  43.                 <input type="submit" name="submit" value="Загрузить">
  44.     </form>
  45. </body>
  46. </html>

(Отредактировано автором: 21 Июля, 2011 - 20:26:33)

 
 Top
Reexel
Отправлено: 21 Июля, 2011 - 20:29:05
Post Id


Новичок


Покинул форум
Сообщений всего: 6
Дата рег-ции: Июль 2011  


Помог: 0 раз(а)




Господа, источник я привел, в инете есть книжка в электронном виде - можно ее скачать и зайти в раздел "Работа с файлами", страница примерно 280.

Что касаемо кода - мне кажется, что echo показывает очень эффективно результат работы скрипта. Если осилю error_reporting - то буду пользоваться, к сожалению это, как правило, описывается в конце книжек.

Про echo, if else, for, array читал, логику работы понял, с $_SERVER, $_FILES сложнее, так как глава написана несколько сумбурно. Кроме того, абсолютно согласен со странностью htmlspecialchars - это совершенно лишнее. Однако он был в коде (см. картинку), поэтому его привел.

В логике скрипта понимаю и не понимаю следующее:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.    // Установка максимального размера в байтах
  3.     $maxsize = 1000000;
  4.     if (!$_POST['submit'])
  5.     {
  6.         print_r($_FILES);
  7.         $error=" ";
  8.     }
  9.    
  10.  

Если нет файла, то скрипт не имеет ошибку и идет дальше - до вывода формы. Максимальный размер файла, допустимого до загрузки млн байт. Не понимаю, что за параметр submit передается по $_POST - название формы? Не пойму что за print_r (в примере он закомментирован).
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.     echo 'Шаг 1 пройден.<br />';
  4.     echo $_FILES['upload_file']['tmp_name'].'<br />';
  5.     echo $_FILES['upload_file']['size'].'<br />';
  6.     echo $_FILES['upload_file']['type'].'<br />';
  7.     echo $_FILES['upload_file']['name'].'<br />';
  8.  
  9.  

Это написал я, чтобы видеть - создается ли массив $_FILES
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4.     // Проверка факта загрузки файла
  5.     if (!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND
  6.         !isset($error))
  7.     {
  8.         $error = "<b>Вы должны отправить файл!</b><br /><br />";
  9.         uplink($_FILES['upload_file']['tmp_name']);
  10.     }
  11.  
  12.  

Проверяем загрузку файла - была ли она по факту. Если нет и не определена переменная $error - то выводится сообщение об ошибке. Файл удаляется (какой?) uplink - функция?
PHP:
скопировать код в буфер обмена
  1.  
  2.    
  3. echo 'Шаг 2 пройден.<br />';    
  4.     // Проверка размера файла
  5.     if ($_FILES['upload_file']['size'] > $maxsize AND
  6.         !isset($error))
  7.     {
  8.         $error = "<b>Ошибка, размер файла не должен превышать $maxsize байт.</b><br /><br />";
  9.         unlink($_FILES['upload_file']['tmp_name']);
  10.     }
  11.  
  12.  

Проверяем размер файла - если больше - то выводим сообщение об ошибке. Временный файл удаляется.
PHP:
скопировать код в буфер обмена
  1.  
  2.    
  3. echo 'Шаг 3 пройден.<br />';    
  4.     // Проверка типа файла
  5.     if ($_FILES['upload_file']['type'] != "image/gif" AND
  6.         $_FILES['upload_file']['type'] != "image/pjpeg" AND
  7.         $_FILES['upload_file']['type'] != "image/jpeg" AND
  8.         !isset($error))
  9.     {
  10.         $error = 'Можно загружать только файлы .gif и .jpg';
  11.         unlink($_FILES['upload_file']['tmp_name']);
  12.     }
  13.  
  14.  

Проверяем тип файла gif, pjepg(что это за тип?), jpeg - подходящие, остальные отметаются. Временный файл удаляется.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.        
  4. echo 'Шаг 4 пройден.<br />';    
  5.     // Загрузка файла
  6.     if (!isset($error))
  7.     {
  8.         copy($_FILES['upload_file']['tmp_name'],
  9.                 "uploads/".$_FILES['upload_file']['name']);
  10.         unlink($_FILES['upload_file']['tmp_name']);
  11.         print 'Спасибо за ваш файл.';
  12.         echo '<br />';
  13.         echo '<br />';
  14.         echo '<a href="logo_setting.php">Попробовать</a> еще?';
  15.         exit;
  16.     }
  17.     else
  18.     {
  19.         echo("$error");
  20.     }
  21. echo 'Шаг 5 пройден.<br />';
  22. ?>
  23.  
  24.  

Если ошибки нет, то копируем файл со временным именем в директорию uploads. Выводим сообщение о повторной загрузке файла. Иначе выводим сообщение об ошибке.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <html>
  4. <head></head>
  5. <body>    
  6.     <h1>Логотип сайта</h1>
  7.     <form action="<?PHP echo(htmlspecialchars($_SERVER['PHP_SELF']))?>" method="post" enctype="multipart/form-data">
  8.         Выберите файл для загрузки:        <input type="file" name="upload_file" size="80">
  9.                 <input type="submit" name="submit" value="Загрузить">
  10.     </form>
  11. </body>
  12. </html>


Отображаем форму загрузки файла.

Правильна ли моя логика? Получается, что по идее если нет файла - то просто выведется форма - так и требуется. Если загружается файл - то проверяются на ошибки, если их нет - то копируется в директорию uploads. Что же тогда неподвластен загружаемый файл данному скрипту?

Если делаю переменная $error определена - то скрипт останавливается (это при исполнении, а не в моей логике). Убрать проверку наличия переменной $error?


PATCH пишет:
(Добавление)
специально для тебя лови твой код со всеми твоими проверками мб и недочеты и есть т.к эта моя вторая практика с загружаемостью файлов однако все проверки работают как и сам скрипт

Спасибо, сейчас разбираюсь и изучаю разницу. К сожалению, последнее сообщение написал во время появления Вашего поста. Тем не менее вопросы, заданные мною там актуальны. Имею ли я честь просить Вас ответить?

(Отредактировано автором: 21 Июля, 2011 - 20:34:50)

 
 Top
PATCH
Отправлено: 21 Июля, 2011 - 20:46:25
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 924
Дата рег-ции: Апр. 2011  


Помог: 22 раз(а)




Reexel пишет:
Если нет файла, то скрипт не имеет ошибку и идет дальше - до вывода формы. Максимальный размер файла, допустимого до загрузки млн байт. Не понимаю, что за параметр submit передается по $_POST - название формы? Не пойму что за print_r (в примере он закомментирован).


честно я незнаю зачем автор создавал пустую переменую и в любое логическое выражениее ее втыкал что касается submit это имя кнопки которое у вас в форме и передается она методом $_POST правильнее на мой взгляд делать такую проверку нажатой кнопки как у меня в скрипте , однако есть разные мнения.

CODE (html):
скопировать код в буфер обмена
  1. Проверяем загрузку файла - была ли она по факту. Если нет и не определена переменная $error - то выводится сообщение об ошибке. Файл удаляется (какой?) uplink - функция?


uplink функции нету есть unlink но в коде в который из книжки нету почти не где кроме в конце остановки сценария. и вообще в данном случии я не вижу применение этой функции. почему? поясняю:

CODE (html):
скопировать код в буфер обмена
  1. if (!is_uploaded_file($_FILES['upload_file']['tmp_name']) AND
  2.         !isset($error))
  3.     {
  4.         $error = "<b>Вы должны отправить файл!</b><br /><br />";
  5.         uplink($_FILES['upload_file']['tmp_name']);
  6.     }
здесь мы делаем проверку загружается ли файл (опять же нафиг эта пустая перменая error) по сути мы файл передаем в скрипт как временую переменую и по окончания скрипта эта переменая удалица, так что не вижу смысла в написании везде unlink функции посмотри на мой пример я там сделал проверку если проверку не прошел мы останавливаем скрипт с выводом сообщения

CODE (html):
скопировать код в буфер обмена
  1. Проверяем тип файла gif, pjepg(что это за тип?), jpeg - подходящие, остальные отметаются. Временный файл удаляется.


я и пишу такого типа нету есть jpg bmp ico png но такого нету.

поповоду удаления временого файла мб я и ошибаюсь что он удаляется когда сценарий прекращает свое действие сча проверю) только что проверил что та я невижу временого файла после остановки сценария) определял по размеру)

(Отредактировано автором: 21 Июля, 2011 - 20:48:01)

 
 Top
Roler
Отправлено: 21 Июля, 2011 - 20:51:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 458
Дата рег-ции: Авг. 2008  
Откуда: Россия


Помог: 1 раз(а)




Reexel пишет:
Не понимаю, что за параметр submit передается по $_POST - название формы?

Кнопку зовут sumbit.
То есть, если кто-то пытается загрузить файл, то в массиве $_POST будет ключ submit, который означает, что сейчас необходимо обработать файл.

Reexel пишет:
Не пойму что за print_r (в примере он закомментирован).

print_r
Выводит дамп массива.

Вообще, код выглядит довольно криво. По сути, всю последующую работу с файлом надо вложить в код после проверки факта его загрузки.


Я что-то не понял, а что на выходе то у вас не так получается?
Дайте вывод.

(Отредактировано автором: 21 Июля, 2011 - 20:53:00)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB