Ошибка при загрузке файла в php

#php #file-upload #error-handling #runtime-error

#php #загрузка файла #обработка ошибок #время выполнения-ошибка

Вопрос:

Кто-нибудь может определить, в чем может быть проблема с моим кодом? Когда я пытаюсь загрузить PDF-файл размером более 8 МБ, я получаю следующее сообщение:

Что-то пошло не так [файл не загружен] Файл уже на сервере.

Это код, который я ввел:

     <?php
    $name = $_FILES['file']['name']; 
    $storefile_loc = "uploads/"; 
    $storefile_path = $storefile_loc.basename($name);

    //$get_ext=explode(".",$_FILES['file']['name']); //separates file name from extension
    //$ext=end($get_ext); //gets the extension from above explosion
    $txtFileType = pathinfo($storefile_path,PATHINFO_EXTENSION);
    $goodext = array("txt","doc","odt","docx"); //array of extensions for app

    //Check if files are .txt (.doc, and .pdf functionality to be added)
    if (isset($_POST["submit"])){ //checks if form has been submitted
        //$check=mime_content_type($name);
        if (($_FILES['file']['type'] == "text/plain")
        ||($_FILES['file']['type'] == "application/pdf")
        ||($_FILES['file']['type'] == "application/vnd.oasis.opendocument.text")
        ||($_FILES['file']['type'] == "application/msword")
        ||($_FILES['file']['type'] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
        amp;amp;(in_array($txtFileType,$goodext))){
            echo "Uploading File...";
        }
        else {
            echo "You can only upload a txt/doc/docx/pdf/odt file.";
        }
    }
    else {
        echo "Something went wrong [No file uploaded]";
    }

    //Check if file already exists. Probably won't need this
    if (file_exists($storefile_path)){ //this instead of $name because it's checking server
        echo "File already on server.";
    }

    //Check file size
    if  ($_FILES['file']['size'] > 2000000){
        echo "File is too large.";
    }   


    //Way to upload permanently. Probably won't need this
    /*
    if (move_uploaded_file($_FILES['file']['tmp_name'], $storefile_path)){
        echo "The file '".basename($_FILES['file']['name'])."' has been uploaded.";
    }
    else {
        echo "Something went wrong when uploading your file.";
    }
    */

    ?>
 

Я также получаю уведомления об ошибках в строках 2 и 36. Проблема в моем коде? Или это с Apache?

Комментарии:

1. Сначала проверьте, что upload_max_filesize и post_max_size больше, чем 8MB

2. Какие ошибки и что в этих строках, I also get notice errors on lines 2 an 36. Is the problem with my code?

Ответ №1:

Попробуйте увеличить эти настройки в php.ini, размер по умолчанию (обычно) составляет 8 МБ

   ; Maximum allowed size for uploaded files.
  upload_max_filesize = 40M;
  ; Must be greater than or equal to upload_max_filesize
  post_max_size = 40M;
 

И после этого вам нужно перезапустить свой сервер, чтобы применить эти настройки.

Это означает, что PHP ограничивает размер вашего загружаемого файла этими 2 настройками. Возможно, вам не понадобится 40M, но вы должны увеличить его, возможно, примерно до 120% от самого большого файла, который вы хотите загрузить, что даст вам немного передышки.

Обычно это первое, что я настраиваю на своих серверах, и обычно я делаю около 80 МБ, ничего больше, и моим клиентам просто проще использовать sFTP.

Комментарии:

1. Это было оно! Спасибо большое!

Ответ №2:

Вам нужно добавить строки уведомления об ошибке

$name = $_FILES['file']['name'];

и

 if  ($_FILES['file']['size'] > 2000000){
    echo "File is too large.";
}
 

в isset (‘POST’)

 if (isset($_POST["submit"])){
  $name = $_FILES['file']['name'];
  ...
  if  ($_FILES['file']['size'] > 2000000){
    echo "File is too large.";
  }
}