2012-06-06 5 views
0

У меня есть сценарий, основанный на примере загрузки файла PHP с jQuery Uploader. Он получает тип файла со следующим кодом (он получает этот компонент $ _FILES) ...Получение типа mime при загрузке файлов - непоследовательно

$fileType = (isset($_SERVER['HTTP_X_FILE_TYPE']) ? $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type']); 

Примечание; $ upload ['type'] поступает из $ _FILES ['files'] ['type'].

Теперь это прекрасно - за исключением того факта, что некоторые файлы, похоже, не имеют информации fileType. Я могу получить более точные ответы от использования file info и функций mimetype в PHP, но они не работают с объектами $ _FILES, и я пытаюсь выполнить эту проверку, прежде чем переносить файл на s3, поэтому я действительно не хочу загружать это локально.

Может ли кто-нибудь посоветовать, есть ли что-то, что я могу, чтобы получить более точный отчет о типе из $ _FILES или он будет загружаться локально, чтобы запускать эти альтернативные функции PHP?

ответ

1

finfoтолько способ для этого. Вы не можете полагаться на информацию, которую клиент отправляет вам, ее слишком легко подделать с клиентской стороны.

Там нет никаких оснований, что она не будет работать с $_FILES, вы бы просто передать $_FILES['files']['tmp_name'] как путь к файлу - это еще действительный путь к файлу, и вам не нужно вызывать move_uploaded_file() для доступа к данным. Выход из файла в временном расположении также имеет то преимущество, что он будет уничтожен, когда скрипт будет завершен, если вы ничего не сделали с ним.

+0

Отличное разъяснение - спасибо. Я изо всех сил пытаюсь получить допустимый путь к файлу здесь ... – waxical

+0

Что делать, если вы просто 'print_r ($ _ FILES)'? Вы должны увидеть, что 'tmp_name' имеет допустимый путь к файлу в нем - если нет, что он говорит? – DaveRandom

+0

Я отвечаю правильно, так как это отвечает на запрос - у меня все еще есть проблемы с этим путем, но будет обновляться, когда выясняется, что происходит. – waxical

Смежные вопросы