2015-03-29 2 views
2

Я создаю загрузчик для фотосайта, большинство загружаемых фотографий имеют тип 1232132_1231231_12.jpg. когда я запускаю pathinfo(), я получаю пустые выходы для расширения.Не удалось получить расширение файла при использовании pathinfo()

Вот мой код

$target_dir = "Photos/"; 
$species = filter_input(INPUT_POST, 'species'); 
$country = filter_input(INPUT_POST, 'country'); 
$type= filter_input(INPUT_POST, 'type'); 
include_once 'connection.php'; 
echo $target_dir . basename($_FILES["file"]["name"]); 
for($a=0;$a<count($_FILES['file']['tmp_name']);$a++) 
{ 
$target_file = $target_dir . basename($_FILES["file"]["name"][$a]); 
$imageFileType=pathinfo($target_file, PATHINFO_EXTENSION); 
var_dump(pathinfo($target_file)); 

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") 
    { 
     echo "<br> Sorry, only JPG, JPEG, PNG & GIF files are allowed. your file is a $imageFileType <br>"; 
    } 
} 

Фотографии/2014-02-21 18.19.08.jpg

echo $target-file; 

дает этот выход Фотографии/2014-02-21 18.19.08.jpg

для var_dump, это выдается на экран, массив (3) {["dirname"] => строка (6) "Фотографий" ["basename"] => строка (1) "2" [ filename "] => string (1)" 2 "}

Что-то не в порядке с моим кодом или путь pathinfo() не работает с именами имен номеров и специальных символов?

Есть ли другая функция, которая работает с этими типами имен файлов или должна взорваться() $ target_file с помощью. и взять последний элемент в возвращаемом массиве?

+0

Что произойдет, если вы поставите 'error_reporting (E_ALL)' в верхней части вашего сценария ? –

+0

Пожалуйста, проверьте ссылку и прочитайте комментарии отмеченного answer.http: //stackoverflow.com/questions/10368217/how-to-get-the-file-extension-in-php –

+1

Что произойдет, если вы «echo» target_file = $ target_file
\ n ";' прямо над вашим var_dump()? Является ли имя файла «Photos/2» или «Photos/2.jpg»? –

ответ

1

Проблема не в pathinfo. Вы делаете что-то странное:

$target_file = $target_dir . basename($_FILES["file"]["name"][$a]); 

Эта строка находится в цикле, где $ а между 0 и ... $ _FILES [ «Файл»] [ «имя»] возвращает имя файла. но:

$_FILES["file"]["name"][0] 

вернет первую букву из имени файла (2 для вашего примера). Таким образом, вы делаете Pathinfo на переменную:

$target_file = $target_dir . basename($_FILES["file"]["name"][$a]); // looks like $target_file = Photos/2 (when $a = 0) 

изменения, которые выстраиваются в линию, как это:

$target_file = $target_dir . basename($_FILES["file"]["name"]); 
+0

, это решило проблему, но я хочу передать массив фотографий в php, а затем загрузить их все это будет означать, что если я передам массив файлов, то он не будет повторять их? –

+1

Если ваш файл типа ввода выглядит следующим образом: '

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