#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.";
}
}