Ошибка при загрузке файла на сервер
В PHP-скрипте обработка загруженных через форму происходит через глобальный массив $_FILES , рассмотрим его содержимое:
Коды ошибок загрузки файлов
В случаи, если при загрузке файла произошла ошибка, в переменной $_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-расширение остановило загрузку файла. |
Ошибка загрузки файла на хостинге
На виртуальных хостингах обычно нет возможности изменять конфигурационный файл php.ini, в котором хранятся эти ограничения.
Но зачастую в настройках хостинга есть возможность изменять объём загружаемого файла.
Директива называется
Поэтому первым делом зайдите в настройки хостинга и поищите такую опцию.
Если ничего не нашли, то ещё можно попытаться увеличить ограничение через файл .htaccess, который расположен в корневой папке сайта
Для этого в самом начале .htaccess вставляем две строчки:
php_value post_max_size 10M
php_value upload_max_filesize 10M
Обратите внимание что post_max_size должен быть больше или равен upload_max_filesize, 10М - это 10 мегабайт, если нужно больше, ставьте больше.
Если не получается или появляется ошибка, то удаляем эти строчки и пишем в техподдержку хостинга чтобы вам увеличили объём.
А так на нормальных хостингах объём загружаемых файлов довольно большой.
Например на Джино = 50Мб.
Поэтому на нормальных хостингах такая ошибка - редкость.
Вот скриншот настроек сервера на хостинге Джино.
Если вы используете выделенный сервер, то в его панельке управления должна быть такая опция.
Если не можете найти, то сразу пишите в техподдержку.
Загрузка одного файла
Чтобы форма отправила файл, необходимо использовать только метод POST для отправки данных и добавить к тегу атрибут enctype="multipart/form-data" , который определяет способ кодирования данных формы при их отправке на сервер.
Код скрипта index.php:
Результат:
Описание значений массива $_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'] | Код ошибки, которая может возникнуть при загрузке файла. |
Максимальный размер загружаемого файла
Размер загружаемого файла можно ограничить, добавив в форму скрытое поле с максимальным размером файла :
В случае превышения размера файла в переменной $_FILES['file-1']['error'] будет ошибка с кодом « 2 ».
Настройки PHP
Обычно настройки загрузки файлов на хостинге вполне нормальные и не вызывают проблем, но есть исключения. Если не загружаются большие файлы, то скорее всего установлен лимит на размер загружаемого файла, ограничено время загрузки файла или ограничено количество одновременных загрузок.
Посмотреть установленные значения можно с помощью функции phpinfo() , в разделе «Core».
Необходимо попробовать следующие решения по порядку, пока проблема не будет устранена.
Если не удается установить подключение к веб-серверу, вы не сможете загружать файлы на сервер или с сервера.
Для большинства типов подключения можно использовать Dreamweaver, чтобы протестировать подключение. Для этого откройте настройки сервера в диалоговом окне «Настройка веб-сайта» в Dreamweaver, а затем нажмите кнопку «Тест».
В случае, если Dreamweaver не может успешно подключиться к серверу, существует вероятность, что настройки сервера отсутствуют или заданы неверно. См. документацию по Dreamweaver для получения инструкций по пошаговой настройке веб-сайта и проверьте ваши настройки.Если вы используете Dreamweaver CS4 или более раннюю версию, ознакомьтесь с документацией по Dreamweaver CS4.
Для подключения FTP, SFTP и FTPS/FTPeS можно указать корневой каталог для каждого сервера в диалоговом окне «Настройка веб-сайта».Для большинства веб-серверов требуется определить корневой каталог для загрузки файлов на сервер или с сервера
Корневой каталог – путь к папке на веб-сервере, в которой хранится индекс (например, Index.html, index.php, и т.д.) и другие публично доступные файлы и папки. Как правило, этот путь должен быть относительным для корневого каталога веб-сервера (он должен начинаться с косой черты). Например:
- /wwwroot
- /inetpub/wwwroot
- /www/users/USERNAME/wwwroot
- /public_html
- /usr/home/USERNAME/public_html
- /www/users/USERNAME/public_html
Точное название и расположение корневого каталога у различных хостинговых компаний отличается. Если вы не можете определить ваш корневой каталог, обратитесь в вашу хостинговую компанию за помощью.
Если вы используете Dreamweaver CS5.5, невозможность загрузки файлов на сайт или с сайта может быть вызвана наличием символической ссылки (иногда называемой символьной или гибкой ссылкой) в той же папке, в которую вы пытаетесь загрузить файлы. Символические ссылки по сути являются ярлыками или псевдонимами, которые указывают на файл, размещенный в другом местоположении, но могут использоваться так, как если бы этот файл уже находился в этом месте. Dreamweaver CS5.5 может неправильно интерпретировать эти символические ссылки, как если бы они являлись каталогами, и т.к. они не могут быть корректно пересчитаны, любая попытка загрузки файлов на сервер или с сервера в одном каталоге с символической ссылкой приводит к возникновению ошибки.
Чтобы найти соответствующую символическую ссылку, проверьте Журнал FTP в Dreamweaver» («Окно» > «Результаты» > «Журнал FTP») на наличие для строки, которая выглядит как в следующем примере:
< lrwxr-xr-x 1 username users 66 Jun 30 18:20 webformmailer.php ->/usr/www/stats/mailer.php
Существует два критерия, которые указывают на то, что это символическая ссылка. Первый – первая буква «l» (как в l rwxr-xr-x ) указывает на то, что это символическая ссылка. Второй – имя файла, которое будет отображаться на локальной или удаленной панели «Файлы» в Dreamweaver (в данном случае, webformmailer.php), указывает на (->) файл в другом месте (в данном случае, /usr/www/stats/mailer.php).
В случае вышеуказанного примера для решения проблемы необходимо найти символическую ссылку webformmailer.php на панели «Файлы» в Dreamweaver, а затем удалить ее. Если вам необходимо использоваться этот файл для определенного компонента вашего веб-сайта, следует также скопировать файл mailer.php из его местоположения в /usr/www/stats/ в нужный каталог.
Некоторые брандмауэры или другое программное обеспечение системы безопасности, установленное на компьютере, могут мешать приложению Dreamweaver загружать файлы на сервер или с сервера.
В большинстве случаев пользовательское программное обеспечение системы безопасности можно настраивать таким образом, чтобы разрешить сетевое взаимодействие между Dreamweaver и веб-сервером (и «входящее», и «исходящее»), и это позволит решить данную проблему. Это удобный и более рекомендуемый способ устранения данной проблемы.
Если вы не знакомы с настройкой программного обеспечения системы безопасности, а также в качестве более быстрого метода для разрешения возникшей проблемы можно включить пассивный режим работы FTP в Dreamweaver. Для этого выберите «Пассивный режим FTP» в параметрах диалогового окна «Настройка веб-сайта». В Dreamweaver CS5 и более поздних версиях данный параметр находится в разделе «Дополнительные настройки» на вкладке «Основные» (в нижней части окна, которое отображается после выбора сервера для редактирования).
См. документацию по Dreamweaver для получения инструкций по пошаговой настройке веб-сайта и найдите опцию «Пассивный режим FTP». (Если вы используете Dreamweaver CS4 или более раннюю версию, ознакомьтесь с документацией по Dreamweaver CS4.)
Если вы можете подключиться к серверу в Dreamweaver, но вам не удается загрузить файлы на сервер или с сервера, подключитесь к серверу с помощью другого клиента и попробуйте загрузить те же файлы на сервер или с сервера.
Например, при подключении к серверу через FTP или FTPS/FTPeS используйте FTP-клиент, например, FileZilla или CyberDuck. Если вы используете SFTP, используйте клиент PSFTP (PuTTY). Для подключений WebDAV используйте такие клиенты как DAV Explorer, Goliath или CyberDuck.
Если ошибку не удается устранить при использовании других клиентов, обращайтесь в вашу хостинговую компанию, к сетевому администратору или в ИТ-отдел за дальнейшей помощью.На вашем сервере могли возникнуть временные неполадки, ваша учетная запись могла быть неправильно настроена, возможно также, что требуется изменить настройки прав доступа на сервере, или могла возникнуть другая проблема, связанная с конфигурацией сервера или сети.
Некоторые веб-серверы не совместимы с настройками по умолчанию в Dreamweaver. Лучший способ определить, какие параметры необходимо использовать – обратиться к документации, предоставленной вашей хостинговой компанией, или обратиться непосредственно в хостинговую компанию для получения информации об этих настройках.
Кроме того, вы можете использовать метод исключения для определения настроек, которые наверняка совместимы с вашим сервером. Для этого необходимо выполнить следующие действия:
Откройте параметры сервера в диалоговом окне «Настройка веб-сайта». (См. документацию по Dreamweaver, чтобы ознакомиться с интерфейсом пользователя. Если вы используете Dreamweaver CS4 или более раннюю версию, ознакомьтесь с документацией по Dreamweaver CS4.)
На вкладке «Основные» в режиме редактирования сервера разверните раздел «Дополнительные настройки» в нижней части окна.
Выберите или отмените выбор одной из перечисленных опций. Например, снимите флажок «Использовать оптимизацию производительности FTP».
ПРИМЕЧАНИЕ. Настройка «Использовать прокси» относится к сетевому подключению компьютера, а не привязана к вашему веб-серверу. Выберите «Использовать прокси», если вы обычно используется прокси-сервер для подключения к Интернету или соединения с некоторыми типами сетевых ресурсов. Обратитесь к сетевому администратору или к специалисту ИТ-отдела, если вы не уверены, следует ли использовать прокси.
Повторяйте описанные действия до тех пор, пока проблема не будет устранена, или до тех пор, пока вы не попробуете каждую комбинацию параметров.
В этой статье описаны решения для ошибок, связанных с Javascript и отсутствующими файлами, возникающих при загрузке файла Adobe Muse.
Возможно, некоторые файлы на сервере имеют неверный формат или отсутствуют.
Обновите Adobe Muse до версии 2017.0.3.
Если ошибка не устранена, выполните следующие действия:
Следующее обходное решение применяется к Adobe Muse 2017.0.3 и более поздним версиям.
Предлагаемое решение
Если вы умеете редактировать файлы XML, используйте следующее предлагаемое решение.
Откройте в системе файл AppPrefs.xml.
Можно открыть файл AppPrefs.xml из следующего местоположения:
- Win: C:\Users\(имя пользователя)\AppData\Roaming\Adobe\Adobe Muse CC\2017.0
- macOS: Библиотека > Настройки > Adobe > Adobe Muse CC > 2017.0
Измените значение
При изменении
Ошибки отсутствия любого файла в любых элементах страницы, включая сторонние виджеты, также отменяются.
Рекомендуется использовать эту настройку только для вашего производственного участка, когда клиент столкнулся с ошибкой. Не следует изменять настройки AppPrefs.xml для сайтов в среде тестирования.
Также перед изменением файла XML рекомендуется попробовать следующие решения, упомянутые в таблице. Ниже приведены некоторые возможные причины и решения для этой ошибки.
Возможная причина
Решение или обходной путь
Один или несколько файлов сервера отсутствуют.
Права доступа к файлам и папкам должным образом не настроены. В системах сервера файлам и папкам назначаются права, разрешающие или запрещающие системе и пользователям выполнять те или иные действия с ними. Если для этих файлов и папок настроены неверные права, браузер не сможет получить доступ к некоторым файлам на вашем сайте.
Убедитесь в том, что права для файлов и папок заданы верно, и затем перезагрузите файл .muse.
Файлы на сервере созданы в разных версиях Adobe Muse или принадлежат разным версиям сайта. Например, версия страницы mypage.html может отличаться от версии mypage.css.
При обновлении до следующей версии Adobe Muse удаляйте все файлы с сервера и повторно загружайте их на сервер.
Очистите кэш браузера и загрузите файл .muse повторно.
При публикации более новых версий некоторых файлов серверное кэширование Business Catalyst не чистит кэш для этих файлов.
Чтобы решить проблему, обратитесь в службу поддержки Adobe.
Возможно, вы добавили на свой сайт пользовательский код или сторонний виджет. Недопустимый пользовательский код или код, конфликтующий с кодом Adobe Muse, может быть причиной этой ошибки.
Удалите пользовательский код на каждой странице и изолируйте данную проблему. Если проблема возникает на многих или на всех страницах, проверьте, нет ли недопустимого пользовательского кода на странице-шаблоне.
Эта ошибка также появляется при копировании и вставке кода без закрывающих тегов или при добавлении сложного кода к имеющемуся коду Adobe Muse.
Следует отдельно проверить наличие неверного кода в разделе «Свойства страницы» и осмотреть объекты HTML, добавленные при помощи команды «Объект» > «Вставить HTML».
Эта ошибка возникала при обновлении до версии 2015.2.
Ваш поставщик веб-хостинга не позволяет разместить на сайте все файлы для страницы.
Если при использовании команды «Опубликовать» > «Экспортировать как HTML» применяется стороннее решение FTP, возможно, не удастся загрузить все измененные файлы в приложении. Это происходит при загрузке только тех файлов, которые были изменены. Однако, другие файлы при этом также могут быть затронуты этими изменениями. Удалите все имеющиеся файлы Adobe Muse на сервере и повторно загрузите все файлы, экспортированные из Adobe Muse.
Можно также использовать команду «Опубликовать» > «FTP-сервер» в Adobe Muse. При использовании внутреннего FTP-клиента Adobe Muse распознает все измененные файлы. Adobe Muse также загружает эти файлы на сервер.
Ошибка, связанная с отсутствующими файлами, возникает даже после обновления до версии Adobe Muse 2015.2.
В Muse 2015.2.0 и более поздних версиях файлы JavaScript помещаются в очередь для загрузки, и порядок их загрузки зависит от скорости вашего Интернет-соединения. Ошибки могут появляться при загрузке конкретной страницы и отсутствовать при загрузке всех страниц — причина этому может заключаться в том, что порядок загрузки JavaScript изменяется как после кэширования объектов, так и или вследствие того, что запросы сервера просто обрабатываются в другом порядке.
$_FILES and $_POST will return empty
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:
error_log("======================================= $messageBefore");
error_log("======================================= 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 ");
>
>
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.
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:
-----
if( $_FILES [ 'userfile' ][ 'error' ]) <
// handle the error
> else <
// process
>
?>
-----
You have to do this:
-----
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.
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:
-----
$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 );
?>
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
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.
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.' ),
];
>
>
?>
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:
if( $_FILES [ "file_id" ][ "size" ] == 0 )
<
// . PROCESS ERROR
>
?>
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"]
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).
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.
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.
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).
$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" ;
?>
[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.
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
enctype="multipart/form-data" works fine
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.
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 ;)
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.
В Joomla и других CMS, вебмастера часто сталкиваются с такой проблемой. Разберёмся почему она возникает и как её решить.
Когда мы загружаем какой то файл на сайт или устанавливаем какое то расширение, то со стороны сервера есть ограничение на объём загружаемого файла. Это сделано в целях безопасности.
Ограничение на объём можно изменить в настройках сервера.
Рассмотрим разные варианты:
Ошибка загрузки файла на сервер на Денвере.
По умолчанию, на локальном сервере, под управлением Денвер, ограничение на объём загружаемых файлов равно 2 мегабайтам.
Если файл или расширение больше двух мегабайт, то загрузить/установить средствами CMS мы его не сможем.
Даже может быть что в настройках Joomla разрешён большой объём файла, но это не важно, потому что в любом случае всё зависит от ограничения на сервере.
Чтобы увеличить объём переходим в папку WebServers/usr/local/php5
Там находим файл php.ini и открываем его при помощи редактора, например NotePad++
Одновременно нажимаем CTRL + F и в появившемся окне вводим:
После чего нажимаем Enter
Это функция поиска по файлу, при помощи неё мы быстренько нашли нужную директиву, которая отвечает за ограничение на объём загружаемых файлов.
Ставьте нужное значение, например 16М, т.е. 16 мегабайт.
На локальном сервере OpenServer такой ошибки быть не должно, т.к. лимит в нём аж 100Мб!
Этого хватит для всех возможных манипуляций с загрузкой файлов.
Загрузка несколько файлов
Для загрузки сразу нескольких файлов к нужно добавить атрибут multiple , а к имени поля – [] .
Код скрипта index.php
Результат:
Как видно, структура массива разделена по свойствам, а не по файлам. Для удобства работы с циклом foreach массив $_FILES можно преобразовать:
Результат:
Читайте также: