Php страница из нескольких файлов. Пример загрузки файлов на сервер (upload) на языке php

20.02.2024 Photoshop

Наверняка, Вы часто загружали различные файлы на сайты . Например, загружали аватары на форуме , фотографии в социальных сетях, различные видеоролики на видеохостинги, просто файлы на файлообменники. И вот в этой статье Вы узнаете, как загрузить файлы на сервер в PHP . Именно через PHP в большинстве случаев это и реализуют.

Первым делом, что нужно усвоить - это то, что сама HTML-форма , в которую подставляется файл должна быть не совсем обычной, вот пример HTML-кода такой формы:





Ключевой момент здесь - это атрибут "enctype " со значением "multipart/form-data ". Без него ничего работать не будет.

", в котором мы ещё загружать файл не будем, а пройдёмся немного по различным важным моментам, которые надо обязательно учитывать, иначе может пострадать безопасность:

print_r($_FILES);
?>

В результате, Вы увидите содержимое глобального двумерного массива $_FILES :

  • name - имя загружаемого файла.
  • type - MIME-type загружаемого файла. Это, пожалуй, самый важный параметр для обеспечения безопасности. И всегда при приёме файлов необходимо проверять MIME-type , иначе проблем не оберётесь. В следующей статье мы поговорим об этом более детально.
  • tmp_name - физический путь к временному файлу. Именно в это место и помещается файл, а уже потом мы его переносим в другое место. Фактически, файл уже загружен, а нам лишь надо его переместить в нужную папку на сервере.
  • error - код ошибки. Если 0 , то ошибок нет.
  • size - размер загружаемого файла. Вот это тоже частоиспользуемая опция, и её также надо проверять, чтобы ограничить размер загружаемых файлов . Безусловно, самим сервером этот размер ограничен, однако, для всяких картинок, этот размер явно завышен (как правило, он 10 МБ ).

И все эти параметры присутствуют для каждого загружаемого файла (каждые из которых представляют собой массив в двумерном массиве $_FILES ).

Теперь давайте уже закончим с загрузкой файлов на сервер в PHP , и для этого напишем такой код (""):

$uploadfile = "images/".$_FILES["somename"]["name"];
move_uploaded_file($_FILES["somename"]["tmp_name"], $uploadfile);
?>

То есть вначале мы задаём путь к загружаемому файлу на сервере. Здесь мы хотим поместить файл в директорию "images " с тем же именем, что и было раньше у файла. А функцией move_uploaded_file() мы перемещаем файл в выбранную нами директорию из его временного хранилища.

Однако, обратите внимание, это очень важно! Так использовать код ни в коем случае нельзя, иначе Вашему сайту будет угрожать серьёзная опасность! Фактически, на данный момент может быть загружено абсолютно всё, что угодно: любые исполняемые файлы, скрипты, HTML-страницы и другие весьма опасные вещи. Поэтому обязательно надо проверять загружаемые файлы на сервер очень тщательно. И вот этим мы и займёмся в следующей статье. Поскольку тема очень важная, то я советую Вам подписаться на обновления, чтобы не пропустить эту статью.

Но в начале я бы хотел сказать пару слов о том, как же происходит загрузка файлов.

Для этого нам понадобится html форма с полем ввода типа . Кроме того, для передачи файлов на сервер необходимо форме установить тип multipart . Для этого в качестве параметра enctype указывается значение multipart/form-data .

После того, как на html страничке мы разместим форму с полем в окне браузера отобразится поле с возможностью выбрать файл на локальном компьютере.

После того, как пользователь выберет нужный файл и нажмет кнопку «Загрузить» форма передаст данные php скрипту на сервер, который указан в action формы. Если action формы пустой, то данные будут переданы тому же файлу, на котором находится форма. Вся информация о загружаемом файле помещается в массив $ _FILES . Нам лишь остается извлечь эту информацию и переместить файл в необходимое нам место.

Прежде, чем приступить к написанию скрипта обработки multipart-формы , нужно отредактировать файл конфигурации php.ini , чтобы разрешить загрузку файлов на сервер.

Конфигурационный файл PHP php.ini имеет три параметра, связанные с загрузкой файлов на сервер:

  • file_uploads = On - разрешает загрузку файлов на сервер по протоколу HTTP;
  • upoad_tmp_dir = /tmp - устанавливает каталог для временного хранения загруженных файлов;
  • upload_max_filesize = 2M - устанавливает максимальный объем загружаемых файлов.

Итак, создайте новый файл с именем upload.php и скопируйте в него следующий код.

Если внимательно посмотреть на форму, то Вы увидите скрытое поле

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

После того как пользователь выбрал файл и нажал на кнопку «Загрузить», вся информация о файле, как упоминалось ранее, помещается в массив $ _FILES, а сам файл помещается во временный каталог на сервере, который указан в в php.ini.

Так как поле file называлось name="uploadFile" , то массив $ _FILES будет содержать ассоциативный массив с ключом "uploadFile" .

  • $_FILES[" uploadFile "]["name"] - имя файла до его отправки на сервер, например, pict.gif;
  • $_FILES[" uploadFile "]["size"] - размер принятого файла в байтах;
  • $_FILES[" uploadFile "]["type"] - MIME-тип принятого файла (если браузер смог его определить), например: image/gif, image/png, image/jpeg, text/html;
  • $_FILES[" uploadFile "]["tmp_name"] - содержит имя файла во временном каталоге, например: /tmp/phpV3b3qY;
  • $_FILES[" uploadFile "]["error"] - Код ошибки, которая может возникнуть при загрузке файла.

После завершения работы скрипта, временный файл будет удален. Это означает, что мы должны его скопировать в другое место до завершения работы скрипта.

Итак, с алгоритмом разобрались! Теперь давайте взглянем на код.

Первым делом мы проверяем была ли нажата кнопка submit.

If(isset($_POST["upload"])) { }

If(is_uploaded_file($_FILES["uploadFile"]["tmp_name"])) { Выполняем действие над файлом } else { echo "Файл не загружен"; }

Если файл был загружен через HTTP POST, то далее мы его перемещаем из временного каталога в нужный нам каталог. Это делается при помощи функции move_uploaded_file, которая принимает два параметра: имя файла для загрузки и путь куда будет перемещен файл. В случае успешного перемещения файла, данная функция возвратит true, в противном случае -false.

If(move_uploaded_file($_FILES["uploadFile"]["tmp_name"], $uploadedFile)) { echo Файл загружен; } else { echo Во время загрузки файла произошла ошибка; }

В нашем случае в качестве имени файла выступает имя временного файла на сервере - $_FILES["uploadFile"]["tmp_name"], а в качестве каталога, куда будет перемещен файл - переменная $uploadedFile, которая было объявлена выше в скрипте и содержит новое место хранения файла.

$folder = "path/to/folder/"; $uploadedFile = $folder. basename($_FILES["uploadFile"]["name"]);

Из своего опыта могу сказать, что хранить оригинальное название файла на сервере не стоит, поэтому его можно переименовать. Для этого сгенерируем случайное название для нашего файла и функция move_uploaded_file() переместит и переименует наш файл:

// Получаем расширение файла $file_ext = strtolower(strrchr($_FILES["uploadFile"]["name"],".")); // Генерируем случайное число $file_name = uniqid(rand(10000,99999)); // Формируем путь на сервере $uploadedFile = $folder.$file_name.$file_ext;

Ну и напоследок приведу список возможных ошибок, которые возникают во время загрузки файлов на сервер. Напоминаю, что код ошибки хранится в переменной $_FILES[" uploadFile "]["error"]:

  • 0- Ошибок не возникало, файл был успешно загружен на сервер.
  • 1- Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла php.ini..
  • 2- Размер загружаемого файла превысил значение MAX_FILE_SIZE , указанное в HTML-форме.
  • 3- Загружаемый файл был получен только частично.
  • 4- Файл не был загружен.
  • 6- Нет временную папку.
  • 7- Сбой при записи файлов на диск.

Как видите, организовать загрузку файлов на сервер не так уж и сложно. Сложнее обеспечить необходимый уровень безопасности, так как загрузка файлов на сервер может использоваться злоумышленниками для атаки на сервер.

При помощи нашего скритпа злоумышленник сможет загружать произвольные файлы на сервер, к примеру, он сможет закачать на сервер php-скрипт, который рекурсивно сможет удалить все ваши файлы на сервере или PHP-shell, так что если вы пишите свой загрузчик файлов, то к этому делу надо подойти серьезно, ничего не упустив.

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

Данная возможность позволяет загружать как текстовые, так и бинарные файлы. С помощью PHP-функций аутентификации и работы с файлами вы имеете полный контроль над тем, кому разрешено загружать файлы и что делать с файлом после его загрузки.

PHP способен получать загруженные файлы из любого браузера, совместимого со стандартом RFC-1867.

Также следует заметить, что PHP поддерживает загрузку файлов методом PUT, который используется в клиентах Netscape Composer и W3C Amaya . Для получения более детальной документации обратитесь к разделу поддержка метода PUT .

Пример #1 Форма для загрузки файлов

Страница для загрузки файлов может быть реализована при помощи специальной формы, которая выглядит примерно так:

Отправить этот файл:

В приведенном выше примере __URL__ необходимо заменить ссылкой на PHP-скрипт.

Скрытое поле MAX_FILE_SIZE (значение необходимо указывать в байтах) должно предшествовать полю для выбора файла, и его значение является максимально допустимым размером принимаемого файла в PHP. Рекомендуется всегда использовать эту переменную, так как она предотвращает тревожное ожидание пользователей при передаче огромных файлов, только для того, чтобы узнать, что файл слишком большой и передача фактически не состоялась. Имейте в виду, что обойти это ограничение на стороне браузера достаточно просто, следовательно, вы не должны полагаться на то, что все файлы большего размера будут блокированы при помощи этой возможности. Это по большей части удобная возможность для пользователей клиентской части вашего приложения. Однако настройки PHP (на сервере) касательно максимального размера обойти невозможно.

Замечание :

Также следует убедиться, что форма загрузки имеет атрибут enctype="multipart/form-data" , в противном случае загрузка файлов на сервер не произойдет.

Оригинальное имя файла на компьютере клиента.

$_FILES["userfile"]["type"]

Mime-тип файла, в случае, если браузер предоставил такую информацию. В качестве примера можно привести "image/gif" . Этот mime-тип не проверяется на стороне PHP, так что не полагайтесь на его значение без проверки.

$_FILES["userfile"]["size"]

Размер в байтах принятого файла.

$_FILES["userfile"]["tmp_name"]

Временное имя, с которым принятый файл был сохранен на сервере.

$_FILES["userfile"]["error"]

По окончанию работы скрипта, если загруженный файл не был переименован или перемещен, он будет автоматически удален из временной папки.

Изображения:

foreach ($_FILES [ "pictures" ][ "error" ] as $key => $error ) {
if ($error == UPLOAD_ERR_OK ) {
$tmp_name = $_FILES [ "pictures" ][ "tmp_name" ][ $key ];
// basename() может спасти от атак на файловую систему;
// может понадобиться дополнительная проверка/очистка имени файла
$name = basename ($_FILES [ "pictures" ][ "name" ][ $key ]);
move_uploaded_file ($tmp_name , "data/ $name " );
}
}
?>

Полоса прогресса загрузки файлов может быть реализована с помощью "отслеживания прогресса загрузки файлов с помощью сессий ".

Use Psr \ Http \ Message \ UploadedFileInterface ;
use Zend \ Diactoros \ ServerRequestFactory ;

$request = ServerRequestFactory :: fromGlobals ();

if ($request -> getMethod () !== "POST" ) {
http_response_code (405 );
exit("Use POST method." );
}

$uploaded_files = $request -> getUploadedFiles ();

if (
!isset($uploaded_files [ "files" ][ "x" ][ "y" ][ "z" ]) ||
! $uploaded_files [ "files" ][ "x" ][ "y" ][ "z" ] instanceof UploadedFileInterface
) {
http_response_code (400 );
exit("Invalid request body." );
}

$file = $uploaded_files [ "files" ][ "x" ][ "y" ][ "z" ];

if ($file -> getError () !== UPLOAD_ERR_OK ) {
);
}

$file -> moveTo ("/path/to/new/file" );

?>

10 years ago

I think the way an array of attachments works is kind of cumbersome. Usually the PHP guys are right on the money, but this is just counter-intuitive. It should have been more like:

Array
=> Array
=> facepalm.jpg
=> image/jpeg
=> /tmp/phpn3FmFr
=> 0
=> 15476
)

=> Array
=>
=>
=>
=> 4
=>
)

and not this
Array
=> Array
=> facepalm.jpg
=>
)

=> Array
=> image/jpeg
=>
)

=> Array
=> /tmp/phpn3FmFr
=>
)

=> Array
=> 0
=> 4
)

=> Array
=> 15476
=> 0
)

Anyways, here is a fuller example than the sparce one in the documentation above:

foreach ($_FILES [ "attachment" ][ "error" ] as $key => $error )
{
$tmp_name = $_FILES [ "attachment" ][ "tmp_name" ][ $key ];
if (! $tmp_name ) continue;

$name = basename ($_FILES [ "attachment" ][ "name" ][ $key ]);

If ($error == UPLOAD_ERR_OK )
{
if (move_uploaded_file ($tmp_name , "/tmp/" . $name ))
$uploaded_array .= "Uploaded file "" . $name . "".
\n" ;
else
$errormsg .= "Could not move uploaded file "" . $tmp_name . "" to "" . $name . ""
\n" ;
}
else $errormsg .= "Upload error. [" . $error . "] on file "" . $name . ""
\n" ;
}
?>

3 years ago

The documentation doesn"t have any details about how the HTML array feature formats the $_FILES array.

Example $_FILES array:

For single file -

Array
=> Array
=> sample-file.doc
=> application/msword
=> /tmp/path/phpVGCDAJ
=> 0
=> 0
)

Multi-files with HTML array feature -

Array
=> Array
=> Array
=> sample-file.doc
=> sample-file.doc
)

=> Array
=> application/msword
=> application/msword
)

=> Array
=> /tmp/path/phpVGCDAJ
=> /tmp/path/phpVGCDAJ
)

=> Array
=> 0
=> 0
)

=> Array
=> 0
=> 0
)

The problem occurs when you have a form that uses both single file and HTML array feature. The array isn"t normalized and tends to make coding for it really sloppy. I have included a nice method to normalize the $_FILES array.

Function normalize_files_array ($files = ) {

$normalized_array = ;

Foreach($files as $index => $file ) {

If (! is_array ($file [ "name" ])) {
$normalized_array [ $index ] = $file ;
continue;
}

Foreach($file [ "name" ] as $idx => $name ) {
$normalized_array [ $index ][ $idx ] = [
"name" => $name ,
"type" => $file [ "type" ][ $idx ],
"tmp_name" => $file [ "tmp_name" ][ $idx ],
"error" => $file [ "error" ][ $idx ],
"size" => $file [ "size" ][ $idx ]
];
}

Return $normalized_array ;

?>

The following is the output from the above method.

Array
=> Array
=> Array
=> sample-file.doc
=> application/msword
=> /tmp/path/phpVGCDAJ
=> 0
=> 0
)

=> Array
=> Array
=> sample-file.doc
=> application/msword
=> /tmp/path/phpVGCDAJ
=> 0
=> 0
)

=> Array
=> sample-file.doc
=> application/msword
=> /tmp/path/phpVGCDAJ
=> 0
=> 0
)

10 years ago

Also note that since MAX_FILE_SIZE hidden field is supplied by the browser doing the submitting, it is easily overridden from the clients" side. You should always perform your own examination and error checking of the file after it reaches you, instead of relying on information submitted by the client. This includes checks for file size (always check the length of the actual data versus the reported file size) as well as file type (the MIME type submitted by the browser can be inaccurate at best, and intentionally set to an incorrect value at worst).

3 years ago

For clarity; the reason you would NOT want to replace the example script with
$uploaddir = "./";
is because if you have no coded file constraints a nerd could upload a php script with the same name of one of your scripts in the scripts directory.

Given the right settings and permissions php-cgi is capable of replacing even php files.

Imagine if it replaced the upload post processor file itself. The next "upload" could lead to some easy exploits.

Even when replacements are not possible; uploading an .htaccess file could cause some problems, especially if it is sent after the nerd throws in a devious script to use htaccess to redirect to his upload.

There are probably more ways of exploiting it. Don"t let the nerds get you.

More sensible to use a fresh directory for uploads with some form of unique naming algorithm; maybe even a cron job for sanitizing the directory so older files do not linger for too long.

2 years ago

I have found it useful to re-order the multidimensional $_FILES array into a more intuitive format, as proposed by many other developers already.

Unfortunately, most of the proposed functions are not able to re-order the $_FILES array when it has more than 1 additional dimension.

Therefore, I would like to contribute the function below, which is capable of meeting the aforementioned requirement:

function get_fixed_files () {
$function = function($files , $fixed_files = array(), $path = array()) use (& $function ) {
foreach ($files as $key => $value ) {
$temp = $path ;
$temp = $key ;

If (is_array ($value )) {
$fixed_files = $function ($value , $fixed_files , $temp );
} else {
$next = array_splice ($temp , 1 , 1 );
$temp = array_merge ($temp , $next );

$new = & $fixed_files ;

Foreach ($temp as $key ) {
$new = & $new [ $key ];
}

$new = $value ;
}
}

Return $fixed_files ;
};

Return $function ($_FILES );
}
?>

Side note: the unnamed function within the function is used to avoid confusion regarding the arguments necessary for the recursion within the function, for example when viewing the function in an IDE.

Приложение для загрузки файлов на сервер представляет собой HTML-форму (upload.html) и скрипт upload.php для ее обработки.

Замечание: Вы можете загрузить промышленную версию системы загрузки файлов на сервер из раздела . Система позволит вам не только загрузить файл на сервер, но и изменить его размер, фон и др.

Код формы (upload.html)

Форма для загрузки файлов



Код скрипта обработки формы (upload.php)

Результат загрузки файла 1024 * 3 * 1024 ) { echo (); exit; } // Проверяем загружен ли файл if(is_uploaded_file ($_FILES [ "filename" ][ "tmp_name" ])) { // Если файл загружен успешно, перемещаем его // из временной директории в конечную move_uploaded_file ($_FILES [ "filename" ][ "tmp_name" ], "/path/to/file/" . $_FILES [ "filename" ][ "name" ]); } else { echo("Ошибка загрузки файла" ); } ?>

Атрибут entype формы определяет вид кодировки, которую браузер применяет к параметрам формы. Для того чтобы отправка файлов на сервер действовала, атрибуту entype необходимо присвоить значение multipart/form-data. По умолчанию этот атрибут имеет значение application/x-www-form-urlencoded.

Элемент ввода этой формы должен иметь тип file.

После того, как получен HTTP-запрос, содержимое загруженного файла записывается во временный файл, который создается в каталоге сервера, заданном по умолчанию для временных файлов, если другой каталог не задан в файле php.ini (директива upload_tmp_dir).

Характеристики загруженного файла доступны через двумерный массив $_FILES.

Cкрипт upload.php загружает файл на сервер и копирует его в каталог /path/to/file/.

В некоторых случаях требуется ограничить размер файла, который может быть загружен на сервер. К примеру, чтобы разрешить загрузку на сервер только файлов с размером не более 3 Мбайт, в приведенном скрипте содержится код:

1024 * 3 * 1024 ) { echo("Размер файла превышает три мегабайта" ); exit; } ... ?>

Максимальный размер загружаемого файла можно также задать при помощи директивы upload_max_filesize, значение которой по умолчанию равно 2 Мбайт:

upload_max_filesize ) .. ?>

Как загрузить файл на сервер используя PHP? В этой статье мы подробно рассмотрим этот вопрос с примерами.

HTML-форма для отправки файла

Первое, что нужно знать для загрузка файлов на сервер - это особенности HTML-форм, которые отправляют файл.

Вот пример HTML-кода такой формы:

Форма для загрузки файлов



Что уникального в этой форме:

  1. Тег form должен обязательно содержать атрибут enctype="multipart/form-data . Именноо этот атрибут указывает на то, что форма будет передавать файл. По умолчанию атрибут enctype имеет значение application/x-www-form-urlencoded .
  2. Форма должна содержать скрытый атрибут (type="hidden") с именем MAX_FILE_SIZE в значении которого (value) указывается размер файла. Теоретически, браузеры должны сообщать о том, что файл превышает допустимые размеры, но на практике браузеры не поддерживают это. Я думаю, что этот атрибут можно не указывать.
  3. Для выбора передаваемого файла служит тег input , у которого атрибут type="file" .

После того, как сервер получил HTTP-запрос от такой формы, он записывает файл во временную папку на сервере.

Если хотите чтобы файл на этом этапе сохранялся в другой каталог, укажите его в директиве upload_tmp_dir файла php.ini.

Для перемещения загруженного файла в новое место используется функция move_uploaded_file .

Но перед тем, как начать работать с этой функцией, мы должны изучить двумерный массив $_FILES , через который мы получаем доступ к характеристикам загруженного файла.

Итак, после того, как скрипт получил данные формы с переданным файлом, файл он записал в специальную папку, а данные о файле записал в двумерный массив $_FILES .

Давайте рассмотрим пример, который выводит содержимое массива $_FILES на экран.

Форма для загрузки файлов


"; } else { echo "
", print_r($_FILES), "
"; } ?>

Вот что мы получим в результате работы этого скрипта:

Рис.1. Массив $_FILES.

Теперь давайте разберём, что содержится в этом массиве.

В нашем двумерном массиве $_FILES есть один элемент filename . Это значение поля name из элемента формы:

Данные для этого файла:

  • $_FILES["filename"]["name"] - имя файла;
  • $_FILES["filename"]["type"] - тип файла;
  • $_FILES["filename"]["tmp_name"] - полный путь к временному каталогу на диске;
  • $_FILES["filename"]["error"] - содержит код ошибки, который это 0, если операция прошла успешно;
  • $_FILES["filename"]["size"] - размер файла.

Можно было бы в форме указать два поля для файлов, например так:


В этом случае наш массив выглядел бы так:


Рис.2. Массив $_FILES.

Итак, теперь мы знаем как устроен массив $_FILES и следующий шаг - положить полученный файл в нужное нам место.

Функция move_uploaded_file

Как я уже писал, для перемещения загруженного файла в новое место используется функция move_uploaded_file .

Синтаксис функции move_uploaded_file:

move_uploaded_file (откуда переносить, куда переносить)

Функция move_uploaded_file возвращает булево значение:

  • TRUE - в случае успеха,
  • FALSE - если первый аргумент является загруженным файлом, но по каким-либо причинам не может быть перемещён в указанное место, в этом случае никаких действий не предпринимается.

Используем эту функцию в примере:

Форма для загрузки файлов


"; } else { move_uploaded_file ($_FILES["filename"]["tmp_name"], __DIR__ . DIRECTORY_SEPARATOR . $_FILES["filename"]["name"]); } ?>

Этот скрипт перемещает картинку в ту же папку, в которой он сам находится. Для этого мы используем встроенные в PHP константы для указания пути:

  • __DIR__ - одна из "волшебных" констант, содержит директорию файла.
  • DIRECTORY_SEPARATOR - предопределённая константа, содержащая разделитель пути. Для ОС Windows это «\», для ОС Linux и остальных - «/».

Внимание: Если результирующий файл уже существует, он будет перезаписан.

Функция is_uploaded_file

Ест ещё одна функция, которую нужно обязательно использовать при работе с загрузкой файлов на сервер. Это функция is_uploaded_file и она используется из соображений безопасности.

is_uploaded_file - определяет, был ли файл загружен при помощи HTTP POST и возвращает TRUE, если это так.

Использование этой функции целесообразно для удостоверения, что злонамеренный пользователь не пытается обмануть скрипт так, чтобы он работал с файлами, с которыми работать не должен - к примеру, /etc/passwd .

Обратите внимание: для правильной работы функции is_uploaded_file нужно передать путь к файлу на временном хранилище на сервере, то есть аргумент вида $_FILES["filename"]["tmp_name"] , - а вот имя закачиваемого файла на клиентской машине ($_FILES["filename"]["name"]) тут не подходит.

Наш конечный пример скрипта, обрабатывающего форму отправки файла, будет выглядеть так:

Форма для загрузки файлов


"; } else { // Проверяем загружен ли файл if(is_uploaded_file($_FILES["filename"]["tmp_name"])) { // Если файл загружен успешно, перемещаем его // из временной директории в конечную move_uploaded_file ($_FILES["filename"]["tmp_name"], __DIR__ . DIRECTORY_SEPARATOR . $_FILES["filename"]["name"]); } else { echo("Ошибка загрузки файла"); } } ?>

Ограничиваем размер файла

В некоторых случаях требуется ограничить размер файла, который может быть загружен на сервер. К примеру, чтобы разрешить загрузку на сервер только файлов с размером не более 3 Мбайт, в приведенном скрипте содержится код:

1024*3*1024) { echo("Размер файла превышает три мегабайта"); exit; } ... ?>

Максимальный размер загружаемого файла можно также задать при помощи директивы upload_max_filesize в файле в php.ini. Значение этой которой директивы по умолчанию равно 2 Мбайт:

$upload_max_filesize) ... ?>

Настройки php.ini для загрузки файлов на сервер

Итак, мы узнали про директиву upload_max_filesize файла php.ini которая устанавливает максимальный размер загружаемого файла. Какие ещё директивы файла php.ini отвечают за загрузку файлов на сервер?

Кстати, если Вы хотите узнать, где расположен Ваш файл php.ini, выполните скриптик:

Итак, список директив файла php.ini:

  • file_uploads - возможность запретить или разрешить загрузку файлов на сервер в целом, по умолчанию разрешена (значение On).
  • post_max_size - общее ограничение сверху на размер данных, передаваемых в POST запросе. Если Вам необходимо передавать несколько файлов одновременно, или работать с большими файлами, измените значение этой директивы. Значение по умолчанию 8Мб.
  • upload_max_filesize - уже рассмотренная нами директива. Не забывайте при необходимости также менять post_max_size .
  • upload_tmp_dir - временная директория на сервере, в которую будут помещаться все загружаемые файлы.

Это всё, что я хотел сказать Вам по теме "Загрузка файлов на сервер в PHP".