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
Форумы портала PHP.SU :: Версия для печати :: Загрузка файла
Форумы портала PHP.SU » » HTTP и PHP » Загрузка файла

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

1. PATCH - 02 Июля, 2011 - 03:07:03 - перейти к сообщению
Сижу сча как лунатик и не пойму где ошибка даже по образцу делаю.

CODE (html):
скопировать код в буфер обмена
  1.  <form enctype="multipart/form-data" action="add.php" method="post">
  2.  <input type="file" name="filename"><br>
  3. <p><input name="add" type="submit" value="Добавить "></p>
  4.  </form>



PHP:
скопировать код в буфер обмена
  1. if(isset($_POST['filename']))
  2. {
  3. $uploaddir = $_SERVER['DOCUMENT_ROOT'].'/files/';
  4.  
  5.    if($_FILES["filename"]["size"] > 1024*3*1024)
  6.    {
  7.      echo ("Размер файла превышает три мегабайта");
  8.      exit;
  9.    }
  10.    // Проверяем загружен ли файл
  11.    if(is_uploaded_file($_FILES["filename"]["tmp_name"]))
  12.    {
  13.      // Если файл загружен успешно, перемещаем его
  14.      // из временной директории в конечную
  15.      move_uploaded_file($_FILES["filename"]["tmp_name"],"".$uploaddir."".$_FILES["filename"]["name"]);
  16.    } else {
  17.       echo("Ошибка загрузки файла");
  18.    };
  19.  
  20. // Выводим информацию о загруженном файле:
  21. echo "<h3>Информация о загруженном на сервер файле: </h3>";
  22. echo "<p><b>Оригинальное имя загруженного файла: ".$_FILES['filename']['name']."</b></p>";
  23. echo "<p><b>Mime-тип загруженного файла: ".$_FILES['filename']['type']."</b></p>";
  24. echo "<p><b>Размер загруженного файла в байтах: ".$_FILES['filename']['size']."</b></p>";
  25. echo "<p><b>Временное имя файла: ".$_FILES['filename']['tmp_name']."</b></p>";
  26. }




CODE (htmlphp):
скопировать код в буфер обмена
  1. ; Whether to allow HTTP file uploads.
  2. ; http://php.net/file-uploads
  3. file_uploads = On
  4.  
  5. ; Temporary directory for HTTP uploaded files (will use system default if not
  6. ; specified).
  7. ; http://php.net/upload-tmp-dir
  8. upload_tmp_dir = "G:/web/APACH+MYSQL+PHP/PHP2/tmp_upload"
  9.  
  10. ; Maximum allowed size for uploaded files.
  11. ; http://php.net/upload-max-filesize
  12. upload_max_filesize = 1000M
  13.  
  14. ; Maximum number of files that can be uploaded via a single request
  15. max_file_uploads = 20
2. tsoi85 - 02 Июля, 2011 - 03:24:45 - перейти к сообщению
$_POST['filename'] замените на $_POST['add'].

# В первой строке
3. PATCH - 02 Июля, 2011 - 03:27:04 - перейти к сообщению
тут идет проверка существует ли вообше переменая с файлом, а не нажата ли кнопка) нажать кнопку любой может)

Оо работает тока еще ошибок по выскакивало) но я там сам начудил) а как собствено проверить передается ли переменая с файлом?
4. tsoi85 - 02 Июля, 2011 - 03:32:24 - перейти к сообщению
Как нибудь так:

PHP:
скопировать код в буфер обмена
  1.  
  2. if (!$_FILES['file']['error']) {
  3.   # Нет ошибок
  4.  
  5. }
  6. else {
  7.   echo 'Файл не выбран ...';
  8. }
  9.  
  10.  
5. PATCH - 02 Июля, 2011 - 12:40:15 - перейти к сообщению
вопрос а в чем тут собственно ошибка Оо

CODE (htmlphp):
скопировать код в буфер обмена
  1.                         if($_FILES['filename']['type'] != "image/gif" and
  2.                         $_FILES['filename']['type'] !="image/jpeg" and
  3.                         $_FILES['filename']['type'] !="image/jpg" and
  4.                         $_FILES['filename']['type'] !="image/png")
  5.                         {exit ("Доступна загрузка только gif, png, jpeg, jpg файлов");}

по сути тут проверка если файл не имеет типа gif или png или jpeg или jpg то выход с ошибкой но я загружаю картинку с типом jpg и png пробовал нефига) имено на этом моменте ступар
6. OrmaJever - 02 Июля, 2011 - 12:50:04 - перейти к сообщению
перед условием
7. Мелкий - 02 Июля, 2011 - 12:58:54 - перейти к сообщению
PATCH пишет:
вопрос а в чем тут собственно ошибка

Пару дней назад поймал багрепорт к своему одному древнему скрипту - какой-то браузер не высылает корректный type. Что и кто высылает - разбираться не стал, всё равно с т.з. безопасности эта проверка ни о чём.
Воспользуйтесь mime_content_type
8. PATCH - 02 Июля, 2011 - 13:46:06 - перейти к сообщению
OrmaJever пишет:
перед условием
PHP:
скопировать код в буфер обмена
var_dump($_FILES['filename']['type']);
спасибо) я понел что эт)) эт я с браузером нахимичел эксперементировал с безопаснастью))) А чё я? Я ничё!


Мелкий пишет:
Пару дней назад поймал багрепорт к своему одному древнему скрипту - какой-то браузер не высылает корректный type. Что и кто высылает - разбираться не стал, всё равно с т.з. безопасности эта проверка ни о чём.
Воспользуйтесь mime_content_type

вот ток что ради интереса залил php сценарий в расширении jpg и попробовал испольнить его на прямую, результат тупой показ надписи изображение) менял даж mime-type в браузере один фиг, вот какая может быть тут бреш в системе безопасности? если mime-type на сервере (по нему интепретатор php определяет как исполнять файл как сценарий или картинку) а на сервере ж стоит на jpg тип image т.е интепретатор php его не будет исполнять как сценарий. я понимаю тут не хакерски форум я новичек в системе безопасности .но вроде я прально понел то что ты хотел сказать? как вот вообще можно будет тогда исполнить php код? если он определяется по mime-type на сервере.


еще хотел бы уточнить mime_content_type

определяет тип файла по mime type сервера или клиента? или она вообще как то иначе работает?
9. Мелкий - 02 Июля, 2011 - 14:33:18 - перейти к сообщению
PATCH пишет:
вот какая может быть тут бреш в системе безопасности?

Зависит от других проверок. Если проверять только mime, который присылает браузер - ничто не мешает выслать тот же скрипт с расширением php.

PATCH пишет:
определяет тип файла по mime type сервера или клиента? или она вообще как то иначе работает?

Сервера.
10. PATCH - 03 Июля, 2011 - 19:37:04 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $mime = mime_content_type($_FILES['filename']);
  2.                         if($mime != "image/gif" and $mime !="image/jpeg" and $mime !="image/jpg" and $mime !="image/png" and $mime != "image/x-icon");
  3.                         {exit ("Доступна загрузка только gif, png, jpeg, jpg, ico файлов");}


типо так реализовать? и вопрос почему кидает ошибку в $mime = mime_content_type($_FILES['filename']);

CODE (htmlphp):
скопировать код в буфер обмена
  1. Warning: mime_content_type(): Can only process string or stream arguments in
11. tsoi85 - 03 Июля, 2011 - 20:20:50 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. $mime = mime_content_type($_FILES["filename"]["tmp_name"]);
  3. if ($mime != "image/gif" and $mime !="image/jpeg" and $mime !="image/png" and $mime != "image/x-icon") {
  4.     exit ("Доступна загрузка только gif, png, jpeg, jpg, ico файлов");
  5. }
  6.  
12. PATCH - 03 Июля, 2011 - 20:31:23 - перейти к сообщению
спасибо работает

 

Powered by ExBB FM 1.0 RC1