Продолжает генерировать исключение «неверный файл», где лежит проблема?

У меня проблема с этим фрагментом, когда я пытаюсь проверить файл, который пытаюсь загрузить. Код пришел из эта страница, но он продолжает бросать Invalid file format. исключение, когда я проверяю типы пантомимы. Мне нужно загружать только файлы PDF. Каждый файл PDF, который я пробовал, не удался.

В чем может быть проблема здесь?

    private function File($f) { // example from http://php.net/manual/en/features.file-upload.php
try {
if(!isset($f['file']['error']) || is_array($f['file']['error'])) {
throw new RuntimeException('Invalid parameters.');
}

switch ($f['file']['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new RuntimeException('No file sent.');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('Exceeded filesize limit.');
default:
throw new RuntimeException('Unknown errors.');
}

if($f['file']['size'] > 10000000) {
throw new RuntimeException('Exceeded filesize limit.');
}

$finfo = new finfo(FILEINFO_MIME_TYPE);

$extentions = array(
'pdf' => 'application/pdf',
'pdf' => 'x-pdf',
'pdf' => 'application/vnd.cups-pdf',
'pdf' => 'application/vnd.sealedmedia.softseal-pdf'
);

$ext = array_search($finfo->file($f['file']['tmp_name']), $extentions);

if(false === $ext) {
throw new RuntimeException('Invalid file format.');
}

if(!move_uploaded_file($f['file']['tmp_name'], sprintf('./uploads/%s.%s', sha1_file($f['file']['tmp_name']), $ext))) {
throw new RuntimeException('Failed to move uploaded file.');
}

echo 'File is uploaded successfully.';
}
catch (RuntimeException $e) {
echo $e->getMessage();
}
}

0

Решение

Вы перезаписываете свои ключи массива в $extentions с новыми значениями вместо добавления новых пар ключ / значение.

Следующий код не делает то, что вы думаете:

$extentions = array(
'pdf' => 'application/pdf',
'pdf' => 'x-pdf',
'pdf' => 'application/vnd.cups-pdf',
'pdf' => 'application/vnd.sealedmedia.softseal-pdf'
);

var_dump($extentions); будет производить:

array(1) {
["pdf"]=>
string(40) "application/vnd.sealedmedia.softseal-pdf"}

Вам нужно добавить дополнительные типы MIME вместо того, чтобы писать поверх них.

1

Другие решения

Одна проблема заключается в следующем: я считаю, что ваши ключи и значения поменялись местами. В следующем будет массив с именем $extensions с одним ключом pdf связано с одним значением application/vnd.sealedmedia.softseal-pdf

 $extentions = array(
'pdf' => 'application/pdf',
'pdf' => 'x-pdf',
'pdf' => 'application/vnd.cups-pdf',
'pdf' => 'application/vnd.sealedmedia.softseal-pdf'
);

Я подозреваю, что вы на самом деле пытаетесь сделать это:

$extentions = array(
'application/pdf' => 'pdf',
'x-pdf' => 'pdf',
'application/vnd.cups-pdf' => 'pdf',
'application/vnd.sealedmedia.softseal-pdf' => 'pdf'
);

$ext = @$extensions[$finfo->file($f['file']['tmp_name'])];
1

По вопросам рекламы [email protected]