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 :: Загрузка файлов на сервер

 PHP.SU

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


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

> Без описания
teddy
Отправлено: 25 Мая, 2013 - 02:40:27
Post Id


Участник


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


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




Здравствуйте уважаемые форумчане. Столкнулся с проблемой при загрузки файлов на сервер. При добавлении файла получаю тип: Array ( [name] => original.jpg [type] => image/pjpeg [tmp_name] => Z:\tmp\php1797.tmp [error] => 0 [size] => 60198 ) - как можно сделать, что бы можно было убрать p перед .jpg? А то оно мне всю проверку портит. Вот код, на всякий случай. Благодарю заранее

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. function isSecurity($file){
  3.         $name = $file["name"];
  4.         $type = $file["type"];
  5.         $size = $file["size"];
  6.         $blacklist = array(".php", ".phtml", ".php3", ".php4");
  7.         foreach($blacklist as $item){
  8.          if(preg_match("/$item\$/i", $name)) return false;
  9.          
  10.    if(($type != "image/gif") && ($type != "image/png") && ($type != "image/jpg") && ($type != "image/jpeg")) return false;
  11.    if($size > 5*1024*1024) return false;
  12.    else
  13.    return true;  
  14.          
  15. }
  16.  
  17.  
  18. }
  19. function loadFile($file){
  20.         $type = $file['type'];
  21.         $dir = "files/";
  22.  
  23.         $name = md5(microtime()).".".substr($type, strlen("image/"));
  24.         $uploadfile = $dir.$name;
  25.         if(move_uploaded_file($file["tmp_name"], $uploadfile)){
  26.         return true;
  27.  
  28. }else return false;
  29. }
  30. if(isset($_POST['addfile'])){
  31.         $file = $_FILES['file'];
  32.         print_r($file);
  33.         if(isSecurity($file)) loadFile($file);
  34.         else
  35.         echo "Неверный формат файла";
  36. }
  37.  
  38.  
  39. ?>
  40. <form action="file.php" method="post" enctype="multipart/form-data">
  41. <input type="file" name="file"><br>
  42. <input type="submit" name="addfile" value="Add">
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Мая, 2013 - 06:12:29
Post Id



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


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


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




Вот например первая ссылка в выдаче гугла по запросу image/pjpeg: http://web[dot]izjum[dot]com/ie-mime-type-pjpeg

Я пошел смотреть что у меня с этим.
А у меня с этим все нормально.
Тут видно, что у одного контейнера не обязательно одно возможное расширение файла.
Кроме того одно и то же расширение может быть обернуто в разные контейнеры.
Твой pjpeg там тоже присутствует:
PHP:
скопировать код в буфер обмена
  1. $filetypes = array(
  2.  
  3.   "image/bmp"           => array("bm", "bmp"),
  4.   "image/x-windows-bmp" => array("bm", "bmp"),
  5.   "image/gif"           => array("gif"),
  6.   "image/jpeg"          => array("jpe", "jpg", "jpeg"),
  7.   "image/pjpeg"         => array("jpg"),
  8.   "image/png"           => array("png", "x-png"),
  9.   "image/x-png"         => array("png"),
  10.   "image/svg+xml"       => array("svg", "svgz")
  11.  
  12. );
 
 Top
teddy
Отправлено: 25 Мая, 2013 - 10:43:06
Post Id


Участник


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


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




DeepVarvar
Спасибо большое, ответ реально помог ) По правде говоря прежде вообще не слышал про pjpeg и думал, что проблема в коде. Дело в том, что при минимальном наборе кода, которого достаточно для загрузки файла на сервер, все файлы, в том числе и тот же jpg загружался нормально, а после проверок уже менялся формат...
(Добавление)
Появилась необходимость аналогичного скрипта но с возможностью загружать только word документы. Но почему то получаю ошибку, изменил только 1 строку в коде, а именно типы.

PHP:
скопировать код в буфер обмена
  1. if(($type != "application/msword")) return false;
  2.  


Результат var_dump

array(5) { ["name"]=> string(11) "test.doc" ["type"]=> string(18) "application/msword" ["tmp_name"]=> string(18) "Z:\tmp\php17C5.tmp" ["error"]=> int(0) ["size"]=> int(28672) }

Вот собственно и ошибка. В гугле найти не смог, к сожалению.

Warning: move_uploaded_file(files/ation/msword) [function.move-uploaded-file]: failed to open stream: No such file or directory in Z:\home\test1.ru\www\file.php on line 25

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'Z:\tmp\php17C7.tmp' to 'files/ation/msword' in Z:\home\test1.ru\www\file.php on line 25

Походу там проблемы с названием. Не пойму из за чего? Другие файлы норм подгружаются, если формат не соответствует, то значит всплывает ошибка типа "Неверный формат файла". А здесь почему то на уровне php. Вроде обычная проверка, скрипт рабочий, не пойму... Буду признателен если поможете
 
 Top
DeepVarvar Супермодератор
Отправлено: 25 Мая, 2013 - 11:45:00
Post Id



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


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


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




Так проверь что там в названии - var_dump() все скажет.
 
 Top
teddy
Отправлено: 25 Мая, 2013 - 11:49:21
Post Id


Участник


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


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




DeepVarvar
Я же отправил результат дампа. Исходя из ошибки как я понял php расценивает это дело "application/msword" не как формат а как директорию. А почему при загрузке картинок было не так? Ведь там тоже image/gif, например...
 
 Top
DelphinPRO
Отправлено: 25 Мая, 2013 - 12:16:01
Post Id



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


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




teddy пишет:
$name = md5(microtime()).".".substr($type, strlen("image/"));

а здесь image/ на application/ заменили?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 25 Мая, 2013 - 17:19:16
Post Id


Участник


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


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




DelphinPRO
Точно... спасибо ) Улыбка

Надо же так тупануть Не понял
 
 Top
Andrew_li
Отправлено: 30 Мая, 2013 - 07:04:44
Post Id


Новичок


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


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




Доброго дня, не буду создавать тему, так как вопрос по теме.
Загрузчик загружает файл, но когда скачиваешь файл, то на деле файл скачивается поврежденный, файлы вордовские
Когда файл открываешь, там кракозябры, подскажите что может быть.

Вот код для скачки
PHP:
скопировать код в буфер обмена
  1. if(isset($_GET['downloadid']) AND !empty($_GET['downloadid']))
  2. {
  3.   $_GET['downloadid'] = intval($_GET['downloadid']);
  4.  
  5.   $sql = "SELECT * FROM `tezis` WHERE `id`='{$_GET['downloadid']}' AND `person_id`='{$_SESSION['person_id']}';";
  6.   $res = $DB->sql_query($sql, "Запрос прикрепленного файла.");
  7.  
  8.   if($DB->sql_numrows($res))
  9.   {
  10.     $tez = $DB->sql_fetchrow($res);
  11.  
  12.     if(file_exists($_SERVER["DOCUMENT_ROOT"] . '/personal/files/'. $doc['id']))
  13.     {
  14.       header("HTTP/1.0 200 OK");
  15.       header("Content-type: application/data-stream");
  16.       header("Content-disposition: attachment; filename=\"{$doc['file_name']}\"");
  17.       @readfile($_SERVER["DOCUMENT_ROOT"] . '/personal/files/'. $doc['id']);
  18.       exit();
  19.     }
  20.   }
  21.   else header('Location: '. $_SERVER['SCRIPT_NAME']);
  22. }


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

(Отредактировано автором: 03 Июня, 2013 - 12:19:34)

 
 Top
Andrew_li
Отправлено: 04 Июня, 2013 - 12:38:22
Post Id


Новичок


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


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




Все дело было в заголовках
PHP:
скопировать код в буфер обмена
  1.  
  2. header("HTTP/1.0 200 OK");
  3. header("Content-Description: File Transfer");
  4. header("Content-type: application/octet-stream");
  5. header("Content-disposition: attachment; filename=\"{$doc['file_name']}\"");
  6. header("Content-Length: " . $fsize);
  7.  
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB