2013-04-11 1 views
0

Я пытаюсь внедрить загрузчик файлов, но он показывает неверную ошибку для PDF-файлов и других файлов приложений, следующий код, который я использую, может ли кто-нибудь помочь мне отслеживать ошибку, почему ее отображение недопустимого сообщения. заранее спасибо.php uploader invalid

<?php 
$allowedExts = array("gif", "jpeg", "jpg", "png"); 
$extension = end(explode(".", $_FILES["file"]["name"])); 
if ((($_FILES["file"]["type"] == "image/gif") 
|| ($_FILES["file"]["type"] == "image/jpeg") 
|| ($_FILES["file"]["type"] == "image/jpg") 
|| ($_FILES["file"]["type"] == "image/png") 
|| ($_FILES["file"]["type"] == "application/pdf")) 
&& ($_FILES["file"]["size"] < 50000) 
&& in_array($extension, $allowedExts)) 
    { 
    if ($_FILES["file"]["error"] > 0) 
    { 
echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; 
} 
    else 
{ 
    echo "Upload: " . $_FILES["file"]["name"] . "<br>"; 
    echo "Type: " . $_FILES["file"]["type"] . "<br>"; 
    echo "Size: " . ($_FILES["file"]["size"]/1024) . " kB<br>"; 
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; 

if (file_exists("upload/" . $_FILES["file"]["name"])) 
    { 
    echo $_FILES["file"]["name"] . " already exists. "; 
    } 
else 
    { 
    move_uploaded_file($_FILES["file"]["tmp_name"], 
    "upload/" . $_FILES["file"]["name"]); 
    echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; 
    } 
    } 
      } 
    else 
     { 
     echo "Invalid file"; 
    } 
?> 
+1

Ваш отступы и вложенность кажутся довольно трудными для синтаксического анализа. Я предлагаю вам разобраться, так что, возможно, было бы легче понять, что делает ваш код. Я предлагаю рефакторинг для разделения функций/блоков и автоматического форматирования кода. – eis

+0

Одно простое изменение, такое как кеширование '$ _FILES ['file']', сделает этот код намного чище. – elclanrs

ответ

2

Вы позволяете только .gif, .jpeg, .jpg, .png на линии 1:

$allowedExts = array("gif", "jpeg", "jpg", "png"); 

Если вы загружаете PDF, конечно, подскажет Invalid file

0

В вашей

$allowedExts = array("gif", "jpeg", "jpg", "png") 

Не конта в формате ".pdf", пожалуйста, добавьте разрешенные расширения "$ allowedExts" как

 $allowedExts = array("gif", "jpeg", "jpg", "png","pdf","php"); 
0

пожалуйста, попробуйте следующее:

использование: $allowedExts = array("gif", "jpeg", "jpg", "png","pdf");

вместо: $allowedExts = array("gif", "jpeg", "jpg", "png");

И на будущее, пожалуйста, держите чтобы добавить расширения, которые вы хотите разрешить.

Надеюсь, это поможет.

0

Очевидная ошибка уже указана.

В дополнение к этому, если вы реорганизовывать и переформатировать ваш код что-то вроде

$allowedExts = Array("gif", "jpeg", "jpg", "png"); 
$allowedContentTypes = Array("application/pdf", "image/png", "image/jpeg", "image/jpg", "image/gif"); 
$fileSizeLimit = 50000; 

function getExtension($file) 
{ 
    return end(explode(".", $file["name"])); 
} 
function hasAllowedContentType($file) 
{ 
    return in_array($file['type'], $allowedContentTypes); 
} 
function isWithinSizeLimits($file) 
{ 
    return $file['size'] < $fileSizeLimit; 
} 
function hasAllowedExtension($file) 
{ 
    $extension = getExtension($file['name'); 
    return in_array($extension, $allowedExts); 
} 
function alreadyExists($path) 
{ 
    return file_exists($path); 
} 

$file = $_FILES["file"]; 
$targetPath = "upload/" . $file["name"]; 
$tempPath = $file["tmp_name"]; 

if (!hasAllowedContentType($file) 
    || !isWithinSizeLimits($file) 
    || !hasAllowedExtension($file)) 
{ 
    echo "Invalid file"; 
} 
else if ($file["error"] > 0) 
{ 
    printf("Return Code: %s<br>", $file["error"]); 
} 
else 
{ 
    printf("Upload: %s<br>", $file["name"]); 
    printf("Type: %s<br>", $file["type"]); 
    printf("Size: %d kB<br>", ($file["size"]/1024)); 
    printf("Temp file: %s<br>", $tempPath); 

    if (alreadyExists($targetPath)) 
    { 
    printf("%s already exists.", $file["name"]); 
    } 
    else 
    { 
    move_uploaded_file($tempPath, $targetPath); 
    printf("Stored in: %s", $targetPath); 
    } 
} 

это уже намного легче понять и поддержать.