2015-09-22 2 views
2

Я не могу загрузить файлы msoffice в папку на сервере, я могу загрузить файлы PDF и изображений, но не .docx, .xlsx или даже .txt, все мои синтаксисы выглядят правильно из моих ограниченных знаний. Это формаЗагрузка файла excel на сервер

<form id="Upload" action="upload_file.php" method="post" enctype="multipart/form-data"> 
    <label for="fileSelect">Navigate and choose:</label> 
    <input type="file" name="file" id="fileSelect"><br><br> 
    <input class="button" type="submit" name="action" value="Upload to Shared Folder"> 
</form> 

и это upload_file.php

if(isset($_FILES["file"]["error"])){ 
if($_FILES["file"]["error"] > 0){ 
    echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
} else{ 
    $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png", "doc" => "application/msword", "docx" => "application/msword", "xls" => "application/vnd.ms-excel", "xlsx" => "application/vnd.ms-excel", "pdf" => "application/pdf", "txt" => "application/txt"); 
    $filename = $_FILES["file"]["name"]; 
    $filetype = $_FILES["file"]["type"]; 
    $filesize = $_FILES["file"]["size"]; 

    // siati faaopoopo 
    $ext = pathinfo($filename, PATHINFO_EXTENSION); 
    if(!array_key_exists($ext, $allowed)) die("Error: This file is not an accepted file type.</br></br>"); 

    // siati fua - 10MB 
    $maxsize = 200000 * 60; 
    if($filesize > $maxsize) die("Error: File size is larger than the allowed 10MB limit.</br></br>"); 

    // siati MYME 
    if(in_array($filetype, $allowed)){ 
     // Check whether file exists before uploading it 
     if(file_exists("general/" . $_FILES["file"]["name"])){ 
      echo $_FILES["file"]["name"] . " already exists. Go back and choose another file or rename the original.</br></br>"; 
     } else{ 
      move_uploaded_file($_FILES["file"]["tmp_name"], "general/" . $_FILES["file"]["name"]); 
      echo "The file was uploaded successfully.</br></br>"; 
     } 
    } 
    else{ 
     echo "Error: There was a problem uploading the file - please try again."; 
    } 
} 
} else{ 
echo "Error: Invalid parameters - something is very very very wrong with this upload."; 
} 

Я должен что-то отсутствует, но не понял, что. Я пробовал искать приложение/msword и вещи на stackexchange и google, но все это кажется правильным. Ошибки я получаю:

Error: There was a problem uploading the file - please try again. 

Пожалуйста помогите

+1

Вы можете сделать var_dump ($ filetype), чтобы увидеть, что на самом деле там? Например, xlsx может также иметь приложение mimetype/vnd.openxmlformats-officedocument.spreadsheetml.sheet – swidmann

+0

@swidmann Хотите попробовать, как это сделать? Добавить этот код где-нибудь? – Kilisi

+1

просто поместите var_dump ($ filetype); прямо под вашим файлом filetype = $ _FILES ["file"] ["type"] ;. возможно, вы хотите добавить die(); под var_dump(), поэтому он печатает содержимое переменных и останавливает скрипт – swidmann

ответ

3

Вы, вероятно, проверка против неправильных MimeType, попробуйте сбросить все Mimetypes, где файл не удалось загрузить.

Вот небольшой обзор для MS Office Mimetypes: office_mime_types

Если вы хотите, чтобы ваш файл проверить немного лучше и более безопасным, вы можете проверить это следующим образом.

$allowed = array(
    "xls" => array("application/vnd.ms-excel"), 
    "xlsx" => array(
     "application/vnd.ms-excel", 
     "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
    ) 
); 

// replace this 
if (in_array($filetype, $allowed)) {} 

// with this 
// this checks also if mimetype of xlsx is just a mimetype of xlsx and nothing else 
if (isset($allowed[$ext]) && in_array($filetype, $allowed[$ext])) {}