Суперглобальный массив $_FILES встречается в работе с PHP при загрузке файлов на сервер. Помимо основных сведений о загружаемом файле, содержит сведения об ошибке загрузки в $_FILES[‘my_file’][‘error’], если она возникла. Это значение массива может содержать:
UPLOAD_ERR_OK | значение: 0; Файл был успешно загружен на сервер |
UPLOAD_ERR_INI_SIZE | значение: 1; Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini. |
UPLOAD_ERR_FORM_SIZE | значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. |
UPLOAD_ERR_PARTIAL | значение: 3; Загружаемый файл был получен только частично. |
UPLOAD_ERR_NO_FILE | значение: 4; Файл не был загружен. |
В PHP-скрипте обработка загруженных через форму происходит через глобальный массив $_FILES
, рассмотрим его содержимое:
1
Загрузка одного файла
Чтобы форма отправила файл, необходимо использовать только метод POST для отправки данных и добавить к тегу <form>
атрибут enctype="multipart/form-data"
, который определяет способ кодирования данных формы при их отправке на сервер.
<form action="/index.php" method="post" enctype="multipart/form-data">
<input type="file" name="file-1">
<input type="submit" value="Отправить">
</form>
HTML
Код скрипта index.php:
<?php
print_r($_FILES['file-1']);
PHP
Результат:
Array(
[name] => image.jpg
[type] => image/jpeg
[tmp_name] => /home/user/temp/phpjX2YXo
[error] => 0
[size] => 119303
)
Описание значений массива $_FILES
:
$_FILES['file-1']['name'] |
Оригинальное имя файла на компьютере клиента. |
$_FILES['file-1']['type'] |
Mime-тип файла, в случае, если браузер предоставил такую информацию. Этот mime-тип не проверяется на стороне PHP, так что не полагайтесь на его значение без проверки. |
$_FILES['file-1']['size'] |
Размер принятого файла в байтах. |
$_FILES['file-1']['tmp_name'] |
Временное имя, с которым принятый файл был сохранен на сервере. |
$_FILES['file-1']['error'] |
Код ошибки, которая может возникнуть при загрузке файла. |
2
Загрузка несколько файлов
Для загрузки сразу нескольких файлов к <input type="file">
нужно добавить атрибут multiple
, а к имени поля – []
.
<form action="/index.php" method="post" enctype="multipart/form-data">
<input type="file" name="file-2[]" multiple>
<input type="submit" value="Отправить">
</form>
HTML
Код скрипта index.php
<?php
print_r($_FILES['file-2']);
PHP
Результат:
Array(
[name] => Array(
[0] => image.jpg
[1] => arhive.zip
)
[type] => Array(
[0] => image/jpeg
[1] => application/zip
)
[tmp_name] => Array(
[0] => /home/user/temp/phpK3h32F
[1] => /home/user/temp/phpBrGxus
)
[error] => Array(
[0] => 0
[1] => 0
)
[size] => Array(
[0] => 119303
[1] => 6792
)
)
Как видно, структура массива разделена по свойствам, а не по файлам. Для удобства работы с циклом foreach массив $_FILES
можно преобразовать:
<?php
$files = array();
foreach($_FILES['file-2'] as $k => $l) {
foreach($l as $i => $v) {
$files[$i][$k] = $v;
}
}
$_FILES['file-2'] = $files;
print_r($_FILES);
PHP
Результат:
Array(
[0] => Array(
[name] => image.jpg
[type] => image/jpeg
[tmp_name] => /home/user/temp/phpKgSQbo
[error] => 0
[size] => 119303
)
[1] => Array(
[name] => arhive.zip
[type] => application/zip
[tmp_name] => /home/user/temp/phpVht8LS
[error] => 0
[size] => 6792
)
)
3
Максимальный размер загружаемого файла
Размер загружаемого файла можно ограничить, добавив в форму скрытое поле с максимальным размером файла <input type="hidden" name="MAX_FILE_SIZE" value="2097152">
:
<form action="/index.php" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="2097152">
<input type="file" name="file-1">
<input type="submit" value="Отправить">
</form>
HTML
В случае превышения размера файла в переменной $_FILES['file-1']['error']
будет ошибка с кодом «2
».
4
Коды ошибок загрузки файлов
В случаи, если при загрузке файла произошла ошибка, в переменной $_FILES['file']['error']
будет содержатся её код. Возможны следующие значения:
Код | Константа | Описание |
---|---|---|
0 |
UPLOAD_ERR_OK |
Ошибок не возникло, файл успешно загружен на сервер. |
1 |
UPLOAD_ERR_INI_SIZE |
Размер файла превысил максимально допустимый размер, который задан директивой upload_max_filesize |
2 |
UPLOAD_ERR_FORM_SIZE |
Размер загружаемого файла превысил значение MAX_FILE_SIZE, указанное в HTML-форме. |
3 |
UPLOAD_ERR_PARTIAL |
Загружаемый файл был получен только частично. |
4 |
UPLOAD_ERR_NO_FILE |
Файл не был загружен. |
6 |
UPLOAD_ERR_NO_TMP_DIR |
Отсутствует временная папка. |
7 |
UPLOAD_ERR_CANT_WRITE |
Не удалось записать файл на диск (возникает, когда на хостинге закончилось место). |
8 |
UPLOAD_ERR_EXTENSION |
PHP-расширение остановило загрузку файла. |
5
Настройки PHP
Обычно настройки загрузки файлов на хостинге вполне нормальные и не вызывают проблем, но есть исключения. Если не загружаются большие файлы, то скорее всего установлен лимит на размер загружаемого файла, ограничено время загрузки файла или ограничено количество одновременных загрузок.
Посмотреть установленные значения можно с помощью функции phpinfo()
, в разделе «Core».
В php.ini:
; Разрешение на загрузку файлов
file_uploads = On
; Максимальное время выполнения скрипта в секундах
max_execution_time = 60
; Максимальное потребление памяти одним скриптом
memory_limit = 64M
; Максимально допустимый размер данных отправляемых методом POST
post_max_size = 50M
; Папка для хранения файлов во время загрузки
upload_tmp_dir = home/user/temp
; Максимальный размер загружаемого файла
upload_max_filesize = 5M
; Максимально разрешённое количество одновременно загружаемых файлов
max_file_uploads = 10
В .htaccess:
# Разрешение на загрузку файлов
php_value file_uploads On
# Максимальное время выполнения скрипта в секундах
php_value max_execution_time 60
# Максимальное потребление памяти одним скриптом
php_value memory_limit 64M
# Максимально допустимый размер данных отправляемых методом POST
php_value post_max_size 50M
# Папка для хранения файлов во время загрузки
php_value upload_tmp_dir home/user/temp
# Максимальный размер загружаемого файла
php_value upload_max_filesize 5M
# Максимально разрешённое количество одновременно загружаемых файлов
php_value max_file_uploads 10
htaccess
В PHP скрипте:
<?php
// Разрешение на загрузку файлов
ini_set('file_uploads', 'On');
// Максимальное время выполнения скрипта в секундах
ini_set('max_execution_time', '60');
// Максимальное потребление памяти одним скриптом
ini_set('memory_limit', '64M');
// Максимально допустимый размер данных отправляемых методом POST
ini_set('post_max_size', '50M');
// Папка для хранения файлов во время загрузки
ini_set('upload_tmp_dir', 'home/user/temp');
// Максимальный размер загружаемого файла
ini_set('upload_max_filesize', '5M');
// Максимально разрешённое количество одновременно загружаемых файлов
ini_set('max_file_uploads', '10');
PHP
Другие публикации
Пример загрузки изображений через AJAX с помощью плагина jQuery Form Plugin.
В преведущей статье был приведен пример отправки файлов через AJAX с помощью плагина «jQuery Form Plugin». Но файлы…
В данной статье представлена упрощенная реализация загрузки изображений с превью через AJAX с сохранением в базу данных…
Если нужно запретить выполнение скриптов php в директории, например в uploads, нужно поместить туда файл .htaccess со…
AJAX позволяет отправить и получить данные без перезагрузки страницы. Например, делать проверку форм, подгружать контент и т.д. А функции JQuery значительно упрощают работу.
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS….
Объяснение сообщений об ошибках
PHP возвращает код ошибки наряду с другими
атрибутами принятого файла. Он расположен в массиве, создаваемом PHP
при загрузке файла, и может быть получен при обращении по ключу
error
. Другими словами, код ошибки можно
найти в $_FILES[‘userfile’][‘error’].
-
UPLOAD_ERR_OK
-
Значение: 0; Ошибок не возникло, файл был успешно загружен на сервер.
-
UPLOAD_ERR_INI_SIZE
-
Значение: 1; Размер принятого файла превысил максимально допустимый
размер, который задан директивой upload_max_filesize
конфигурационного файла php.ini. -
UPLOAD_ERR_FORM_SIZE
-
Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE,
указанное в HTML-форме. -
UPLOAD_ERR_PARTIAL
-
Значение: 3; Загружаемый файл был получен только частично.
-
UPLOAD_ERR_NO_FILE
-
Значение: 4; Файл не был загружен.
-
UPLOAD_ERR_NO_TMP_DIR
-
Значение: 6; Отсутствует временная папка.
-
UPLOAD_ERR_CANT_WRITE
-
Значение: 7; Не удалось записать файл на диск.
-
UPLOAD_ERR_EXTENSION
-
Значение: 8; Модуль PHP остановил загрузку файла. PHP не
предоставляет способа определить, какой модуль остановил
загрузку файла; в этом может помочь просмотр списка загруженных
модулей с помощью phpinfo().
Viktor ¶
8 years ago
Update to Adams old comment.
This is probably useful to someone.
<?php
$phpFileUploadErrors
= array(
0 => 'There is no error, the file uploaded with success',
1 => 'The uploaded file exceeds the upload_max_filesize directive in php.ini',
2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
3 => 'The uploaded file was only partially uploaded',
4 => 'No file was uploaded',
6 => 'Missing a temporary folder',
7 => 'Failed to write file to disk.',
8 => 'A PHP extension stopped the file upload.',
);
Anonymous ¶
14 years ago
[EDIT BY danbrown AT php DOT net: This code is a fixed version of a note originally submitted by (Thalent, Michiel Thalen) on 04-Mar-2009.]
This is a handy exception to use when handling upload errors:
<?php
class UploadException extends Exception
{
public function __construct($code) {
$message = $this->codeToMessage($code);
parent::__construct($message, $code);
}
private function
codeToMessage($code)
{
switch ($code) {
case UPLOAD_ERR_INI_SIZE:
$message = "The uploaded file exceeds the upload_max_filesize directive in php.ini";
break;
case UPLOAD_ERR_FORM_SIZE:
$message = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form";
break;
case UPLOAD_ERR_PARTIAL:
$message = "The uploaded file was only partially uploaded";
break;
case UPLOAD_ERR_NO_FILE:
$message = "No file was uploaded";
break;
case UPLOAD_ERR_NO_TMP_DIR:
$message = "Missing a temporary folder";
break;
case UPLOAD_ERR_CANT_WRITE:
$message = "Failed to write file to disk";
break;
case UPLOAD_ERR_EXTENSION:
$message = "File upload stopped by extension";
break;
default:
$message = "Unknown upload error";
break;
}
return $message;
}
}
// Use
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
//uploading successfully done
} else {
throw new UploadException($_FILES['file']['error']);
}
?>
adam at gotlinux dot us ¶
18 years ago
This is probably useful to someone.
<?php
array(
0=>"There is no error, the file uploaded with success",
1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini",
2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
3=>"The uploaded file was only partially uploaded",
4=>"No file was uploaded",
6=>"Missing a temporary folder"
);
?>
stephen at poppymedia dot co dot uk ¶
17 years ago
if post is greater than post_max_size set in php.ini
$_FILES and $_POST will return empty
svenr at selfhtml dot org ¶
16 years ago
Clarification on the MAX_FILE_SIZE hidden form field and the UPLOAD_ERR_FORM_SIZE error code:
PHP has the somewhat strange feature of checking multiple "maximum file sizes".
The two widely known limits are the php.ini settings "post_max_size" and "upload_max_size", which in combination impose a hard limit on the maximum amount of data that can be received.
In addition to this PHP somehow got implemented a soft limit feature. It checks the existance of a form field names "max_file_size" (upper case is also OK), which should contain an integer with the maximum number of bytes allowed. If the uploaded file is bigger than the integer in this field, PHP disallows this upload and presents an error code in the $_FILES-Array.
The PHP documentation also makes (or made - see bug #40387 - http://bugs.php.net/bug.php?id=40387) vague references to "allows browsers to check the file size before uploading". This, however, is not true and has never been. Up til today there has never been a RFC proposing the usage of such named form field, nor has there been a browser actually checking its existance or content, or preventing anything. The PHP documentation implies that a browser may alert the user that his upload is too big - this is simply wrong.
Please note that using this PHP feature is not a good idea. A form field can easily be changed by the client. If you have to check the size of a file, do it conventionally within your script, using a script-defined integer, not an arbitrary number you got from the HTTP client (which always must be mistrusted from a security standpoint).
jalcort at att dot net ¶
3 years ago
When uploading a file, it is common to visit the php.ini and set up upload_tmp_dir = /temp but in the case of some web hostess as fatcow you need to direct not only /tmp but upload_tmp_dir = /hermes/walnaweb13a/b345/moo.youruser/tmp
If not the $_FILES show you an error #6 "Missing a temporary folder
roland at REMOVE_ME dot mxchange dot org ¶
5 years ago
I have expanded @adam at gotlinux dot us's example a bit with proper UPLOAD_FOO constants and gettext support. Also UPLOAD_ERR_EXTENSION is added (was missing in his version). Hope this helps someone.
<?php
class Some {
/**
* Upload error codes
* @var array
*/
private static $upload_errors = [];
public function
__construct() {
// Init upload errors
self::$upload_errors = [
UPLOAD_ERR_OK => _('There is no error, the file uploaded with success.'),
UPLOAD_ERR_INI_SIZE => _('The uploaded file exceeds the upload_max_filesize directive in php.ini.'),
UPLOAD_ERR_FORM_SIZE => _('The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.'),
UPLOAD_ERR_PARTIAL => _('The uploaded file was only partially uploaded.'),
UPLOAD_ERR_NO_FILE => _('No file was uploaded.'),
UPLOAD_ERR_NO_TMP_DIR => _('Missing a temporary folder.'),
UPLOAD_ERR_CANT_WRITE => _('Cannot write to target directory. Please fix CHMOD.'),
UPLOAD_ERR_EXTENSION => _('A PHP extension stopped the file upload.'),
];
}
}
?>
Jeff Miner mrjminer AT gmail DOT com ¶
12 years ago
One thing that is annoying is that the way these constant values are handled requires processing no error with the equality, which wastes a little bit of space. Even though "no error" is 0, which typically evaluates to "false" in an if statement, it will always evaluate to true in this context.
So, instead of this:
-----
<?php
if($_FILES['userfile']['error']) {
// handle the error
} else {
// process
}
?>
-----
You have to do this:
-----
<?php
if($_FILES['userfile']['error']==0) {
// process
} else {
// handle the error
}
?>
-----
Also, ctype_digit fails, but is_int works. If you're wondering... no, it doesn't make any sense.
To Schoschie:
You ask the question: Why make stuff complicated when you can make it easy? I ask the same question since the version of the code you / Anonymous / Thalent (per danbrown) have posted is unnecessary overhead and would result in a function call, as well as a potentially lengthy switch statement. In a loop, that would be deadly... try this instead:
-----
<?php
$error_types = array(
1=>'The uploaded file exceeds the upload_max_filesize directive in php.ini.',
'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.',
'The uploaded file was only partially uploaded.',
'No file was uploaded.',
6=>'Missing a temporary folder.',
'Failed to write file to disk.',
'A PHP extension stopped the file upload.'
);
// Outside a loop...
if($_FILES['userfile']['error']==0) {
// process
} else {
$error_message = $error_types[$_FILES['userfile']['error']];
// do whatever with the error message
}
// In a loop...
for($x=0,$y=count($_FILES['userfile']['error']);$x<$y;++$x) {
if($_FILES['userfile']['error'][$x]==0) {
// process
} else {
$error_message = $error_types[$_FILES['userfile']['error'][$x]];
// Do whatever with the error message
}
}
// When you're done... if you aren't doing all of this in a function that's about to end / complete all the processing and want to reclaim the memory
unset($error_types);
?>
jille at quis dot cx ¶
14 years ago
UPLOAD_ERR_PARTIAL is given when the mime boundary is not found after the file data. A possibly cause for this is that the upload was cancelled by the user (pressed ESC, etc).
sysadmin at cs dot fit dot edu ¶
18 years ago
I noticed that on PHP-4.3.2 that $_FILES can also not be set if the file uploaded exceeds the limits set by upload-max-filesize in the php.ini, rather than setting error $_FILES["file"]["error"]
tyler at fishmas dot org ¶
18 years ago
In regards to the dud filename being sent, a very simple way to check for this is to check the file size as well as the file name. For example, to check the file size simple use the size attribute in your file info array:
<?php
if($_FILES["file_id"]["size"] == 0)
{
// ...PROCESS ERROR
}
?>
Tom ¶
12 years ago
Note: something that might surprise you, PHP also provides a value in the $_FILES array, if the input element has no value at all, stating an error UPLOAD_ERR_NO_FILE.
So UPLOAD_ERR_NO_FILE is not an error, but a note that the input element just had no value. Thus you can't rely on the $_FILES array to see if a file was provided. Instead you have to walk the array and check every single damn entry - which can be quite difficult since the values may be nested if you use input elements named like "foo[bar][bla]".
Seems like PHP just introduced you to yet another common pitfall.
admin at compumatter dot com ¶
3 years ago
We use this function to handle file uploads.
Since $_FILES allows for more than a single file, this loops through each file and if there's an error, it is displayed in human readable language to the error log and then returned / exited. You can adjust that to echo's if preferred:
function file_upload_test($messageBefore="CM FILE UPLOAD MESSAGE"){
global $_FILES;
# a single file limit
$upload_max_size = ini_get('upload_max_filesize');
# the combination of a batch o multiple files
$post_max_size = ini_get('post_max_size');
# array of possible fails which are retuned below in if $key=error section
$phpFileUploadErrors = array(
0 => 'There is no error, the file uploaded with success',
1 => 'Exceeds php.ini upload_max_filesize of '.$upload_max_size.'MB',
2 => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
3 => 'The uploaded file was only partially uploaded',
4 => 'No file was uploaded',
6 => 'Missing a temporary folder',
7 => 'Failed to write file to disk.',
8 => 'A PHP extension stopped the file upload.',
);
error_log("========================================");
error_log("$messageBefore");
error_log("========================================");
foreach ($_FILES['cmmediabrowsedfor'] as $key => $value) {
${$key}=$value;
error_log('$_FILES ['.$key.'] = ['.$value.']');
if(is_array($value)){
foreach ($value as $key2 => $value2) {
error_log(' > $_FILES ['.$key.']['.$key2.'] = '.$value2);
if($key=='error'){
error_log(' ******* CM Failed Upload: '.$phpFileUploadErrors[$value2]);
error_log(' Exit / Return in plugins/cm-alpha/php/images/img-create-tmp.php');
error_log(' ');
exit;
}
}
}
}
if(!file_exists($_FILES["cmmediabrowsedfor"]["tmp_name"][0]) || !is_uploaded_file($_FILES["cmmediabrowsedfor"]["tmp_name"][0])) {
error_log("NO FILE GOT UPLOADED ");
} else {
error_log("SUCCESS FILE GOT UPLOADED ");
}
}
rlerne at gmail dot com ¶
8 years ago
This updates "adam at gotlinux dot us" above and makes it version aware, and also adds newer constants to the array.
The reason we want to check the version is that the constants are not defined in earlier versions, and they appear later in the array. They would effectively overwrite the "0" index (no error) with an error message when the file actually uploaded fine.
It also drops the constant's value (0,1,2, etc) for the errors, in the likely event that they are changed later (the code should still work fine).
<?php
$upload_errors
= array(
0 => "There is no error, the file uploaded with success"
,UPLOAD_ERR_INI_SIZE => "The uploaded file exceeds the upload_max_filesize directive in php.ini"
,UPLOAD_ERR_FORM_SIZE => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
,UPLOAD_ERR_PARTIAL => "The uploaded file was only partially uploaded"
,UPLOAD_ERR_NO_FILE => "No file was uploaded"
);
if (
version_compare(PHP_VERSION, '5.0.3') >= 0)
$upload_errors[UPLOAD_ERR_NO_TMP_DIR] = "Missing a temporary folder";
if (
version_compare(PHP_VERSION, '5.1.0') >= 0)
$upload_errors[UPLOAD_ERR_CANT_WRITE] = "Failed to write to disk";
if (
version_compare(PHP_VERSION, '5.2.0') >= 0)
$upload_errors[UPLOAD_ERR_EXTENSION] = "File upload stopped by extension";
?>
belowtherim2000 at yahoo dot com ¶
15 years ago
I've been playing around with the file size limits and with respect to the post_max_size setting, there appears to be a hard limit of 2047M. Any number that you specify above that results in a failed upload without any informative error describing what went wrong. This happens regardless of how small the file you're uploading may be. On error, my page attempts to output the name of the original file. But what I discovered is that this original file name, which I maintained in a local variable, actually gets corrupted. Even my attempt to output the error code in $_FILES['uploadedfiles']['error'] returns an empty string/value.
Hopefully, this tidbit will save someone else some grief.
viseth10 at gmail dot com ¶
5 years ago
[Well just a little note. ]
That UploadException class example posted on top by anonymous is great. It works good. But there is a certain problem. You know there are two sides to generating errors.
First -> for the client side.
Second -> for the developers who will use your script
But i see only one side to generating Exceptions. ie For the developers.
Why ? Because when you generate an Exception, your script will come to an halt and do whatever you have defined in catch clause.
Now you dont want any client to see the Exception, do you ? I will not. The client will want to know what error occured in simple words they can understand instead of wanting their web app crashed if upload fails. So, dont generate exceptions. These errors should be collected and shown to client in an elegant way. That's a little advice.
Keep developing smarter.
krissv at ifi.uio.no ¶
18 years ago
When $_FILES etc is empty like Dub spencer says in the note at the top and the error is not set, that might be because the form enctype isnt sat correctly. then nothing more than maybe a http server error happens.
enctype="multipart/form-data" works fine
roger dot vermeir at nokia dot com ¶
4 years ago
Just found out that it is very important to define the
input type="hidden" name="MAX_FILE_SIZE" value=...
AFTER defining the input type="FILE" name=...
in your html/php.
If you swap them around, you will keep getting the filesize exceeded (error 2)!
Hope this helps.
Roger
Dub Spencer ¶
18 years ago
Upload doesnt work, and no error?
actually, both $_FILES and $_REQUEST in the posted to script are empty?
just see, if "post_max_size" is lower than the data you want to load.
in the apache error log, there will be an entry like "Invalid method in request". and in the access log, there will be two requests: one for the POST, and another that starts with all "----" and produces a 501.
web att lapas dott id dott lv ¶
16 years ago
1. And what about multiple file upload ? - If there is an UPLOAD_ERR_INI_SIZE error with multiple files - we can`t detect it normaly ? ...because that we have an array, but this error returns null and can`t use foreach. So, by having a multiple upload, we can`t normaly inform user about that.. we can just detect, that sizeof($_FILES["file"]["error"]) == 0 , but we can`t actualy return an error code. The max_file_size also is not an exit, becouse it refers on each file seperatly, but upload_max_filesize directive in php.ini refers to all files together. So, for example, if upload_max_filesize=8Mb , max_file_size = 7Mb and one of my files is 6.5Mb and other is 5Mb, it exeeds the upload_max_filesize - cant return an error, becouse we don`t know where to get that error.
Unfortunately we cannot get the file sizes on client side, even AJAX normaly can`t do that.
2. If in file field we paste something, like, D:whatever , then there also isn`t an error to return in spite of that no such file at all.
info at foto50 dot com ¶
15 years ago
For those reading this manual in german (and/or probably some other languages) and you miss error numbers listed here, have a look to the english version of this page ;)
Tom ¶
8 years ago
As it is common to use move_uploaded_file with file uploads, how to get it's error messages should be noted here (especially since it's not noted anywhere else in the manual).
Common code is to do something like:
if (move_uploaded_file($_FILES["file1"]["tmp_name"], $target_file)) {
echo "<P>FILE UPLOADED TO: $target_file</P>";
} else {
echo "<P>MOVE UPLOADED FILE FAILED!!</P>";
print_r(error_get_last());
}
Spectrum
Guest
-
#1
Коды ошибок $_FILES
В упор не могу найти, где расшифровываются(объясняются) Коды ошибок
error при print_r($_FILES)
Спасибо.
Макс
Старожил PHPClub
Spectrum
Guest
-
#3
Спасибо Maxim Matyukhin
как может получаться
Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)
а вот
if (isset($_FILES[‘userfile’]))
{
echo «Картинка есть»;
}
else
{
echo «Картинки нет»;
}
выводит картинка есть, или тут empty надо юзать?? Так с ней то же что то не то…..
if (empty($_FILES[‘userfile’]))
{
echo «Картинки нет»;
}
else
{
echo «Картинка есть»;
}
картинка есть как так?Вразумите
Спасибо.Maxim Matyukhin
Maxim Matyukhin
-
#4
Spectrum, мануал посмотри внимательно, как там это делается. И потом, что мешало проверять
PHP:
if ($_FILES['userfile']['error'])echo 'error';
else echo 'ok';
Массив то $_FILES[‘userfile’] у тебя по факту POST’а будет определён независимо от загруженности картинки.
PS: и ещё — обманывать нехорошо — судя по всему, ты привёл результат print_r($_FILES[‘userfile’]), а не print_r($_FILES)
Spectrum
Guest
-
#5
спасибо .
P.S. обмана нет просто вытащмл массив из phpinfo(32)
Спасибо разобрался проверять по [‘size’] надо было.
Спасибо всем.
Макс
Старожил PHPClub
-
#6
http://detail.phpclub.net/article/upload
PS
ты неверно понимаешь как работают функции [m]isset[/m] или [m]empty[/m]
Цитата из http://php.net/empty
empty() returns FALSE if var has a non-empty and non-zero value. In otherwords, «», 0, «0», NULL, FALSE, array(), var $var;, and objects with empty properties, are all considered empty. TRUE is returned if var is empty.
Ошибка NTFS File System в Windows — это не что иное, как ошибка чтения файла ntfs.sys, следствием чего является известный многим «Синий экран смерти». В любой Винде наличие такой ошибки означает следующее — присутствие проблемы в жестком диске или твердотельном накопителе. Очень редко эта ошибка появляется из-за программного сбоя после установки какой-то программы, и еще реже такая ошибка может означать физическую неисправность вашего компьютера. В зависимости от причины возникновения ошибки определяется возможность или невозможность ремонта или его тяжесть.
Почему возникает код ошибки NTFS File System?
Примерно в 67% случаев проблемы с файлом ntfs.sys проявляются после того, как был установлен новый накопитель, на котором уже установлена какая-то операционная система. Если у вас похожая ситуация, тогда это решить довольно просто — нужно всего лишь отдельно обновить и установить специальный драйвер для установленного нового накопителя.
Однако довольно часто ntfs file system ошибка в Windows, которая также обозначается кодом 0х0000024, возникает и по другим причинам. Самые распространенные из них мы перечислим:
- поврежденный жесткий диск компьютера или как минимум есть поврежденные битые сектора;
- отсутствует или чаще поврежден драйвер SCSI и/или IDE;
- нет свободной памяти в объеме жесткого диска, что нарушает нормальную работу операционной системы установленных программ;
- неправильно прошита материнская плата;
- последствия зараженного вирусами компьютера;
- повреждения разъемов у материнской платы;
- и множество других проблем.
Как исправляется ошибка NTFS File System?
Хочется предупредить сразу, иногда исправить «синий экран» может не получиться. Потому что проблема может быть «аппаратной», то есть механическая поломка «под коробкой». А это значит, что придется нести ваш ПК в ремонт.
Однако это случается довольно редко, поэтому имеет смысл сначала попробовать предложенные методы решения. Возможно, у вас код ошибки ntfs file system возник по «простой» причине, и исправить ее удастся самостоятельно. Например, если это из-за программного сбоя, системной ошибки или просто потому, что отсутствует необходимый драйвер.
Условно методы исправления ситуации можно поделить на 2 вида:
- Когда ПК включается, и Windows удается загрузиться до «Рабочего стола»;
- Когда операционная система не запускается.
В зависимости, какой случай у вас, выбирайте нужное решение. В любом случае решить вашу проблему можно будет попробовать при помощи стандартной системной утилиты — Check Disk. Данная утилита уже встроена в вашу ОС Windows, поэтому что-то дополнительно скачивать будет ненужно. Однако доступ к ней возможен только через встроенную системную консоль. Вот к ней мы и будем «прорываться».
Ошибка NTFS File System появилась, но доступ к системе есть
Если у вас загрузилась «операционка» и вы видите «Рабочий стол», но при этом у вас возникла ошибка ntfs file system, то считайте себя в числе людей, которым неплохо повезло. Потому что это случается нечасто, и чтобы решить вашу проблему, нужно будет не так много манипуляций. Итак:
- Откройте меню «Пуск» в левом нижнем углу (если у вас стандартное расположение рабочей панели);
- Найдите в представленном меню графу «Командная строка» (обязательно с правами администратора, если у вас несколько пользователей);
- Нужно вписать в консоль следующую команду: chkdsk/f/r. Впишите и нажмите «Enter»;
- Начнется довольно долгая процедура. Дождитесь, пока закончится, и отправляйте компьютер на перезагрузку.
Нет доступа к системе, Windows не загружается, а код ошибки ntfs file system есть
С одной стороны, не печальтесь, что так получилось, — вас таких большинство. Тут можно найти себе подругу на вечер индивидуалки Омска Не забудь про это вечером Но с другой стороны, вам нужно будет немного постараться. В данном случае будет несколько больше манипуляций, чтобы решить проблему:
- Нужно создать загрузочный носитель с вашей системой Windows 7, 8, 10. Подойдет как USB, так и CD-диск. Тут на ваше усмотрение.
- Теперь нужно загрузиться с установочного носителя, который вы сделали, и дойти, пока не появится окно с кнопкой «Установить».
- Нам ненужно устанавливать. Там же чуть ниже будет кнопка «Восстановление системы». Нажмите не нее.
- Перед вами откроется несколько разделов. Нас интересует раздел «Поиск и устранение неисправностей». Выбирайте его.
- Там вам нужно будет найти «Дополнительные параметры». Кликайте.
- Теперь найдите кнопку «Командная строка». Нажмите на нее.
- Откроется консоль, вам нужно будет ввести все ту же команду: chkdsk/f/r. Введите и нажмите «Enter».
- Отправьте компьютер на перезагрузку и дождитесь, пока закончится проверка жесткого диска вашего компьютера.
В большинстве случаев программа Check Disk решает ошибку ntfs file system, и «синий экран смерти» после ее использования пропадает. Но «в большинстве случаев» — это не всегда. Бывает, что данные манипуляции вам не помогают. Тогда можно попробовать следующие шаги, чтобы исправить ситуацию:
- Попробуйте войти в «Восстановление системы» и восстановиться при перезагрузке, используя точку восстановления или загрузочный носитель.
- Если до сих пор ничего не помогло, тогда переустановите Windows.
Если после переустановки ваша ошибка ntfs file system в Windows не исчезла, тогда вам нужно обратиться в специализированный ремонтный сервис.
Расшифровка 55 состояний прикладного протокола HTTP (протокол передачи гипертекста): от информационных сообщений до ошибок.
Во время запроса информации с удаленного веб-сервера может возникнуть ошибка. Тогда веб-сервер посылает в ответ код ошибки HTTP. Например 404 — Not Found (ресурс не найден).
Коды состояния HTTP состоят из трех цифр от 100 и до 510. Они делятся на следующие группы:
- Информационные (100-105).
- Успешные (200-226).
- Перенаправление (300-307).
- Ошибка клиента (400-499).
- Ошибка сервера (500-510).
Чтобы получить сведения об ошибке, введите её код в поле поиска по странице. Для этого нажмите сочетание клавиш CTRL + F и укажите номер.
100
Continue
Cервер удовлетворён начальными сведениями о запросе, клиент может продолжать пересылать заголовки. Появился в HTTP/1.1.
101
Switching Protocols
Сервер предлагает перейти на более подходящий для указанного ресурса протокол; список предлагаемых протоколов сервер обязательно указывает в поле заголовкаUpdate. Если клиента это заинтересует, то он посылает новый запрос с указанием другого протокола. Появился в HTTP/1.1.
102
Processing
Запрос принят, но на его обработку понадобится длительное время. Используется сервером, чтобы клиент не разорвал соединение из-за превышения времени ожидания. Клиент при получении такого ответа должен сбросить таймер и дожидаться следующей команды в обычном режиме. Появился в WebDAV.
200
ОК
Успешный запрос. Если клиентом были запрошены какие-либо данные, то они находятся в заголовке и/или теле сообщения. Появился в HTTP/1.0.
201
Created
В результате успешного выполнения запроса был создан новый ресурс. Сервер должен указать его местоположение в заголовке Location. Серверу рекомендуется[источник не указан 336 дней] ещё указывать в заголовке характеристики созданного ресурса (например, в поле Content-Type). Если сервер не уверен, что ресурс действительно будет существовать к моменту получения данного сообщения клиентом, то лучше использовать ответ с кодом 202. Появился в HTTP/1.0.
202
Accepted
Запрос был принят на обработку, но она не завершена. Клиенту не обязательно дожидаться окончательной передачи сообщения, так как может быть начат очень долгий процесс. Появился в HTTP/1.0.
203
Non-Authoritative Information
Аналогично ответу 200, но в этом случае передаваемая информация была взята не из первичного источника (резервной копии, другого сервера и т. д.) и поэтому может быть неактуальной. Появился в HTTP/1.1.
204
No Content
Сервер успешно обработал запрос, но в ответе были переданы только заголовки без тела сообщения. Клиент не должен обновлять содержимое документа, но может применить к нему полученные метаданные. Появился в HTTP/1.0.
205
Reset Content
Сервер обязывает клиента сбросить введённые пользователем данные. Тела сообщения сервер при этом не передаёт и документ обновлять не обязательно. Появился в HTTP/1.1.
206
Partial Content
Сервер удачно выполнил частичный GET-запрос, возвратив только часть сообщения. В заголовке Content-Range сервер указывает байтовые диапазоны содержимого. Особое внимание при работе с подобными ответами следует уделить кэшированию. Появился в HTTP/1.1. (подробнее…)
207
Multi-Status
Сервер передаёт результаты выполнения сразу нескольких независимых операций. Они помещаются в само тело сообщения в виде XML-документа с объектом multistatus. Не рекомендуется размещать в этом объекте статусы из серии 1xx из-за бессмысленности и избыточности. Появился в WebDAV.
226
IM Used
Заголовок A-IM от клиента был успешно принят и сервер возвращает содержимое с учётом указанных параметров. Введено в RFC 3229 для дополнения протокола HTTP поддержкой дельта-кодирования.
300
Multiple Choices
По указанному URI существует несколько вариантов предоставления ресурса по типу MIME, по языку или по другим характеристикам. Сервер передаёт с сообщением список альтернатив, давая возможность сделать выбор клиенту автоматически или пользователю. Появился в HTTP/1.0.
301
Moved Permanently
Запрошенный документ был окончательно перенесен на новый URI, указанный в поле Location заголовка. Некоторые клиенты некорректно ведут себя при обработке данного кода. Появился в HTTP/1.0.
302
Found, Moved Temporarily
Запрошенный документ временно доступен по другому URI, указанному в заголовке в поле Location. Этот код может быть использован, например, приуправляемом сервером согласовании содержимого. Некоторые клиенты некорректно ведут себя при обработке данного кода. Введено в HTTP/1.0.
303
See Other
Документ по запрошенному URI нужно запросить по адресу в поле Location заголовка с использованием метода GET несмотря даже на то, что первый запрашивался иным методом. Этот код был введён вместе с 307-ым для избежания неоднозначности, чтобы сервер был уверен, что следующий ресурс будет запрошен методом GET. Например, на веб-странице есть поле ввода текста для быстрого перехода и поиска. После ввода данных браузер делает запрос методом POST, включая в тело сообщения введённый текст. Если обнаружен документ с введённым названием, то сервер отвечает кодом 303, указав в заголовке Location его постоянный адрес. Тогда браузер гарантировано его запросит методом GET для получения содержимого. В противном случае сервер просто вернёт клиенту страницу с результатами поиска. Введено в HTTP/1.1.
304
Not Modified
Сервер возвращает такой код, если клиент запросил документ методом GET, использовал заголовок If-Modified-Since или If-None-Match и документ не изменился с указанного момента. При этом сообщение сервера не должно содержать тела. Появился в HTTP/1.0.
305
Use Proxy
Запрос к запрашиваемому ресурсу должен осуществляться через прокси-сервер, URI которого указан в поле Location заголовка. Данный код ответа могут использовать только исходные HTTP-сервера (не прокси). Введено в HTTP/1.1.
306
(зарезервировано)
использовавшийся раньше код ответа, в настоящий момент зарезервирован. Упомянут в RFC 2616 (обновление HTTP/1.1).
307
Temporary Redirect
Запрашиваемый ресурс на короткое время доступен по другому URI, указанный в поле Location заголовка. Этот код был введён вместе с 303 вместо 302-го для избежания неоднозначности. Введено в RFC 2616 (обновление HTTP/1.1).
400
Bad Request
Сервер обнаружил в запросе клиента синтаксическую ошибку. Появился в HTTP/1.0.
401
Unauthorized
Для доступа к запрашиваемому ресурсу требуется аутентификация. В заголовке ответ должен содержать поле WWW-Authenticate с перечнем условий аутентификации. Клиент может повторить запрос, включив в заголовок сообщения поле Authorization с требуемыми для аутентификации данными.
402
Payment Required
Предполагается использовать в будущем. В настоящий момент не используется. Этот код предусмотрен для платных пользовательских сервисов, а не для хостинговыхкомпаний. Имеется в виду, что эта ошибка не будет выдана хостинговым провайдером в случае просроченной оплаты его услуг. Зарезервирован, начиная с HTTP/1.1.
403
Forbidden
Сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу. Если для доступа к ресурсу требуется аутентификация средствами HTTP, то сервер вернёт ответ 401 или 407 при использовании прокси. В противном случае ограничения были заданы администратором сервера или разработчиком веб-приложения и могут быть любыми в зависимости от возможностей используемого программного обеспечения. В любом случае клиенту следует сообщить причины отказа в обработке запроса. Наиболее вероятными причинами ограничения может послужить попытка доступа к системным ресурсам веб-сервера (например, файлам .htaccess или .htpasswd) или к файлам, доступ к которым был закрыт с помощью конфигурационных файлов, требование аутентификации не средствами HTTP, например, для доступа к системе управления содержимым или разделу для зарегистрированных пользователей либо сервер не удовлетворён IP-адресом клиента, например, при блокировках. Появился в HTTP/1.0.
404
Not Found
Самая распространенная ошибка при пользовании Интернетом, основная причина — ошибка в написании адреса Web-страницы. Сервер понял запрос, но не нашёл соответствующего ресурса по указанному URI. Если серверу известно, что по этому адресу был документ, то ему желательно использовать код 410. Ответ 404 может использоваться вместо 403, если требуется тщательно скрыть от посторонних глаз определённые ресурсы. Появился в HTTP/1.0.
405
Method Not Allowed
Указанный клиентом метод нельзя применить к текущему ресурсу. В ответе сервер должен указать доступные методы в заголовке Allow, разделив их запятой. Эту ошибку сервер должен возвращать, если метод ему известен, но он не применим именно к указанному в запросе ресурсу, если же указанный метод не применим на всём сервере, то клиенту нужно вернуть код 501 (Not Implemented). Появился в HTTP/1.1.
406
Not Acceptable
Запрошенный URI не может удовлетворить переданным в заголовке характеристикам. Если метод был не HEAD, то сервер должен вернуть список допустимых характеристик для данного ресурса. Появился в HTTP/1.1.
407
Proxy Authentication Required
Ответ аналогичен коду 401 за исключением того, что аутентификация производится для прокси-сервера. Механизм аналогичен идентификации на исходном сервере. Появился в HTTP/1.1.
408
Request Timeout
Время ожидания сервером передачи от клиента истекло. Клиент может повторить аналогичный предыдущему запрос в любое время. Например, такая ситуация может возникнуть при загрузке на сервер объёмного файла методом POST или PUT. В какой-то момент передачи источник данных перестал отвечать, например, из-за повреждения компакт-диска или потеря связи с другим компьютером в локальной сети. Пока клиент ничего не передаёт, ожидая от него ответа, соединение с сервером держится. Через некоторое время сервер может закрыть соединение со своей стороны, чтобы дать возможность другим клиентам сделать запрос. Этот ответ не возвращается, когда клиент принудительно остановил передачу по команде пользователя или соединение прервалось по каким-то иным причинам, так как ответ уже послать невозможно. Появился в HTTP/1.1.
409
Conflict
Запрос не может быть выполнен из-за конфликтного обращения к ресурсу. Такое возможно, например, когда два клиента пытаются изменить ресурс с помощью метода PUT.Появился в HTTP/1.1.
410
Gone
Такой ответ сервер посылает, если ресурс раньше был по указанному URL, но был удалён и теперь недоступен. Серверу в этом случае неизвестно и местоположение альтернативного документа, например, копии). Если у сервера есть подозрение, что документ в ближайшее время может быть восстановлен, то лучше клиенту передать код 404. Появился в HTTP/1.1.
411
Length Required
Для указанного ресурса клиент должен указать Content-Length в заголовке запроса. Без указания этого поля не стоит делать повторную попытку запроса к серверу по данному URI. Такой ответ естественен для запросов типа POST и PUT. Например, если по указанному URI производится загрузка файлов, а на сервере стоит ограничение на их объём. Тогда разумней будет проверить в самом начале заголовок Content-Length и сразу отказать в загрузке, чем провоцировать бессмысленную нагрузку, разрывая соединение, когда клиент действительно пришлёт слишком объёмное сообщение. Появился в HTTP/1.1.
412
Precondition Failed
Возвращается, если ни одно из условных полей заголовка[неизвестный термин] запроса не было выполнено. Появился в HTTP/1.1.
413
Request Entity Too Large
Возвращается в случае, если сервер отказывается обработать запрос по причине слишком большого размера тела запроса. Сервер может закрыть соединение, чтобы прекратить дальнейшую передачу запроса. Если проблема временная, то рекомендуется в ответ сервера включить заголовок Retry-After с указанием времени, по истечении которого можно повторить аналогичный запрос. Появился в HTTP/1.1.
414
Request-URL Too Long
Сервер не может обработать запрос из-за слишком длинного указанного URL. Такую ошибку можно спровоцировать, например, когда клиент пытается передать длинные параметры через метод GET, а не POST. Появился в HTTP/1.1.
415
Unsupported Media Type
По каким-то причинам сервер отказывается работать с указанным типом данных при данном методе. Появился в HTTP/1.1.
416
Requested Range Not Satisfiabl
В поле Range заголовка запроса был указан диапазон за пределами ресурса и отсутствует поле If-Range. Если клиент передал байтовый диапазон, то сервер может вернуть реальный размер в поле Content-Range заголовка. Данный ответ не следует использовать при передаче типа multipart/byteranges[источник не указан 336 дней]. Введено в RFC 2616 (обновление HTTP/1.1).
417
Expectation Failed
По каким-то причинам сервер не может удовлетворить значению поля Expect заголовка запроса. Введено в RFC 2616 (обновление HTTP/1.1).
422
Unprocessable Entity
Сервер успешно принял запрос, может работать с указанным видом данных, в теле запроса XML-документ имеет верный синтаксис, но имеется какая-то логическая ошибка, из-за которой невозможно произвести операцию над ресурсом. Введено в WebDAV.
423
Locked
Целевой ресурс из запроса заблокирован от применения к нему указанного метода. Введено в WebDAV.
424
Failed Dependency
Реализация текущего запроса может зависеть от успешности выполнения другой операции. Если она не выполнена и из-за этого нельзя выполнить текущий запрос, то сервер вернёт этот код. Введено в WebDAV.
425
Unordered Collection —
Посылается, если клиент послал запрос, обозначив положение в неотсортированной коллекции или используя порядок следования элементов, отличный от серверного[уточнить]. Введено в черновике по WebDAV Advanced Collections Protocol[14].
426
Upgrade Required
Сервер указывает клиенту на необходимость обновить протокол. Заголовок ответа должен содержать правильно сформированные поля Upgrade и Connection. Введено вRFC 2817 для возможности перехода к TLS посредством HTTP.
449
Retry With
Возвращается сервером, если для обработки запроса от клиента поступило недостаточно информации. При этом в заголовок ответа помещается поле Ms-Echo-Request. Введено корпорацией Microsoft для WebDAV. В настоящий момент как минимум используется программой Microsoft Money.
456
Unrecoverable Error
Возвращается сервером, если обработка запроса вызывает некорректируемые сбои в таблицах баз данных[источник не указан 336 дней]. Введено корпорацией Microsoftдля WebDAV.
500
Internal Server Error
Любая внутренняя ошибка сервера, которая не входит в рамки остальных ошибок класса. Появился в HTTP/1.0.
501
Not Implemented
Сервер не поддерживает возможностей, необходимых для обработки запроса. Типичный ответ для случаев, когда сервер не понимает указанный в запросе метод. Если же метод серверу известен, но он не применим к данному ресурсу, то нужно вернуть ответ 405. Появился в HTTP/1.0.
502
Bad Gateway
Сервер, выступая в роли шлюза или прокси-сервера, получил недействительное ответное сообщение от вышестоящего сервера. Появился в HTTP/1.0.
503
Service Unavailable
Сервер временно не имеет возможности обрабатывать запросы по техническим причинам (обслуживание, перегрузка и прочее). В поле Retry-After заголовка сервер может указать время, через которое клиенту рекомендуется повторить запрос. Хотя во время перегрузки очевидным кажется сразу разрывать соединение, эффективней может оказаться установка большого значения поля Retry-After для уменьшения частоты избыточных запросов. Появился в HTTP/1.0.
504
Gateway Timeout
Сервер в роли шлюза или прокси-сервера не дождался ответа от вышестоящего сервера для завершения текущего запроса. Появился в HTTP/1.1.
505
HTTP Version Not Supported
Сервер не поддерживает или отказывается поддерживать указанную в запросе версию протокола HTTP. Появился в HTTP/1.1.
506
Variant Also Negotiates
В результате ошибочной конфигурации выбранный вариант указывает сам на себя, из-за чего процесс связывания прерывается. Экспериментальное. Введено в RFC 2295 для дополнения протокола HTTP технологией Transparent Content Negotiation.
507
Insufficient Storage
Не хватает места для выполнения текущего запроса. Проблема может быть временной. Введено в WebDAV.
509
Bandwidth Limit Exceeded
Используется при превышении веб-площадкой отведённого ей ограничения на потребление трафика. В данном случае владельцу площадки следует обратиться к своему хостинг-провайдеру. В настоящий момент данный код не описан ни в одном RFC и используется только модулем «bw/limited», входящим в панель управления хостингом cPanel, где и был введён.
510
Not Extended
На сервере отсутствует расширение, которое желает использовать клиент. Сервер может дополнительно передать информацию о доступных ему расширениях. Введено в RFC 2774 для дополнения протокола HTTP поддержкой расширений.
PHP возвращает код ошибки наряду с другими
атрибутами принятого файла. Он расположен в массиве, создаваемом PHP
при загрузке файла, и может быть получен при обращении по ключу
error. Говоря другими словами, код ошибки можно
найти в переменной $_FILES[‘userfile’][‘error’].
-
UPLOAD_ERR_OK
-
Значение: 0; Ошибок не возникло, файл был успешно загружен на сервер.
-
UPLOAD_ERR_INI_SIZE
-
Значение: 1; Размер принятого файла превысил максимально допустимый
размер, который задан директивой upload_max_filesize
конфигурационного файла php.ini. -
UPLOAD_ERR_FORM_SIZE
-
Значение: 2; Размер загружаемого файла превысил значение MAX_FILE_SIZE,
указанное в HTML-форме. -
UPLOAD_ERR_PARTIAL
-
Значение: 3; Загружаемый файл был получен только частично.
-
UPLOAD_ERR_NO_FILE
-
Значение: 4; Файл не был загружен.
-
UPLOAD_ERR_NO_TMP_DIR
-
Значение: 6; Отсутствует временная папка. Добавлено в PHP 5.0.3.
-
UPLOAD_ERR_CANT_WRITE
-
Значение: 7; Не удалось записать файл на диск. Добавлено в PHP 5.1.0.
-
UPLOAD_ERR_EXTENSION
-
Значение: 8; PHP-расширение остановило загрузку файла. PHP не
предоставляет способа определить какое расширение остановило
загрузку файла; в этом может помочь просмотр списка загруженных
расширений из phpinfo(). Добавлено в PHP 5.2.0.
Вернуться к: Загрузка файлов на сервер