загрузка файла в php - PullRequest
       29

загрузка файла в php

0 голосов
/ 08 июня 2011

Я использую функцию загрузки php для загрузки файлов в моем интерфейсе.Я использую Firefox-3.6.11 в моем браузере.Я загружаю листы Excel.Я попытался получить загруженный тип файла. Я проверил тип файла следующим образом:

$Type = $HTTP_POST_FILES['TS_FILE']['type'];
$Data = split ("/", $Type,2 ) ;

if( "$Data[1]" != "vnd.ms-excel" && $Data[1]!="octet-stream" && "$Data[1]"!="xls" && "$Data[1]" != "excel" )
{
    echo "<script> //alert ( 'inside alert' ) ;
       alert ( 'The selected file is not in .xls format. Please select proper file.' ) ;
       </script>";
    exit;
}

Он работает нормально.Но через некоторое время я получил сообщение с предупреждением, как я упоминал в своем коде, даже если я загружаю лист Excel.Я не знаю, в чем именно проблема.Есть ли другой тип файла Excel, доступный в версиях Firefox ???

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Значение $_FILES['file']['type'] отправляется браузером, и браузер получает это значение из базовой ОС. Если я настрою Windows и сообщу ему, что .xls имеет тип mime image/jpeg, мой браузер (будь то Firefox, IE или любой другой) отправит этот тип в ваше приложение.

Так что, по сути, не полагайтесь на $_FILES['file']['type'] для проверки. Получите это значение на стороне сервера, используя php's fileinfo:

$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
$type = finfo_file($finfo, $_FILES['file']['tmpname']);

Кроме того, вы можете получить список использованных mimetypes для файлов Excel с этого сайта: http://filext.com/file-extension/XLS

edit: $_FILES вместо $_SERVER (извините, здесь рано)

0 голосов
/ 08 июня 2011

Я не знаю, где ошибка в вашем коде, так как я не загружал файлы, близкие к этому.

Я всегда использовал пример на W3Schools http://w3schools.com/php/php_file_upload.asp

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

Способ, которым вы хотите проверить тип файла, использует $_POST['file']['type'] Я вижучто вы действительно используете это, но, возможно, не правильно.

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

Способ выяснитьто, что ваш браузер отправляет как тип файла, это просто trigger_error("File type is: ".$_POST['file']['type']);

Теперь вы можете сделать оператор if, как они использовали в W3S для проверки файла, используя тип файла, о котором сообщал trigger_error.

ПожалуйстаИмейте в виду, что некоторые браузеры (особенно IE) могут использовать другое имя.

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

...