php принять файл post
Загрузка файлов на сервер
Содержание
User Contributed Notes 32 notes
Example:
( ‘Content-Type: text/plain; charset=utf-8’ );
echo ‘File is uploaded successfully.’ ;
Clarification on the MAX_FILE_SIZE hidden form field:
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.
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).
Be reminded that this mime type can easily be faked as PHP doesn’t go very far in verifying whether it really is what the end user reported!
My best bet would be for you to check the extension of the file and using exif_imagetype() to check for valid images. Many people have suggested the use of getimagesize() which returns an array if the file is indeed an image and false otherwise, but exif_imagetype() is much faster. (the manual says it so)
IE on the Mac is a bit troublesome. If you are uploading a file with an unknown file suffix, IE uploads the file with a mime type of «application/x-macbinary». The resulting file includes the resource fork wrapped around the file. Not terribly useful.
(There is probably a better way to do it, but this solved my problem):
If «large files» (ie: 50 or 100 MB) fail, check this:
It may happen that your outgoing connection to the server is slow, and it may timeout not the «execution time» but the «input time», which for example in our system defaulted to 60s. In our case a large upload could take 1 or 2 hours.
Additionally we had «session settings» that should be preserved after upload.
1) You might want review those ini entries:
* session.gc_maxlifetime
* max_input_time
* max_execution_time
* upload_max_filesize
* post_max_size
2) Still fails? Caution, not all are changeable from the script itself. ini_set() might fail to override.
You can see that the «upload_max_filesize», among others, is PHP_INI_PERDIR and not PHP_INI_ALL. This invalidates to use ini_set():
http://www.php.net/manual/en/configuration.changes.modes.php
3) Still fails?. Just make sure you enabled «.htaccess» to overwrite your php settings. This is made in the apache file. You need at least AllowOverride Options.
You will necessarily allow this manually in the case your master files come with AllowOverride None.
Depending on the system, to allow «large file uploads» you must go up and up and up and touch your config necessarily up to the apache config.
These work for me, for 100MB uploads, lasting 2 hours:
In the example,
— As I last 1 to 2 hours, I allow 3 hours (3600×3)
— As I need 100MB, I allow air above for the file (110M) and a bit more for the whole post (120M).
For those of you trying to make the upload work with IIS on windows XP/2000/XP Media and alike here is a quick todo.
2) In windows explorer browse to the upload directory created above and share it. To do that execute the following substeps.
a) Right click the folder click «sharing and security. »
b) Check ‘Share this folder on the network’
c) Check ‘Allow network users to change my files’ ( THIS STEP IS VERY IMPORTANT )
d) click ‘ok’ or ‘apply’
3) you can then go in the IIS to set read and write permissions for it. To do that execute the followin substeps.
a) Open IIS (Start/Controp Panel (classic View)/ Admistrative tools/Internet Information Service
b) Browse to your folder (the one we created above)
c) right click and select properties.
d) in the Directory tab, make sure, READ, WRITE, AND DIRECTORY BROWSING are checked.
e) For the security freaks out there, You should also make sure that ‘execute permissions:’ are set to Script only or lower (DO NOT SET IT TO ‘script and executable)'( that is because someone could upload a script to your directory and run it. And, boy, you do not want that to happen).
Send me feed back it if worked for you or not so that I can update the todo.
PS: BIG thanks to oportocala
Using /var/www/uploads in the example code is just criminal, imnsho.
One should *NOT* upload untrusted files into your web tree, on any server.
Nor should any directory within your web tree have permissions sufficient for an upload to succeed, on a shared server. Any other user on that shared server could write a PHP script to dump anything they want in there!
One’s code should INSPECT the actual file to see if it looks kosher.
For example, images can quickly and easily be run through imagegetsize and you at least know the first N bytes LOOK like an image. That doesn’t guarantee it’s a valid image, but it makes it much less likely to be a workable security breaching file.
For Un*x based servers, one could use exec and ‘file’ command to see if the Operating System thinks the internal contents seem consistent with the data type you expect.
I’ve had trouble in the past with reading the ‘/tmp’ file in a file upload. It would be nice if PHP let me read that file BEFORE I tried to move_uploaded_file on it, but PHP won’t, presumably under the assumption that I’d be doing something dangerous to read an untrusted file. Fine. One should move the uploaded file to some staging directory. Then you check out its contents as thoroughly as you can. THEN, if it seems kosher, move it into a directory outside your web tree. Any access to that file should be through a PHP script which reads the file. Putting it into your web tree, even with all the checks you can think of, is just too dangerous, imnsho.
There are more than a few User Contributed notes here with naive (bad) advice. Be wary.
Php принять файл post
Multipart-формы
Загрузка фаилов на сервер осуществляется пользователями сети интернет довольно часто, а именно:
Вот так примерно будет выглядеть приведенная multipart-форма (вы можете попробовать с ее помощью посмотреть результат работы multipart-форм, загрузив какой-нибудь файл небольшого размера на сервер):
Multipart-формы обычно используют метод передачи POST. Как видно из предыдущего примера, данная форма имеет два поля:
Обработка multipart-форм
Прежде, чем приступить к написанию скрипта обработки multipart-формы, нужно отредактировать файл конфигурации php.ini, чтобы разрешить загрузку файлов на сервер.
Конфигурационный файл PHP php.ini имеет три параметра, связанные с загрузкой файлов на сервер:
Если ваш веб-сервер работает под управлением операционной системы Linux, то нужно перезапустить сервис:
service httpd restart
После завершения работы скрипта, временный файл будет удален. Это означает, что мы должны его скопировать в другое место до завершения работы скрипта. То есть алгоритм работы сценария загрузки файла на сервер такой:
Копирование файла производится функцией copy():
// На всякий случай создадим каталог. Если он уже создан,
// сообщение об ошибки мы не увидим, поскольку воспользуемся оператором @:
// Копируем файл из /tmp в uploads
// Имя файла будет таким же, как и до отправки на сервер:
// Создаем каталог uploads
chown apache:apache uploads
// Разрешение записи всем (777) + установка закрепляющего бита (1):
chmod 1777 uploads
Вот теперь можно загружать файлы на сервер.
Пишем PHP скрипт загрузки файлов на сервер
Файл успешно загружен на сервер
Ошибка! Не удалось загрузить файл на сервер!
Информация о загруженном на сервер файле:
Загрузка на сервер нескольких файлов
Также предусмотрена возможность автоматического получения организованной в массив информации о нескольких одновременно загружаемых файлах. Для реализации такой возможности используйте тот же синтаксис отправки массива из HTML-формы, что и для множественных полей select и checkbox :
Загрузка файлов методом POST
Данная возможность позволяет загружать как текстовые, так и бинарные файлы. С помощью PHP-функций авторизации и манипуляции файлами вы получаете полный контроль над тем, кому разрешено загружать файлы и что должно быть сделано после их загрузки.
PHP способен получать загруженные файлы из любого браузера, совместимого со стандартом RFC-1867.
Замечание: Смежные замечания по конфигурации
Также ознакомьтесь с описанием директив file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size и max_input_time конфигурационного файла php.ini
Пример #1 Форма для загрузки файлов
Страница для загрузки файлов может быть реализована при помощи специальной формы, которая выглядит примерно так:
В приведенном выше примере __URL__ необходимо заменить ссылкой на PHP-скрипт.
Скрытое поле MAX_FILE_SIZE (значение необходимо указывать в байтах) должно предшествовать полю для выбора файла, и его значение является максимально допустимым размером принимаемого файла в PHP. Рекомендуется всегда использовать эту переменную, так как она предотвращает тревожное ожидание пользователей при передаче огромных файлов, только для того, чтобы узнать, что файл слишком большой и передача фактически не состоялась. Помните, обойти это ограничение на стороне браузера достаточно просто, следовательно, вы не должны полагаться на то, что все файлы большего размера будут блокированы при помощи этой возможности. Это по большей части удобная возможность для пользователей клиентской части вашего приложения. Тем не менее, настройки PHP (на сервере) касательно максимального размера обойти невозможно.
Также следует убедиться, что в атрибутах формы вы указали enctype=»multipart/form-data», в противном случае загрузка файлов на сервер выполняться не будет.
Оригинальное имя файла на компьютере клиента.
Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: «image/gif». Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки.
Размер в байтах принятого файла.
Временное имя, с которым принятый файл был сохранен на сервере.
Код ошибки, которая может возникнуть при загрузке файла.
Пример #2 Проверка загружаемых на сервер файлов
По окончанию работы скрипта, в случае, если принятый файл не был переименован или перемещен, он будет автоматически удален из временной папки.
Пример #3 Загрузка массива файлов
PHP поддерживает возможность передачи массива из HTML в том числе и с файлами.
Полоса прогресса загрузки файлов может быть реализована с помощью «отслеживания прогресса загрузки файлов с помощью сессий».
Загрузка файла(ов) на сервер из формы средствами PHP
Содержание:
Сегодня загрузка файлов является практически неотъемлемым атрибутом современного web приложения. В данной статье речь пойдёт о том, как же загрузить файл(ы) на сервер с помощью PHP.
Настройка php.ini
Конфигурационный файл php.ini необходимо настраивать согласно бизнес-логики проекта! Например, мы планируем загружать не более десяти файлов до 2 Мбайт, а это значит нам понадобиться
Загрузка одного файла на сервер из формы
Для начала разберём механизм загрузки одной картинки на сервер. Для загрузки картинки с компьютера пользователя необходимо с помощью HTML-формы отправить нужный (выбранный) файл PHP-скрипту upload.php методом POST и указать способ кодирования данных enctype=»multipart/form-data» (в данном случае данные не кодируются и это значение применяется только для отправки бинарных файлов).
Таким образом, при необходимости, делаем проверку и на другие MIME-типы. Например, для zip архивов проверка будет такая:
Для дальнейшей валидации изображения и работы над ним нам необходимо знать только 3 значения: ширину, высоту и размер файла (для вычисления размера применим функцию filesize() для бинарного файла из временной папки).
После всех проверок мы можем с уверенностью переместить наш загружаемый файл в какую-нибудь директорию с картинками. Делать лучше это через функцию move_uploaded_file(), которая работает в безопасном режиме. Перед перемещением файла нельзя забыть сгенерировать случайное имя и расширение из типа изображения для нашего файла. Вот так это выглядит:
Вместо простого способа генерации имени файла на основе MD5-хеша можно пойти более продвинутым путём, а именно написать отдельную функцию, которая будет проверять уникальность названия картинки для того, чтобы случайно не перезаписать уже загруженный файл. Если такого названия ещё нет, функция сгенерирует его. Такая проблема появляется в больших проектах и с большим количеством картинок. Но всё же)
Генерация имени для картинки теперь будет такой:
Загрузка нескольких файлов на сервер из формы
Метод post php пример пост запроса
Подробно о методе post в php
Что такое метод POST?
Как обозначается метод отправки данных «POST» в форме?
Место обработки данных из метода POST?
Место(условно) где будет происходить обработка только два:
Данные будут обработаны:
Либо на этой странице.
Что нужно, чтобы отправить POST запрос!?
Для того, чтобы отправить post запрос потребуется:
Форма, из которой будет отправляться «post запрос».
Скрипт, который получит, обработает и выведет результат(если это требуется.)
Алгоритм отправки POST запроса!?
Алгоритм отправки данных методом post :
Обрабатываем данные отправление методом пост.
Какие данные отправляет метод POST
На живом примере(следующий пункт) разберем, как передаются данные в методом «POST».
Какой тип данных у POST?
Зачем нужно знать, какое тип у данных в методе POST?
Если вы знаете тип данных, то у соответствующих типах есть свои признаки поведения!
Если мы знаем поведение, то можем управлять этими данными.
Ниже рассматривается пример отправки методом post и получаем результат. и там же выводим массив «$_POST».
После нажатия на кнопку, вы можете вернуться сюда, и посмотреть, что вернет функция var_dump.
Получение массива POST с примером.
Для этого нам понадобится:
Форма из которой будем отправлять данные. Подробно на форме остановимся ниже.
Чтобы приять данные нужно создать такую запись в php, для вывода массива используем print_r:
Если вы размещаете такую запись внутри html документа, нужно, чтобы html понимал php
Соберем весь код для получения и вывода массива POST
Форма для отправки массива POST
У вас есть два варианта:
Просто нажмите на кнопку отправить и вы получите результат «массива POST».
Либо в полях ввода напишите свою информацию.
И нажимаем отправить!
Форма с методом POST
Разберем подробно из чего должна состоять форма для отправки «запроса POST».
Необходимый атрибут method, который будет указывать тип метода, в нашем случае это «POST».
Форму выведем ниже!
Далее нам нужно переданные данные из этой формы обработать!
Как получать данные отправленные методом POST
Для данного поля условие получения данных будет таким:
Полностью можем собрать получение пост запроса из этого input-a :
Тоже самое делаем со вторым полем ввода:
Мы рассмотрели два поля ввода!
Но ведь у нас есть кнопка отправить!
Для данной кнопки можно составить тоже условие и уже внутрь поместить два условия о которых мы сказали выше.
Это будет проверка на отправку данных, т.е. была ли нажата кнопка submit:
Живой пример отправки данных методом POST
Не будем повторять, что уже было сказано, лишь посмотрим на некоторые изменения, которые я внес в форму, чтобы она работала так, как мне нужно здесь.
Чтобы вы не ходили в поисках результата, нам потребуется вернуться к нашему результату в этом пункте, поэтому нам понадобится якорь
И для вывода переданных данных используем echo, использовали два типа кавычек ‘ и «
Полный код выше идущей формы с php обработчиком пост запроса!
Введите какие-то данные в поля ввода и нажмите отправить:
Как отправить POST запрос на другую страницу!?
Первое! Откройте страницу и посмотрите, что там написано!
Теперь наберите текст и отправьте данные. методом post? на другую страницу:
Как работает отправка post запроса на другую страницу!?
Нам понадобится опять форма для отправки каких-то данных:
+ использовали тип hidden(скрытое поле), в котором отправляем ссылку(прост пример. )
В указываем страницу. на которую будем отправлять pos запрос!
Код страницы для приема post запроса
На странице для приема данных переданных через post делаем все абсолютно аналогично, что и выше было рассказано! Создаем условия и проверяем были ли переданы данные методом post!
Пример страницы для приема пост запроса
Вы отправили данные:
Post запрос был отправлен со страницы’;
echo ‘Вы здесь ничего не увидите, пока не отправить пост запрос со страницы со страницы’;