0.00
Рейтинг

neko

«Облачный» бэкап

Еще давно просил alice2k написать годный мануал про создание бэкапов в Яндекс.Диск, но с тех пор ничего не изменилось. Сегодня случайно увидел статью на wiki.firstvds.ru, но все-равно, тема до конца не раскрыта.

Если мы снова обратимся к википедии, то найдем то найдем там достататочно обширный список сервисов, готовых предоставить нам какое-то количество места на своих дисках. Где-то место предоставляют бесплатно, где-то за деньги. Для своих экспериментов я выбрал Яндекс.Диск, которых хорош тем, что доступ к нему осуществляется по протоколу WebDAV. Нетрудно догадаться, что после непродолжительного гугления я нашел davfs2 — утилиту, которая простой и понятной командой
mount -t davfs https://webdav.yandex.ru /backup

подключила мой Яндекс.Диск в директорию /backup моего VDS. Аналогичным образом подключается Microsoft SkyDrive, который так же работает по протокоду WebDAV.

В случае с FreeBSD тоже все просто
# pkg_add -r fusefs-wdfs
# echo 'fusefs_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/fusefs start
# wdfs https://webdav.yandex.ru /backup -o accept_sslcert,username=user@yandex.ru,password=youpassword

Но этот способ сработает лишь на VDS c аппаратной виртуализацией KVM, в случае же с неаппаратными виртуализациями на базе FreeBSD и OpenVZ воспользоваться этими способами не получится, т.к. у VDS нет прав на загрузку модулей ядра, однако все равно есть способ разместить архив в Webdav-хранилище на Яндексе, Skydrive или где-то еще используя curl, команда при этом будет выглядеть так
# curl --user yandex_login:yandex_password -T file_name_to_upload https://webdav.yandex.ru

В случае с Яндекс.Диском в целях повышения безопасности, можно так же воспользоваться API Яндекса для выполнения авторизации.

10 полезных приёмов в .htaccess

Предупреждение: перед редактированием файла .htaccess нужно всегда делать резервную копию работающего варианта!

Принудительная постановка замыкающего слеша
Считается, что замыкающий слеш в адресе URL очень хорошо помогает в области SEO сайта. Следующий код всегда будет добавлять слеш в адрес URL вашего сайта.
<IfModule mod_rewrite.c>
 RewriteCond %{REQUEST_URI} /+[^\.]+$
 RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
</IfModule>


Предотвращаем хотлинк ресурсов сайта
Хотлинк (использование изображений вашего сайта другими сайтами в сети) является весьма популярной практикой, которая прожигает впустую трафик вашего сервера. Следующий код будет перенаправлять все хотлинк запросы к изображениям вашего сайта на определенную картинку, адрес которой задается в строке 6.
RewriteEngine On
#Замените ?mysite\.com/ на адрес вашего блога
RewriteCond %{HTTP_REFERER} !^http://(.+\.)?mysite\.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
#Замените /images/nohotlink.jpg на ваше изображение с запрещением хотлинка
RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.jpg [L]


Перенаправляем мобильные устройства
Если ваш сайт не использует адаптивный дизайн, то будет очень полезно перенаправить мобильные устройства на специальную версию сайта.
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/m/.*$
RewriteCond %{HTTP_ACCEPT} "text/vnd.wap.wml|application/vnd.wap.xhtml+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "dang|doco|eric|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT}  "maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "wapp|wapr|webc|winw|winw|xda|xda-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "up.browser|up.link|windowssce|iemobile|mini|mmp" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "symbian|midp|wap|phone|pocket|mobile|pda|psp" [NC]
#------------- Строка ниже исключает iPad
RewriteCond %{HTTP_USER_AGENT} !^.*iPad.*$
#-------------
RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
RewriteRule ^(.*)$ /m/ [L,R=302]


Принудительная загрузка файлов определенного типа
По некоторым причинам вам может потребоваться принудительная загрузка файлов определенных типов (например, MP3 или XLS). Нижеприведенный код будет предотвращать чтение таких файлов браузером и принудительно запускать загрузку
<Files *.xls>
ForceType application/octet-stream
  Header set Content-Disposition attachment
</Files>
<Files *.eps>
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</Files>


Междоменное использование шрифтов для FireFox
При использовании встроенных шрифтов Firefox не позволяет брать их с внешних сайтов. Следующий код для файла .htaccess позволит обойти данное ограничение.
<FilesMatch "\.(ttf|otf|eot|woff)$">
<IfModule mod_headers.c>
#Замените w.abcd.bz на адрес вашего блога
Header set Access-Control-Allow-Origin «abcd.bz»


Ускоряем сайт с помощью кэширования .htaccess
Используя кэширование .htaccess можно существенно увеличить скорость сайта.
# 1 ГОД
<FilesMatch "\.(ico|pdf|flv)$">
Header set Cache-Control "max-age=29030400, public"
</FilesMatch>
# 1 НЕДЕЛЯ
<FilesMatch "\.(jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=604800, public"
</FilesMatch>
# 2 ДНЯ
<FilesMatch "\.(xml|txt|css|js)$">
Header set Cache-Control "max-age=172800, proxy-revalidate"
</FilesMatch>
# 1 МИНУТА
<FilesMatch "\.(html|htm|php)$">
Header set Cache-Control "max-age=60, private, proxy-revalidate"
</FilesMatch>


Отсекаем спам
Страдаете от спама на вашем блоге WordPress? Конечно, плагин Akismet может оказать существенную помощь, но и файл .htaccess не останется в стороне от борьбы с заразой. Данный код предотвращает непосредственный доступ спам ботов к файлу wp-comments-post.php, который формирует комментарии на блоге.
# Заменяем yourdomainname на имя вашего домена
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomainname.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]


Приводим различные фиды к единому формату
# Заменяем URL на адрес своего блога
<IfModule mod_alias.c>
 RedirectMatch 301 /feed/(atom|rdf|rss|rss2)/?$ http://w.abcd.bz.ru/feed/
 RedirectMatch 301 /comments/feed/(atom|rdf|rss|rss2)/?$ 
http://abcd.bz/comments/feed/
</IfModule>


Конфигурируем сайт для видео HTML5
HTML5 привнес много новшеств в мир веб разработки. Возможность проигрывать видео без использования FLASH является одной из лучших особенностей HTML5. Хотя нужно правильно сконфигурировать сервер для корректной работы с последними стандартами видео HTML5.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
AddType video/ogg .ogv
AddType video/ogg .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType application/x-shockwave-flash swf


Записываем ошибки PHP в журнал
Вместо вывода ошибок PHP на страницах вашего сайта (что дает информацию потенциальным хакерам…) можно записывать их в журнал (файл .log), скрывая от посетителей.
view sourceprint?
# отключаем вывод ошибок пользователям
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
# заносим ошибки в журнал
php_flag log_errors on
php_value error_log /location/to/php_error.log


Запускаем PHP в файлах JavaScript
При разработке кода JavaScript иногда требуется использовать PHP в файлах .js. Например, для получения данных из базы.
AddType application/x-httpd-php .js
AddHandler x-httpd-php5 .js
<FilesMatch "\.(js|php)$">
SetHandler application/x-httpd-php
</FilesMatch>

Основные тэги html

Основные теги
<html></html> Указывает программе просмотра страниц что это HTML документ.
<head></head> Определяет место, где помещается различная информация не отображаемая в теле документа. Здесь располагается тег названия документа и теги для поисковых машин.
<body></body> Определяет видимую часть документа


Теги оглавления
<base href="www.?"> Указание браузеру от какого базового адреса все ссылки (кроме ссылок явно прописанных полностью)
<base target="?"> Указание браузеру от какого базового окна в котором открываются все ссылки (кроме ссылок с отдельным указанием данного параметра)
<meta name="allow-search" content="?"> Указание для поисковых роботов как следует сканировать данную страницу
<meta http-equiv="distribution" content="?"> Указание для поисковых роботов относится ли данная страница к мировым
<meta name="robots" content="?"> Указание для поисковых роботов как следует сканировать данную страницу
<meta name="author" content="?"> Указание автора странички
<meta name="keywords" content="?"> Описание содержащийся информации (для поисковых машин)
<meta http-eguiv="content-type" content="text/plain;churset="?"> Указание браузеру в какой кодировке следует подгружать страницу (Window-1251, KOI8-R, KOI8-U, ISO-8859-5, UTF-8, UTF-16 и д.р.)
<meta name="description" content="?"> Ключевые слова странички (для поисковых машин)
<title></title> Помещает название документа в оглавление программы просмотра страниц


Атрибуты тела документа
<body bgcolor="?"> Устанавливает цвет фона документа, используя значение цвета в виде RRGGBB - пример: FF0000 - красный цвет.
<body text="?"> Устанавливает цвет текста документа, используя значение цвета в виде RRGGBB - пример: 000000 - черный цвет.
<body link="?"> Устанавливает цвет гиперссылок, используя значение цвета в виде RRGGBB - пример: 00FF00 - зеленый цвет.
<body vlink="?"> Устанавливает цвет гиперссылок, на которых вы уже побывали, используя значение цвета в виде RRGGBB - пример: 333333 - серый цвет.
<body alink="?"> Устанавливает цвет гиперссылок при нажатии.


Теги форматирования текста
<pre></pre> Обрамляет предварительно отформатированный текст.
<h1></h1> Создает самый большой заголовок
<h2></h2>, <h3>, </h3><h4></h4>, <h5>, </h5> Создает заголовоки промежуточных размеров
<h6></h6> Создает самый меленький заголовок
<b></b> Создает жирый текст
<i></i> Создает наклонный текст
<tt></tt> Создает текст - имитирующий стиль печатной машинки.
<kbd></kbd> Создает текст - имитирующий стиль печатной машинки.
<var></var> Название переменных отображается курсивом
<cite></cite> Выделение цитат курсивом
<address></address> Отображается курсивом в виде отдельного абзаца
<em></em> Наклонный текст (воспринимается посковыми роботами как выделение)
<strong></strong> Жирный текст (воспринимается посковыми роботами, как особо сильное выделение)
<font size="?"></font> Устанавливает размер текста в пределах от 1 до 7.
<font color="?"></font> Устанавливает цвет текста, используя значение цвета в виде RRGGBB.


Гиперссылки
<a href="URL"></a> Создает гиперссылку на другие сайты.
<atarget="?"></a> Указывает в каком окне открывать гиперссылку.
<a href="NAME"></a> Создает гиперссылку на другую страницу.
<a href="mailto:EMAIL"></a> Создает гиперссылку вызова почтовой программы для написания письма по указанному адресу.
<a href="#name"></a> Создает гиперссылку на метку текущей страници.
<a name="name"></a> Отмечает часть текста, как метку для гипперссылок на странице.
<a href="NAME#name"></a> Создает гиперссылку на метку другой страници.


Форматирование
<p></p> Создает новый параграф
<p align="?"></p> Выравнивает параграф относительно одной из сторон документа, значения: left, right, justify или center
<nobr> Запрещает перевод строки.
<wbr> Указывает где разбивать строку для переноса при необходимости.

 Вставляет перевод строки.
<blockquote></blockquote> Создает отступы с обеих сторон текста.
<dl></dl> Создает список определений.
<dt> Определяет каждый из терминов списка
<dd> Описывает каждое определение
<ol></ol> Создает нумерованный список
<li> Определяет каждый элемент списка и присваивает номер
<ul></ul> Создает ненумерованный список
<li> Предваряет каждый элемент списка и добавляет кружок или квадратик.
<div align="?"></div> Важный тег используемый для форматирования больших блоков текста HTML документа, также используется в таблицах стилей


Графические элементы
<img src="name"> Добавляет изображение в HTML документ
<img src="name" align="?"> Выравнивает изображение к одной из сторон документа, принимает значения: left, right, center; bottom, top, middle
<img src="name" border="?"> Устанавливает толщину рамки вокруг изображения
<img src="name" vspase="?"> Устанавливает поля сверху и снизу
<img src="name" hspase="?"> Устанавливает поля сбоков
<img src="name" alt="?"> Всплывающая подсказка при наведении на имедж
<hr> Добавляет в HTML документ горизонтальную линию.
<hr size="?"> Устанавливает высоту (толщину) линии
<hr width="?"> Устанавливает ширину линии, можно указать ширину в пикселах или процентах.
<hr noshade> Создает линию без тени.
<hr color="?"> Задает линии определенный цвет. Значение RRGGBB.


Таблицы
<table></table> Создает таблицу.
<tr></tr> Определяет строку в таблице.
<td></td> Определяет отдельную ячейку в таблице
<caption></caption> Определяет подпись таблицы


Атрибуты таблицы
<table border="#"> Задает толщину рамки таблицы.
<table cellspacing="#"> Задает расстояние между ячейками таблицы.
<table cellpadding="#"> Задает расстояние между содержимым ячейки и ее рамкой.
<table width="#"> Устанавливает ширину таблицы в пикселах или процентах от ширины документа.
<table height="#"> Устанавливает высоту таблицы в пикселах или процентах от высоты документа.
<tr align="?"> или <td align="?"> Устанавливает выравнивание ячеек в таблице, принимает значения: left, center, или right.
<tr valign="?"> или <td valign="?"> Устанавливает вертикальное выравнивание для ячеек таблицы, принимает значения : top, middle, или bottom.
<td colspan="#"> Указывает кол-во столбцев, которое объединено в одной ячейке. (по умолчанию=1)
<td rowspan="#"> Указывает кол-во строк, которое объединено в одной ячейке. (по умолчанию=1)
<td nowrap> Не позволяет программе просмотра делать перевод строки в ячейке таблицы.
<td width="#"> Устанавливает ширину ячейки в пикселах или процентах от ширины таблицы (ячейки одного столбца не могут иметь разную ширину).
<td height="#"> Устанавливает высоту ячейки в пикселах или процентах от высоты таблици (ячейки одной строки не могут иметь разную высоту).


Фреймы
<frameset></frameset> Предваряет тег <body> в документе, содержащем фреймы;
<frameset rows="value,value"> Определяет строки в таблице фреймов, высота которых определена кол-вом пикселов или в процентном соотношении к высоте таблицы фреймов.
<frameset cols="value,value"> Определяет столбцы в таблице фреймов, ширина которых определена кол-вом пикселов или в процентном соотношении к ширине таблицы фреймов.
<frame> Определяет единичный фрейм или область в таблице фреймов.
<noframes></noframes> Определяет, что будет показано в окне браузера, если он не поддерживает фреймы.


Атрибуты фреймов
<frame src="URL"> Определяет какой из HTML документов будет показан во фрейме.
<frame name="name"> Указывает Имя фрейма или области, что позволяет перенаправлять информацию в этот фрейм или область из других фреймов.
<frame marginwidth="#"> Определяет величину отступов по левому и правому краям в нутрь фрейма; должно быть равно или больше 1.
<frame marginheight="#"> Определяет величину отступов по верхнему и нижнему краям в нутрь фрейма; должно быть равно или больше 1.
<frame scrolling=VALUE> Указывает будет-ли выводится линейка прокрутки во фрейме; значение value может быть "yes," "no," или "auto". Значение по умолчанию для обычных документов - auto.
<frame noresize> Препятствует изменению размеров фрейма пользователем.


Ифрейм и его атрибуты
<iframe></iframe> Создает контейнер, который может содержать любые элементы. Остальные элементы обтекают этот контейнер.
<iframe src="URL"> Определяет какой из HTML документов будет показан в ифрейме.
<iframe name="name"> Указывает Имя ифрейма, что позволяет перенаправлять информацию в этот ифрейм .
<iframe vspase="?"> Устанавливает поля сверху и снизу с наружи от ифрейма
<iframe hspase="?"> Устанавливает поля сбоков с наружи от ифрейма
<iframe marginwidth="#"> Определяет величину отступов по левому и правому краям в нутрь ифрейма; должно быть равно или больше 1.
<iframe marginheight="#"> Определяет величину отступов по верхнему и нижнему краям в нутрь ифрейма; должно быть равно или больше 1.
<iframe scrolling=VALUE> Указывает будет-ли выводится линейка прокрутки в ифрейме; значение value может быть "yes," "no," или "auto". Значение по умолчанию для обычных документов - auto.
<iframe width="#"> Определяет ширину ифрейма
<iframe height="#"> Определяет высоту ифрейма
<iframe title="?"> Текст всплывающей подсказки


Формы
<form></form> Создает формы
<select multiple name="NAME" size="?"></select> Создает скролируемое меню. Size устанавливает кол-во пунктов меню, которое будет показано на экране, остальные будут доступны при использовании прокрутки.
<option> Указывает каждый отдельный элемент меню
<select name="NAME"></select> Создает ниспадающее меню
<option> Указывает каждый отдельный элемент меню
<textarea name="NAME" cols=40 rows=8></textarea> Создает окно для ввода текста. Columns указывает ширину окна; rows указывает его высоту.
<input type="checkbox" name="NAME"> Создает checkbox.
<input type="radio" name="NAME" value="x"> Создает radio кнопку.
<input type=text name="foo" size=20> Создает строку для ввода текста. Параметром Size указывается длина в символах.
<input type="submit" value="NAME"> Создает кнопку "Отправить"
<input type="image" border="0" name="NAME" src="name.gif"> Создает кнопку "Отправить" - для этого используется изображение
<input type="reset"> Создает кнопку "Очистить"

Как открыть свой хостинг?

Давайте напишу пост про это, что-ли. Уже пронаблюдал довольно дохуя хостинг компаний.

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

Что нам нужно в первую очередь? Биллинг. Он нужен, как и людям с деньгами за душой, так и людям, у которых денег на аренду серверов, нету например.
Я пришел к выводу, что опитимальный биллинг и вообще панели, это ISP, от ispsystem. Пусть он и дороже популярных биллингов, и сложнее, но это того стоит.
Сразу скажу, что лучше всего брать, BILLmanager Advanced. На Corporate вряд ли кто-ниб будет деньги тратить(это скорее для ДЦ нужно), а вот вместо Standard, купить Advanced будет лучшим выбором. Даже школо-студенту советую, потратить таки 4800/год, нежели экономить на этом ;) Потому что, настройки отличаются просто на ура. Дополнительные услуги, товары и прочее, без этого панель будет смотреться очень ограниченно.

Для него, чтобы было престижно, лучше купить и ssl сертификат еще. Если вы контора, то можно купить ssl с проверкой ЮЛ, а если вы не принимаете без-нал, то купите самый обычный, чтобы браузеры токо зеленый цвет показывали, а не красный :) Ну уровень доверия к домену по ssl. Цены на ssl

Итак, с этим определились. Это уже однозначно, всем, советую так делать.

И сервера, любые, где есть ISP manager, как pro, так и lite, мы просто будет подключать в биллинг. Для автоматического создания аккуантов. Лимиты, кол-во и прочее, это все просто овер дохуя настроек, тут только фантазию включай ;)

Дальше поговорим, о самих серверах, которые мы будем закупать. Аренду коло, мы не рассматриваем. Максимальное что я рассмотрю, это просто аренда физического сервера, разной конфигурации, от начальной, средней, до максимальной по 24гб оперативки и т.д. Или же, если кто-то неплохо вложится, то аренду подобного.
*Честности ради, замечу, из опыта наблюдений, что большинство ресселеров подобного плана, не покупают на 24, они покупают по 8 или 12. Видимо, так дешевле получается, или с оптимизацией/нагрузками рамсы и нерационально держать дохуя клиентов на одном таком большом, не спасает макс-кол-во оперативки. Такое пока не тестил, так что сам судить не могу.

Итак, если вы веб-студия, с уже наточенным доходом. То вам лучше вложиться, сразу, без гемороя и мелочности, в дедик. Например, если трудно с hetzner.de, то идите на fastvps.ru и там заказывайте(они как бы все равно купят на hetzner, но по русски поддержку предоставят).
Выбор ОС, настройку и прочее, оставим на вашего специалиста. А вот, момент про ISP панели(которые будут взаимодействовать с биллингом) я рассмотрю. Для продажи хостинга, я крайне настаиваю брать именно ISP manager PRO версию, никак не lite. Чтобы через PRO можно было уровни разные создавать, и там есть встроенная система тикетов.(хотя имея биллинг она не нужна, это тем кто без биллинга толкает, может с «pro» облегчить задачу себе)
Для студентов всяких, я бы предложил, начать для начала, с VDS/VPS. А потом, по мере окупаемости, докупать еще vps/vds, а потом можно и на закупку Dedicated Servers перейти ;)
Так как, возможности ISP pro на VDS/VPS наверно не нужны ;) Поэтому тут можно смело покупать виртуальные сервера, даже с lite, а потом интегрировать их в биллинг, для продажи лимитных аккуантов шареда.
*плюсы в том, что меньше тратится на ежемесячный расход, пока клиентов например нихуя нету. минусы в том, что ресурсы как бы значительнее слабее, чем dedicated, поэтому позаботиться нада о всяких наплывах ддоса, бекапах обязательно и все такое, ибо форсмажорностей будет гораздо больше.

А совсем для нищебродов(а может и нет, смотря как смотреть), можно даже купить на clodo например(или скалакси или селектед).
Самый дешевый, по Scale Server, с ISP pro панелью(+250/мес) вам обойдется ~1000р/мес
По мере увеличения клиентов, обычного шаред-лимитного хостинга. (лимиты выставите через ISP pro, на разные тарифы, а потом шаблоны через биллинг соедините), вы будете увеличивать сам Scale Server.
Плюсы и минусы облаков, неплохо описаны, в этой статье. Так что, тут можно залететь, но можно и минимум затрат иметь :) Смотря каких именно клиентов, будете набирать. Это нада все зарание просчитать, в этой системе.

Ну, конечно придумать домен для хостинга. И сделать сайт ;) Можно начинать.

Пример загрузки файлов на сервер (upload) на языке php

Код формы (upload.html)
<html>
<head>
  <title>Загрузка файлов на сервер</title>
</head>
<body>
      <h2><p><b> Форма для загрузки файлов </b></p></h2>
      <form action="upload.php" method="post" enctype="multipart/form-data">
      <input type="file" name="filename">
 
      <input type="submit" value="Загрузить">
      </form>
</body>
</html>

Код скрипта обработки формы (upload.php)
<html>
<head>
  <title>Результат загрузки файла</title>
</head>
<body>
<?php
   if($_FILES["filename"]["size"] > 1024*3*1024)
   {
     echo ("Размер файла превышает три мегабайта");
     exit;
   }
   if(copy($_FILES["filename"]["tmp_name"],
     "c:/temp/".$_FILES["filename"]["name"]))
   {
     echo("Файл успешно загружен 
");
     echo("Характеристики файла: 
");
     echo("Имя файла: ");
     echo($_FILES["filename"]["name"]);
     echo("
Размер файла: ");
     echo($_FILES["filename"]["size"]);
     echo("
Каталог для загрузки: ");
     echo($_FILES["filename"]["tmp_name"]);
     echo("
Тип файла: ");
     echo($_FILES["filename"]["type"]);
   } else {
      echo("Ошибка загрузки файла");
   }
?>

</body>
</html>

В некоторых случаях требуется ограничить размер файла, который может быть загружен на сервер. К примеру, чтобы разрешить загрузку на сервер только файлов с размером не более 3 Мбайт, в приведенном скрипте содержится код:
if($_FILES["filename"]["size"] > 1024*3*1024)
{
  echo("Размер файла превышает три мегабайта");
  exit;
}