Php руководство по рнр 3 0 функции файловой системы


Содержание

Руководство по PHP русский перевод

25.02.2008 (последний раз редактировалось 01.02.2012)
сайт: http://ru2.php.net/download-docs.php
условия использования: бесплатно

скачать руководство PHP, русский (html) В формате html. Дата редакции 26-01-2012 (много html файлов)
скачать руководство PHP, русский (html) В формате html. Дата редакции 26-01-2012 (Одним большим файлом)
скачать руководство PHP, русский (chm) В формате chm. Дата редакции 26-01-2012 (с комментариями пользователей на английском)

Официальный мануал по php.
Освещает 4 и 5 версии php.
Это руководство состоит, главным образом, из справочника функций, а также содержит справочник языка, комментарии к наиболее важным из отличительных особенностей PHP, и другие дополнительные сведения.
онлайн версия справочника по функциям php

Содержание руководства:

Авторские права
Руководство по PHP
Предисловие
Приступая к работе
Введение
Простой учебник
Установка и настройка
Общие инструкции по установке
Установка на Unix системы
Installation on Mac OS X
Installation on Windows systems
FastCGI Process Manager (FPM)
Установка расширений PECL
Проблемы?
Runtime Configuration
Справочник языка
Основы синтаксиса
Типы
Переменные
Константы
Выражения
Операторы
Управляющие конструкции
Функции
Классы и объекты
Namespaces
Исключения
Ссылки. Разъяснения
Предопределённые переменные
Предопределённые исключения
Predefined Interfaces
Context options and parameters
Supported Protocols and Wrappers
Безопасность
Вступление
Общие рассуждения
Если PHP установлен как CGI
Если PHP установлен как модуль Apache
Безопасность файловой системы
Безопасность баз данных
Сообщения об ошибках
Использование глобальных переменных (Register_Globals)
Данные, введенные пользователем
Волшебные кавычки
Сокрытие PHP
Необходимость обновлений
Отличительные особенности
HTTP-аутентификация в PHP
Cookies
Sessions
Работа с XForms
Загрузка файлов на сервер
Работа с удаленными файлами
Работа с соединениями
Постоянные соединения с базами данных
Безопасный режим
Использование PHP в командной строке
Garbage Collection
Справочник функций
Изменение поведения PHP
Обработка аудио форматов
Службы аутентификации
Расширения по работе с датой и временем
Расширения для работы с командной строкой
Расширения сжатия и архивации
Обработка кредитных карт
Криптографические расширения
Расширения для работы с базами данных
Расширения для работы с файловой системой
Поддержка человеческих языков и кодировок
Обработка и генерация изображений
Расширения по работе с почтой
Математические расширенияMathematical
Генерация нетекстовых MIME форматов
Расширения для управления процессами программ
Другие базовые расширения
Другие службы
Расширения для работы с поисковыми системами
Расширения для работы с серверами
Расширения для работы с сессиями
Обработка текста
Расширения, относящиеся к переменным и типам
Веб-сервисы
Расширения только для Windows
Обработка XML
Ядро PHP: Руководство хакера по Zend Engine
Preface
The «counter» Extension — A Continuing Example
The PHP 5 build system
Extension structure
Memory management
Working with variables
Writing functions
Working with classes and objects
Working with resources
Working with INI settings
Working with streams
PDO Driver How-To
Extension FAQs
Zend Engine 2 API reference
Zend Engine 2 opcode list
Zend Engine 1
ЧАВО — ЧАВО: ЧАсто задаваемые Вопросы и Ответы на них
Общая информация
Списки рассылки
Получение PHP
Вопросы по Базам данных
Установка
Проблемы Сборки
Использование PHP
PHP и HTML
PHP и COM
PHP и другие языки
Переход из PHP 4 в PHP 5
Разные вопросы
Appendices
История PHP и смежных проектов
Migrating from PHP 5.2.x to PHP 5.3.x
Migrating from PHP 5.1.x to PHP 5.2.x
Migrating from PHP 5.0.x to PHP 5.1.x
Миграция с PHP 4 на PHP 5
Classes and Objects (PHP 4)
Отладка в PHP
Configure options
Директивы php.ini
Список/классификация расширений
Список псевдонимов функций
List of Reserved Words
List of Resource Types
Список доступных фильтров
Список поддерживаемых транспортных протоколов
Таблица сравнения типов в PHP
List of Parser Tokens
Userland Naming Guide
Об этом руководстве
Creative Commons Attribution 3.0
Список функций

Комментарии

05.09.2009 ljubchyk
Документация по РНР, а називается html)

26.01.2010 zohen
Посмотрим что ето замануал)))

31.03.2010 Dikan
Качаю вот, говорят хорошая книга, по изучаю.

01.04.2010 Mistic
вобщем то очень доступно описано.
сам не зная не одного языка программирования в течении двух недель освоил php именно по этой книге(это было пару лет назад).
это классический мануал по php

13.07.2010 LuMeN
Надеюсь поможет поверю на слова

24.12.2010 Nosirjon
Скачаю начал изучачть html а потом php

21.04.2011 babay
Если это «PHP русский», то я — Папа Римский.

25.04.2011 виктор
Для Папы Римского, ты прочитал два слова из всего, что тут написано?
Это руководство по PHP на русском языке.
Никто тут даже не пытался сказать, что PHP русский.

Админ, поставь в названии запятую «Руководство по PHP, русский» или «Руководство по PHP на русском».

18.05.2011 KaReN
Ну попробую, до этого ,было object pascal в среде дельфи, щсейчас решил в инете прробовал html, хочу попробовать нечто большее

01.06.2011 Денис
Да не слушайте вы ни кого, нормальный такое руководство, конечно не, то что нужно было мне, но тем кто хочет его освоить самое оно!
P.S. мне нужно было описание функций и волей судьбы выплыл сюда.

02.06.2011 виктор
Денис, вот как раз в этом мануале и есть описание функций.
Вобщем то самое основное в этом справочнике описание функций

03.12.2011 Александр
Парни, если кто не понимает, что перевод с английского на русский то ему запятая не поможет :-)

08.12.2011 я php
Да да, даже можно точку с запятой поставить, все равно не поможет. ))))

24.01.2012 lili
этому человеку и php не поможет..

30.01.2012 ed-210
Кто-нибудь может сказать, почему переведенный вариант руководства за 18-02-2011 всё-равно содержит английские статьи? Есть где-то полностью русский мануал?
P.S. Ибо так лень напрягать мозг, для того чтобы вникнуть во вражескую терминологию.

01.02.2012 админ
справочники обновлены

11.04.2012 Олег
Спасибо за мануал!

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

16.10.2015 Боря
Прочитал множество книг и документаций по PHP. Ни одна не удобна так как этот справочник от разработчиков и не объясняет этот языка лучше этого справочника, так точно и последовательно. Рекомендую всем! Можно сказать что это полный справочник по языку PHP. Удачи всем !

PHP 5 Файловая система Функции

PHP Filesystem Введение

Функции файловой системы позволяют получить доступ и управлять файловой системой.

устанавливать

Функции Filesystem являются частью ядра PHP. Никакой установки не требуется, чтобы использовать эти функции.

Настройка во время выполнения

Функции Поведение Filesystem зависит от установок в php.ini.

Параметры конфигурации Filesystem:

名称 默认 描述 可改变
allow_url_fopen «1» 允许 fopen()-type 函数使用 URL。(PHP 4.0.4 版以后可用) PHP_INI_SYSTEM
user_agent NULL 定义 PHP 发送的用户代理。(PHP 4.3 版以后可用) PHP_INI_ALL
default_socket_timeout «60» 设置基于 socket 流的默认的超时时间(秒)。(PHP 4.3 版以后可用) PHP_INI_ALL
from «» 定义匿名 FTP 的密码(您的 email 地址)。 PHP_INI_ALL
auto_detect_line_endings «0» 当设置为 «1» 时,PHP 将检查通过 fgets() 和 file() 取得的数据中的行结束符号是符合 Unix、MS-Dos 还是 Mac 的习惯。(PHP 4.3 版以后可用) PHP_INI_ALL

Совместимость с Unix / Windows

При заданной траектории на Unix-платформах, прямой слэш (/) в качестве разделителя каталогов. В то время как на платформе Windows, (\) можно использовать прямой слэш (/) и обратной косой черты.

Полный список функций файловой системы PHP 5

Главное меню » Статьи » Полный список функций файловой системы PHP 5

Функции файловой системы позволяют манипулировать папками & файлами из определенного каталога.

Полный перечень функция файловой системы PHP 5

Ниже приведен полный список функций PHP 5, которые используются для управления файловой системы.

Функция в PHP Описание
basename() Возвращает имя файла
chgrp() Изменение группы файлов
chmod() Изменение разрешения файла
chown() Изменение владельца файла
clearstatcache() Очищает кэш состояния файлов
copy() Копирует файл
dirname() Возвращает имя каталога из пути
disk_free_space() Возвращает свободное пространство каталога
disk_total_space() Возвращает размер каталога
fclose() Закрывает открытый файл
feof() Тесты на конец файла в открытом файле
fflush() Сбрасывает буферизованный вывод в открытый файл
fgetc() Возвращает символ из открытого файла
fgetcsv() Анализирует строку из открытого файла, проверка полой CSV
fgets() Возвращает строку из открытого файла
fgetss() Возвращает строку с HTML и PHP теги удалены из открытого файла
file() Считывает файл в массив
file_exists() Проверяет, существует ли или нет файл или каталог
file_get_contents() Считывает файл в строку
file_put_contents() Записывает строку в файл
fileatime() Возвращает время последнего доступа к файлу
filectime() Возвращает время последнего изменения файла
filegroup() Возвращает идентификатор группы файла
fileinode() Возвращает номер inode файла
filemtime() Возвращает время последнего изменения файла
fileOwner() Возвращает идентификатор пользователя(владельца) файла
fileperms() Возвращает права доступа к файлу
filesize() Возвращает размер файла
filetype() Возвращает тип файла
flock() Блокирует или освобождает файл
fnmatch() Соответствует имени файла или строку с заданным шаблоном
eореп() Открывает файл или URL
fpassthru() Считывает из открытого файла, пока EOF, и записывает результат в буфер вывода
fputcsv() Форматирование строки в CSV и записывает его в открытый файл
fputs() Псевдоним FWRITE()
fread() Чтение из открытого файла
fscanf() Обрабатывает данные из открытого файла в соответствии с заданным форматом
fseek() Стремится в открытом файле
fstat() Возвращает информацию об открытом файле
ftell() Возвращает текущую позицию в открытом файле
ftruncate() Усекает открытый файл определенной длины
fwrite() Пишет в открытый файл
glob() Возвращает массив имен файлов/каталогов, соответствующий заданному шаблону
is_dir() Проверяет, является ли файл каталогом
is_executable() Проверяет, является ли файл исполняемым
is_file() Проверяет, является ли файл обычным файлом
is_link() Проверяет, является ли файл ссылку
is_readable() Проверяет, является ли файл для чтения
is_uploaded_file() Проверяет, был ли файл загружен с помощью POST HTTP
is_writable() Проверяет, является ли файл записываемый
is_writeable() Псевдоним is_writable()
lchgrp() Изменение групповой собственности по ссылке
lchown() Изменение владельца-пользователя ссылки
ссылка() Создает жесткую ссылку
linkInfo() Возвращает информацию жесткой ссылки
lstat() Возвращает символьную информацию о соединении
mkdir() Создает каталог
move_uploaded_file() Перемещает загруженный файл
parse_ini_file() Анализирует файл конфигурации
parse_ini_string() Анализирует строку конфигурации
pathInfo() Возвращает информацию о пути к файлу
pclose() Закрывает pipe
popen() Открывает pipe
readFile() Чтение и запись в файл
readlink() Возвращает символьную целевую ссылку
realpath() Возвращает абсолютный путь к файлу
realpath_cache_get() Возвращает запись кэша Realpath
realpath_cache_size() Возвращает размер кэша Realpath
rename() Переименовывает файл или каталог
rewind() Перемотка указателя на файл
rmdir() Удаляет пустой каталог
set_file_buffer() Устанавливает размер буфера открытого файла
stat() Возвращает информацию о файле
symlink() Создает символическую ссылку
tempnam() Создает уникальный временный файл
tmpfile() Создает уникальный временный файл
touch() Устанавливает время доступа и модификации файла
umask() Изменение прав доступа к файлам для файлов
unlink() Удаляет файл

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Php руководство по рнр 3 0 функции файловой системы

Форум Приднестровской поддержки CMS XOOPS.

По ссылке вы можете скачать последнюю версию CMS XOOPS. А так же прочитать инструкции по установке XOOPS и модулей

По данным ссылкам можно скачать модули нашей разработки.

Модуль инструкций. Ознакомьтесь с установкой XOOPS. C начальными познаниями по HTML,CSS, JS, PHP и др.

Добро пожаловать на сайт поддержки XOOPS.

Приднестровская поддержка XOOPS

Создание файла, запись в файл, вывод содержимого файла в список

Рассмотрим основные функции для работы с файлами.

□ fopen ( , [, [, ]]) открывает файл и возвращает дескриптор (идентифика­тор). Параметр может принимать следующие значения:

  • • r — только чтение. После открытия файла указатель устанавливается на начало файла. Если файл не существует, функция fopen() вернет false;
  • • r+ — чтение и запись. После открытия файла указатель устанавлива­ется на начало файла. Если файл не существует, функция fopen() вернет false;
  • • w — запись. Если файл не существует, то он будет создан. Если файл существует, то он будет перезаписан. После открытия файла указа­тель устанавливается на начало файла;
  • • w+ — чтение и запись. Если файл не существует, то он будет создан. Если файл существует, то он будет перезаписан. После открытия файла указатель устанавливается на начало файла;
  • • a — запись. После открытия файла указатель устанавливается на ко­нец файла. Если файл не существует, функция fopen() вернет false;
  • • a+ — чтение и запись. После открытия файла указатель устанавлива­ется на конец файла. Если файл не существует, то он будет создан. Содержимое файла не удаляется.
  • Кроме того, после режима может следовать модификатор:
  • b — файл будет открыт в бинарном режиме (по умолчанию);
  • t — файл будет открыт в текстовом режиме.

□ flock( , [, ]) позволяет блокировать файл или снять блокировку. Параметр может при­нимать следующие значения:

  • LOCK_SH или 1 — разделяемый доступ для чтения. Если другой про­цесс хочет записать что-либо в файл, то ему придется подождать сня­тия блокировки;
  • LOCK_EX или 2 — монопольный режим для записи. Файл не доступен для совместного использования;
  • LOCK_UN или 3 — снимает блокировку.

□ fread( , ) позволяет прочитать из файла строку указанной длины. Если функции не удалось прочесть заданное число байтов, то она возвратит то, что удалось прочитать.

□ fgets( [, ]) позволяет считывать из фай­ла по одной строке за раз. Считывание будет выполняться до тех пор, по­ка не встретится символ новой строки (\n), символ конца файла или из файла не будет прочитано указанное количество байт.

Илон Маск рекомендует:  Что такое код dbplus_rcreate

□ file( [, [, ]]) читает весь файл в массив, каждый элемент которого будет равен одной строке, про­читанной из файла. В параметре могут быть указаны следующие значения:

  • • FILE_USE_INCLUDE_PATH — поиск файла будет осуществлен в катало­гах, перечисленных в директиве include_path;
  • • FILE_IGNORE_NEW_LINES — не добавлять символ новой строки в конец элемента массива;

• FILE_SKIP_EMPTY_LINES — игнорировать пустые строки.

открывает файл и выводит все его содержимое в окно Web-браузера. Ес­ли во втором параметре указано значение true, то поиск файла будет осуществлен в каталогах, перечисленных в директиве include_path.

□ file_get_contents( [, [, [, [, ]]]]) возвращает содер­жимое файла в виде строки. В отличие от функции readfile() не выво­дит содержимое файла в окно Web-браузера. Если в параметре указано значение FILE_USE_INCLUDE_PATH, то поиск файла будет осуще­ствлен в каталогах, перечисленных в директиве include_path.

□ fwrite( , ) записывает данные в файл.

□ fflush( ) записывает изменения из буфера ввода/вывода на диск. Используется при обработке файлов большого объема, так как обычно запись на диск производится только при закрытии файла.

□ fclose( ) закрывает файл.

□ file_put_contents() записывает данные в файл. Если файл не существу­ет, то он будет создан. Если файл существует, то по умолчанию он будет перезаписан. Для записи в конец файла следует указать флаг FILE_APPEND. Вызов функции эквивалентен последовательности вызовов функций fopen(), fwrite() и fclose(). Формат функции:

В параметре могут быть указаны следующие значения (или их комбинация):

  • FILE_USE_INCLUDE_PATH — поиск файла будет осуществлен в катало­гах, перечисленных в директиве include_path;
  • FILE_APPEND — если файл существует, то данные будут добавлены в конец содержимого файла;
  • LOCK_EX — монопольный режим для записи. Файл не доступен для совместного использования.

Для примера создадим файл file.txt и запишем в него пять E-mail адресов по одному на строчке (листинг 41).

Листинг 41. Создание файла и запись в него

Если в процессе создания файла возникнет ошибка, то она будет подавлена оператором @, а в окне Web-браузера будет выведено сообщение «Ошибка». При этом дальнейшая обработка файла будет остановлена.

Теперь добавим новую запись в конец файла (листинг 42).

Листинг 42. Добавление новой записи в конец файла

А теперь выведем содержимое файла в список (листинг 43).

Листинг 43. Вывод содержимого файла в список

Программирование на языке PHP для чайников. Часть 1

Предлагаю вашему вниманию краткое руководство по языку PHP для чайников в нескольких частях. Гарантирую, написать свой первый рабочий PHP код вы сможете уже после прочтения этой серии статей (или в процессе чтения). Язык PHP один из самых простых в освоении языков программирования, это серверный (исполняется на стороне сервера) язык сценариев (интерпретируемый язык).

Используется он для создания веб-проектов. Может использоваться прямо в HTML коде. И хотя результат работы скрипта часто выводится непосредственно в браузере клиента, для работы PHP не достаточно только одного браузера. То-есть вам не получится запустить index.php файл прямо в браузере, как вы уже наверняка делали с файлом index.html. Для работы PHP сценариев и веб-страниц созданных с применением PHP потребуется веб-сервер.

Если у вас еще нет хостинг площадки для вашего сайта, тогда рекомендую поэкспериментировать с PHP сценариями на локальном сервере, предназначенном для тестирования проектов. Для организации локального сервера в операционной системе Windows (WAMP, Windows-Apache-MySQL-PHP) могут быть полезны пакеты: Денвер, XAMPP, AppServ, OpenServer и т.д. После установки этих пакетов, вы получите уже настроенный и готовый к использованию сервер, а управляться он будет через удобное меню самой программы. Также, существуют и отдельные реализации APACHE, MySQL и PHP для операционной системы Windows, но настраивать их придется уже самостоятельно через конфигурационные файлы и не будет никакого меню с галочками. Для запуска, перезапуска и остановки такого сервера можно будет использовать пакетные файлы *.bat или *.cmd (батник) с командами запуска, перезапуска или остановки служб APACHE и MySQL. Третий и самый непростой для новичка вариант — это виртуальная машина с установленной и настроенной операционной системой Linux (LAMP, Linux-Apache-MySQL-PHP). Готовые образы таких «виртуалок» часто встречаются в Интернете, так что вам могут понадобиться только знания настройки программ типа VirtualBox или VMware.

Подготовка к программированию на языке PHP для чайников

  1. PHP код следует помещать в файле index.php, сам файл должен быть размещен в корневом каталоге сайта, расположенного на веб-сервере.
  1. Весь код на языке PHP должен быть заключен между дескрипторами или сокращенный вариант , но веб-сервер может быть не сконфигурирован для использования сокращенного варианта такой записи, поэтому предпочтителен первый вариант.
  2. Вставлен PHP код может быть в любое место HTML кода.
  3. Комментирование в PHP коде осуществляется следующим образом:
  1. Для того, чтобы посмотреть ваш код, откройте веб-браузер и в адресной строке введите: http://localhost/www/MyEX/index.php

Вывод данных на экран с помощью языка PHP для чайников

  1. Вывод данных в окно (клиентскую область веб-браузера) с помощью PHP можно выполнить посредством оператора echo. Этот оператор позволяет вывести данные различных типов: числа, символьные строки и т.д.
  2. Синтаксис оператора вывода:
  1. Строковые данные заключаются в двойные или одинарные кавычки. В двойных кавычках код интерпретируется PHP. Все, что заключено в одинарные кавычки выводится без какой бы ни было интерпретации. Пример:

Пример $x кода

Пример $x кода

  1. Для вывода более подробной информации о переменной, которая может понадобиться при отладке программы, служит функция var_dump(). Ее синтаксис:
  1. В списке переменных указывается одно или несколько имен переменных. Эта функция ничего не возвращает. Пример:
  1. Менее информативной, чем var_dump(), функцией вывода сведений о переменных является:
  1. Для переменных типа «массив» эта функция выводит список вида индекс => элемент.

Переменные языка РНР для чайников

  1. Переменные – контейнеры для хранения данных. Данные, сохраняемые в переменной, называют значением этой переменной.
  2. Переменная имеет имя – последовательность букв, цифр и символа подчеркивания без пробелов и знаков препинания, начинающаяся обязательно с символа доллара ($), за которым должна следовать буква или символ подчеркивания.
  3. Правильные имена переменных: $_tel, $tmp, $my_, $address_234_45.
  4. Неправильные имена переменных: $234tel, my address, $tel:234.
  5. РНР является регистро-ависимым языком относительно имен переменных и констант. Однако ключевые слова могут использоваться в любом регистре.

Типы данных языка РНР и преобразование данных для чайников

Тип данных Пример Описание значений
Строковый или символьный (string) «Привет всем»
«123456»
«25 рублей»
Последовательность символов, заключенная в кавычки
Целочисленный, числовой (integer) -234
25
Число или последовательность цифр, перед которыми может быть указан знак числа
Числовой с плавающей точкой (float) 5.47
21.4
35E-3
Число с дробной частью (35Е2 означает 3500)
Логический (булевый, boolean) true
false
Этот тип имеет два значения: true (истина, да), false (ложь, нет)
NULL null Этот тип данных имеет одно значение — null
Массив (Array) Этот тип данных имеет одно множество значений, которые могут быть различных типов
Объект (Object) Программный объект, определяемый своими свойствами
  1. Для того, чтобы узнать какой тип переменной, нужно воспользоваться функцией:
  1. Для явного задания типа можно воспользоваться одним из двух способов:

Константы языка PHP для чайников

  1. Константой называется именованная величина, которая не изменяется в процессе выполнения программы (скрипта).
  2. В отличие от переменных, вы не можете изменять значения констант, которые были им присвоены при их объявлении. Константы удобно использовать для хранения значений, которые не должны изменяться во время работы программы. Константы могут содержать только скалярные данные (логического, целого, плавающего и строкового типов).
  3. В РНР константы определяются функцией define(). Вот ее синтаксис:

$name — имя константы.
$value — значение константы.
$case_sen — необязательный параметр логического типа, указывающий, следует ли учитывать регистр букв (true) или нет (false).

  1. Для проверки существования константы можно использовать функцию defined(). Данная функция возвращает true, если константа объявлена. Пример:

Различия между константами и переменными в языке PHP для чайников

  1. У констант нет приставки в виде знака доллара ($).
  2. Константы можно определить только с помощью функции define(), а не присваиванием значения.
  3. Константы могут быть определены и доступны в любом месте без учета области видимости.
  4. Константы не могут быть определены или аннулированы после первоначального объявления.
  5. Константы могут иметь только скалярные значения.

В этой статье я перечислил базовые понятия языка PHP для чайников. Теперь пора ознакомиться с конструкциям этого языка и перейти, непосредственно, к программированию. Об этом моя следующая статья — PHP программирование для чайников.

Все о файле php.ini

Где находится php.ini?

Местонахождение файла php.ini зависит от операционной системы, на которой работает сервер хостинг-провайдера. Чтобы узнать где он находится выполняем 4 простых шага:

    Создаем php-файл (имя может быть любое, но мы берем для примера myphpinfo.php), и добавляем в него следующие строки:


Как настроить php.ini?

Файл php.ini имеет такие правила синтаксиса «директива = значение». Если вы хотите добавлять комментарии (например, в которых указываете на что влияет данная настройка), то делайте после точки с запятой (все, что идет после этого знака не учитывается как команда). Вот пример:

max_execution_time = 40 ; Максимальное кол-во секунд исполнения скрипта

Далее рассматриваем основные настройки, которые можно сделать в файле php.ini:

Общие настройки

PHPengine = On ; Работа PHP-скриптов включена.

short_open_tag = On ; Разрешает упрощенно обрамлять PHP-код тагами

Precision = 12 ; Указывает сколько цифр будет после запятой, у чисел с плавающей точкой.

output_buffering = 4096 ; Автоматически будет включена буферизация вывода, с размером буфера указанным после «равно».

safe_mode = On ; Безопасный режим.

safe_mode_allowed_env_vars = PHP_ ; Разрешает пользователю работать только с переменными окружения, которые начинаются с PHP_. Если эта директива будет пустой (не будет иметь значения), то пользователи смогут изменять любые переменные окружения. Это может очень плохо сказаться на защите сценариев.

safe_mode_protected_env_vars = LD_LIBRARY_PATH ; Запрещает изменять переменные, которые перечисляются через запятую.

disable_functions = ; После знака «равно» нужно через запятую записать функции, которые вы хотите отключить (обычно это делается для безопасности)

disable_ нужно через запятую записать классы, вызов которых вы хотите запретить (обычно это делается для безопасности)

Ограничение ресурсов

max_execution_time = 40 ; Максимальное время на выполнение скрипта (в секундах)

max_input_time = 40 ; Максимальное время в секундах, которое дается скрипту может на обработку данных, которые загружаются.

memory_limit = 16M ; Максимум памяти, которые выделяется для работы одного скрипта

Обработка ошибок и журналы

error_reporting = E_ALL | E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE ; Указывает перечень ошибок, которые можно выводить.

display_errors = On; Разрешает выводить ошибки прямо в браузер (часто используют для удобства отладки).

display_startup_errors = On ; Ошибки появляющиеся при страрте PHP разрешено показывать.

log_errors = On ; Ошибки разрешено записывать в файл журнала.

log_errors_max_len = 1024 ; Максимальное число символов, которое может составлять длинна журнала.

track_errors = On ; Последние сообщение об ошибки сохранится в переменную $php_errormsg

html_errors = On ; Разрешен вывод сообщений об ошибках в HTML.

error_log = filename ; Задается имя журнала ошибок.

Обработка данных

variables_order = «EGPCS» ; Устанавливает порядок, в котором PHP будет регистрировать перменные (E — встроенные переменные, G — GET переменные, P — POST переменные, C — Cookies, S — сессии). Если убрать любую из букв, то работа соответствующих переменных будет блокироваться.

register_globals = On ; Включает возможность для обращения к переменным, которые поступают через GET/POST/Cookie/сессии, как к обычным переменным (например «$имяпеременной»).

register_argc_argv = On ; Разрешено создавать переменные $argv и $argc на основе информации из GET-метода.

post_max_size = 8M ; Устанавливает максимальный объём данных, который может быть принят.

magic_quotes_gpc = On ; Включает автоматическую обработку кавычек, которые поступают через POST/GET/Cookie.

auto_prepend_file = ; Содержимое файлов, указанных в этих директивах, PHP должен обрабатывать соответственно ДО выполнения сценария
auto_append_file = ; Содержимое файлов, указанных в этих директивах, PHP должен обрабатывать соответственно ПОСЛЕ выполнения сценария.

default_mimetype = «text/html» ; Задает кодировку для Content-type. По умолчанию будет использовано text/html без указания кодировки

doc_root = ; Задается корневая папка для PHP-сценариев.

extension_dir = «./» ; Задается папка, в которой будут хранится динамически загружаемые расширения.

Загрузка файлов

file_uploads = On ; Загрузка файлов на сервер разрешена.

upload_tmp_dir = ; Временная директория для файлов, которые загружаются.

upload_max_filesize = 2M ; Устанавливает максимальный размер файла, который можно загрузить.

Работа с сокетами

user_agent=»PHP» ; Задается переменная USER_AGENT, когда происходит подключение через сокет.

default_socket_timeout = 30 ; Максимальное время на прослушивание сокета (секунды).

Сессии

session.save_handler = files ; Уазывает, что информацию о сессиях нужно хранить в файлах

session.save_path = /tmp ; После знака «равно» нужно указать путь к папке в которой будет храниться информация о сессиях (важно чтобы она папка уже существовала)

session.use_cookies = 1 ; Разрешает использование cookie в сессиях

session.name = PHPSESSID ; Указывает на исользование в качестве имени сессии и сессионной cookie — ID сессии

session.auto_start = 0 ; Запрещает инициализировать сессии при начале соединения

session.cookie_lifetime = 0 ; Время жизни сессии («0» — значит, что сессия живет, пока окно браузера не будет закрыто)

Динамические расширения

extension=modulename.extension ; Можно использовать чтобы загружать внешние модули. Для Windows-систем, обычно пишут — extension=msql.dll, а для
UNIX — extension=msql.so

Работа с модулями MySQL

mysql.allow_persistent = On ; Разрешает устойчивые MySQL-соединения.

mysql.max_persistent = -1 ; Задает сколько максимум может быть устойчивых MySQL-соединений. Если указать -1, то это будет значить, что ограничений нет.

mysql.max_links = -1 ; Задает сколько максимум может быть устойчивых MySQL-соединений, и неустойчивых ODBC-соединений. Если указать -1, то это будет значить, что ограничений нет.

mysql.default_port = ; Порт для функции mysql_connect.

mysql.default_socket = ; Имя сокета для локальных соединений MySQL.

mysql.default_host = ; Имя хоста для функции mysql_connect.

mysql.default_user = ; Имя пользователя.

Если вы создали собственный файл php.ini и поместили его в папке сайта

В таком случае, в целях безопасности нужно заблокировать доступ к нему для всех, кроме вас. Для этого необходимо в файле .htaccess прописать такой код:

Но будьте внимательны, т.к. при данных настройках, все директивы (php_value, php_flag и т.д.) касающиеся настроек php через файл .htaccess перестанут работать (будет выдаваться ошибка 500 Internal Server Error).

Руководство по PHP

Руководство по PHP

PHP, что означает «PHP: Препроцессор Гипертекста», является широко используемым языком сценариев общего назначения с открытым исходным кодом. PHP создавался специально для ведения Web-разработок и может использоваться непосредственно в HTML-коде. Синтаксис языка берет начало из C, Java и Perl и является легким для изучения. Преимущественным назначением PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц, однако, область применения PHP не ограничивается только этим.
Это руководство состоит, главным образом, из справочника функций, а также содержит справочник языка, комментарии к наиболее важным из отличительных особенностей PHP, и другие дополнительные сведения.
Авторы: Stig Sæther Bakken, Alexander Aulbach, Egon Schmid, Jim Winstead, Lars Torben Wilson, Rasmus Lerdorf, Andrei Zmievski, Jouni Ahto

Илон Маск рекомендует:  Книги о Flash технологиях

Содержание

Предисловие
I. Приступая к работе
1. Введение
2. Краткое руководство
3. Установка
4. Конфигурация
II. Справочник языка
5. Основы синтаксиса
6. Типы
7. Переменные
8. Константы
9. Выражения
10. Operators
11. Control Structures
12. Functions
13. Classes and Objects
14. References Explained
III. Безопасность
15. Безопасность
IV. Отличительные особенности
16. HTTP authentication with PHP
17. Cookies
18. Handling file uploads
19. Работа с удаленными файлами
20. Connection handling
21. Persistent Database Connections
22. Safe Mode
23. Использование PHP в командной строке
V. Справочник функций
I. Функции для работы с сервером Apache
II. Функции для работы с массивами
III. Aspell functions [deprecated]
IV. BCMath Arbitrary Precision Mathematics Functions
V. Функции сжатия Bzip2
VI. Calendar Functions
VII. CCVS API Functions [deprecated]
VIII. COM support functions for Windows
IX. Class/Object Functions
X. ClibPDF Functions
XI. Crack Functions
XII. Функции CURL, Client URL Library
XIII. Cybercash Payment Functions
XIV. Cyrus IMAP administration Functions
XV. Функции определения типа символов
XVI. Database (dbm-style) Abstraction Layer Functions
XVII. Функции для работы с датой и временем
XVIII. dBase Functions
XIX. DBM Functions [deprecated]
XX. dbx Functions
XXI. DB++ Functions
XXII. Direct IO Functions
XXIII. Функции для работы с каталогами
XXIV. DOM XML Functions
XXV. .NET Functions
XXVI. Error Handling and Logging Functions
XXVII. File Alteration Monitor Functions
XXVIII. FrontBase Functions
XXIX. filePro Functions
XXX. Функции для работы с файловой системой
XXXI. Forms Data Format Functions
XXXII. FriBiDi Functions
XXXIII. FTP Functions
XXXIV. Function Handling Functions
XXXV. Gettext
XXXVI. GMP Functions
XXXVII. Функции протокола HTTP
XXXVIII. Hyperwave Functions
XXXIX. Hyperwave API Functions
XL. iconv Functions
XLI. Image Functions
XLII. IMAP, POP3 and NNTP Functions
XLIII. Informix Functions
XLIV. InterBase Functions
XLV. Ingres II Functions
XLVI. IRC Gateway Functions
XLVII. PHP / Java Integration
XLVIII. LDAP Functions
XLIX. LZF Functions
L. Mail Functions
LI. mailparse Functions
LII. Mathematical Functions
LIII. Multibyte String Functions
LIV. MCAL Functions
LV. Mcrypt Encryption Functions
LVI. MCVE Payment Functions
LVII. Mhash Functions
LVIII. Mimetype Functions
LIX. Microsoft SQL Server Functions
LX. Ming functions for Flash
LXI. Miscellaneous Functions
LXII. mnoGoSearch Functions
LXIII. mSQL Functions
LXIV. Функции СУБД MySQL
LXV. Improved MySQL Extension
LXVI. Mohawk Software Session Handler Functions
LXVII. muscat Functions
LXVIII. Network Functions
LXIX. Ncurses Terminal Screen Control Functions
LXX. Lotus Notes Functions
LXXI. NSAPI-specific Functions
LXXII. Unified ODBC Functions
LXXIII. Object Aggregation/Composition Functions
LXXIV. Функции для работы с Oracle
LXXV. OpenSSL Functions
LXXVI. Oracle Functions
LXXVII. Ovrimos SQL Functions
LXXVIII. Output Control Functions
LXXIX. Object property and method call overloading
LXXX. PDF functions
LXXXI. Verisign Payflow Pro Functions
LXXXII. PHP Options&Information
LXXXIII. POSIX Functions
LXXXIV. PostgreSQL Functions
LXXXV. Process Control Functions
LXXXVI. Program Execution Functions
LXXXVII. Printer Functions
LXXXVIII. Pspell Functions
LXXXIX. GNU Readline
XC. GNU Recode Functions
XCI. Функции для работы с регулярными выражениями (Perl-совместимые)
XCII. qtdom Functions
XCIII. Regular Expression Functions (POSIX Extended)
XCIV. Semaphore, Shared Memory and IPC Functions
XCV. SESAM Database Functions
XCVI. Session Handling Functions
XCVII. Shared Memory Functions
XCVIII. SimpleXML functions
XCIX. SOAP Functions
C. SQLite
CI. Shockwave Flash Functions
CII. SNMP Functions
CIII. Socket Functions
CIV. Standard PHP Library (SPL) Functions
CV. Stream Functions
CVI. Функции обработки строк
CVII. Sybase Functions
CVIII. TCP Wrappers Functions
CIX. Tidy Functions
CX. Tokenizer Functions
CXI. URL Functions
CXII. Variable Functions
CXIII. vpopmail Functions
CXIV. W32api Functions
CXV. WDDX Functions
CXVI. XML Parser Functions
CXVII. XML-RPC Functions
CXVIII. xdiff Functions
CXIX. XSL functions
CXX. XSLT Functions
CXXI. YAZ Functions
CXXII. YP/NIS Functions
CXXIII. Zip File Functions (Read Only Access)
CXXIV. Zlib Compression Functions
VI. Zend API
24. Overview
25. Extension Possibilities
26. Source Layout
27. PHP’s Automatic Build System
28. Creating Extensions
29. Using Extensions
30. Troubleshooting
31. Source Discussion
32. Accepting Arguments
33. Creating Variables
34. Duplicating Variable Contents: The Copy Constructor
35. Returning Values
36. Printing Information
37. Startup and Shutdown Functions
38. Calling User Functions
39. Initialization File Support
40. Where to Go from Here
41. Reference: Some Configuration Macros
42. API Macros
VII. PHP API: интерфейс программирования для написания расширений
43. Streams API for PHP Extension Authors
VIII. ЧАВО: ЧАсто задаваемые Вопросы и Ответы на них
44. General Information
45. Mailing lists
46. Obtaining PHP
47. Database issues
48. Installation
49. Build Problems
50. Using PHP
51. PHP and HTML
52. PHP and COM
53. PHP and other languages
54. Migrating from PHP 2 to PHP 3
55. Migrating from PHP 3 to PHP 4
56. Miscellaneous Questions
IX. Приложения
A. История PHP и смежных проектов
B. Migrating from PHP 4 to PHP 5
C. Migrating from PHP 3 to PHP 4
D. Migrating from PHP/FI 2 to PHP 3
E. Отладка PHP
F. Extending PHP 3
G. Список псевдонимов функций
H. List of Reserved Words
I. List of Resource Types
J. List of Supported Protocols/Wrappers
K. List of Available Filters
L. Список поддерживаемых транспортных протоколов
M. Таблица сравнения типов в PHP
N. List of Parser Tokens
O. Об этом руководстве
P. Open Publication License
Q. Список функций
R. Что отсутствует в этом руководстве
X. Руководство в формате HTML Help
57. About This Edition
58. Using PHP Manual CHM Edition
59. The Full Text Search
60. Specialities of this Edition
61. Integrating the PHP Manual
62. Skin development
63. CHM Edition Credits

Бесплатно скачать электронную книгу в удобном формате, смотреть и читать:
Скачать книгу Руководство по PHP — fileskachat.com, быстрое и бесплатное скачивание.

Скачать chm
Ниже можно купить эту книгу по лучшей цене со скидкой с доставкой по всей России. Купить эту книгу

Работа с файловой системой

Создание файла

Функция fopen

Вообще говоря, в PHP не существует функции, предназначенной именно для создания файлов. Большинство функций работают с уже существующими файлами в файловой системе сервера. Есть несколько функций, которые позволяют создавать временные файлы, или, что то же самое, файлы с уникальным для текущей директории именем. А вот для того, чтобы создать самый обычный файл, нужно воспользоваться функцией, которая открывает локальный или удаленный файл. Называется эта функция fopen () . Что значит «открывает файл»? Это значит, что fopen связывает данный файл с потоком управления программы. Причем связывание бывает различным в зависимости от того, что мы хотим делать с этим файлом: читать его, записывать в него данные или делать и то и другое. Синтаксис этой функции такой:

В результате работы эта функция возвращает указатель (типа ресурс) на открытый ею файл. В качестве параметров этой функции передаются: имя файла, который нужно открыть, тип доступа к файлу (определяется тем, что мы собираемся делать с ним) и, возможно, параметр, определяющий, искать ли указанный файл в include_path . Есть еще один опциональный параметр, но о нем мы говорить не будем, дабы не усложнять изложение. Обсудим подробнее каждый из этих трех параметров.

Параметр имя_файла должен быть строкой, содержащей правильное локальное имя файла или URL-адрес файла в сети. Если имя файла начинается с указания протокола доступа (например, http://. или ftp://. ), то интерпретатор считает это имя адресом URL и ищет обработчик указанного в URL протокола. Если обработчик найден, то PHP проверяет, разрешено ли работать с объектами URL как с обычными файлами (директива allow_url_fopen ). Если allow_url_fopen=off , то функция fopen вызывает ошибку и генерируется предупреждение. Если имя файла не начинается с протокола, то считается, что указано имя локального файла. Чтобы открыть локальный файл, нужно, чтобы PHP имел соответствующие права доступа к этому файлу.

Параметр use_include_path , установленный в значение 1 или TRUE, заставляет интерпретатор искать указанный в fopen () файл в include_path . Напомним, что include_path — это директива из файла настроек PHP, задающая список директорий, в которых могут находиться файлы для включения. Кроме функции fopen () она используется функциями include() и require() .

Параметр тип_доступа может принимать одно из следующих значений (см. таб. 9.1).

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

Создавая файл, нужно учитывать, под какой операционной системой вы работаете, и под какой ОС предположительно этот файл будет читаться. Дело в том, что разные операционные системы по-разному отмечают конец строки. В Unix-подобных ОС конец строки обозначается \n , в системах типа Windows — \r\n . Windows предлагает специальный флаг t для перевода символов конца строки систем типа Unix в свои символы конца строки . В противоположность этому существует флаг b , используемый чаще всего для бинарных файлов , благодаря которому такой трансляции не происходит. Использовать эти флаги можно, просто дописав их после последнего символа выбранного типа доступа к файлу. Например, открывая файл на чтение, вместо r следует использовать rt , чтобы перекодировать все символы конца строки в \r\n . Если не использовать флаг b при открытии бинарных файлов , то могут появляться ошибки, связанные с изменением содержимого файла. Из соображений переносимости программы на различные платформы рекомендуется всегда использовать флаг b при открытии файлов с помощью fopen () .

Таблица 9.1. Значения принимаемые параметром тип доступа
Тип доступа Описание
r Открывает файл только для чтения; устанавливает указатель позиции в файле на начало файла.
r+ Открывает файл для чтения и записи; устанавливает указатель файла на его начало.
w Открывает файл только для записи; устанавливает указатель файла на его начало и усекает файл до нулевой длины. Если файл не существует, то пытается создать его.
w+ Открывает файл для чтения и записи; устанавливает указатель файла на его начало и усекает файл до нулевой длины. Если файл не существует, то пытается создать его.
a Открывает файл только для записи; устанавливает указатель файла в его конец. Если файл не существует, то пытается создать его.
a+ Открывает файл для чтения и записи; устанавливает указатель файла в его конец. Если файл не существует, то пытается создать его.
x Создает и открывает файл только для записи; помещает указатель файла на его начало. Если файл уже существует, то fopen () возвращает false и генерируется предупреждение. Если файл не существует, то делается попытка создать его. Этот тип доступа поддерживается начиная с версии PHP 4.3.2 и работает только с локальными файлами.
x+ Создает и открывает файл для чтения и записи; помещает указатель файла на его начало. Если файл уже существует, то fopen () возвращает false и генерируется предупреждение. Если файл не существует, то делается попытка создать его. Этот тип доступа поддерживается, начиная с версии PHP 4.3.2, и работает только с локальными файлами.

Что происходит, если открыть или создать файл с помощью fopen не удается? В этом случае PHP генерирует предупреждение, а функция fopen возвращает как результат своей работы значение false . Такого рода предупреждения можно «подавить» (запретить) с помощью символа @ .

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

Таким образом, функция fopen () позволяет создать только лишь пустой файл и сделать его доступным для записи . Как же записать данные в этот файл? Как прочитать данные из уже существующего файла?

Прежде чем ответить на эти вопросы, рассмотрим, как закрыть установленное с помощью fopen () соединение.

Настройка файла php.ini

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

Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini. В этой инструкции мы рассмотрим как выполняется настройка файла php.ini в операционных системах Linux, хотя все информация подойдет и для Windows.

Если у вас еще не установлен интерпретатор языка программирования php, то вы можете ознакомиться со статьей установка lamp в Ubuntu 16.04.

Расположение и синтаксис php.ini

Для каждой версии интерпретатора конфигурационный файл php.ini находится в отдельной папке. Но все конфигурационные файлы находятся в папке /etc/php, например, /etc/php5:

Папка conf.d содержит общие настройки для различных расширений и модулей, они не будут нас сейчас интересовать. Более интересны следующие три папки — apache, cli и fpm. В них содержатся конфигурационные файлы php.ini для каждого из этих интерпретаторов.

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

Что касается синтаксиса файла, то он разделен на секции, сначала идет секция настройки php, которая разделена на подсекции в зависимости от типа настроек, дальше идут секции настройки разных модулей. Синтаксис самих настроек очень прост, он соответствует привычному синтаксису ini файлов. Строка начинается с имени настройки, затем следует знак равно, а за ним значение:

имя_настройки = значение_параметра

Символами [] обозначается имя секции, например, [PHP], а символ ; означает комментарий, он и все символы после него не читаются интерпретатором. А теперь рассмотрим как выполняется настройка php.ini и переберем самые важные параметры.

Настройка файла php.ini

Для удобства ориентирования мы разобьем все параметры по категориях в зависимости от их назначения. Вам будет достаточно найти нужный параметр и изменить его значение. А теперь откройте файл настроек php, например, для модуля apache и перейдем к настройке. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные:

sudo gedit /etc/php5/apache/php.ini

Сначала идет немного информации о самом файле в виде комментариев, затем интересующие нас настройки.

Вывод ошибок в php

Настройка php 7 обычно начинается с конфигурации вывода ошибок. Все настройки вывода ошибок находятся в разделе Error handling and logging. По умолчанию вывод ошибок на экран во время выполнения скрипта отключен. Это сделано для того, чтобы пользователи не смогли увидеть ничего лишнего. Вместо этого, все ошибки записываются в лог файл. Если вы используете php на домашнем компьютере, то такие меры не нужны и вы можете сразу выводить все на экран:

Илон Маск рекомендует:  Что такое код defdlgproc

Замените off на on. В php используются различные типы ошибок, например, критические, предупреждения, ошибки синтаксиса, с помощью строки error_reporting вы можете включить вывод только определенных типов ошибок:

Если нужно объединить несколько типов ошибок, то используйте символ &, а для отключения отображения поставьте перед типом знак

. Приведенный выше пример отображает все ошибки (E_ALL), кроме сообщений об устаревших функциях (E_DEPRECATED). Вы можете отключить все типы использовав 0:

Включите запись ошибок php в лог файл, если не выводите их на экран:

Чтобы не засорять лог однотипными сообщениями можно игнорировать повторяющиеся ошибки в пределах одного исполнения:

Ограничения ресурсов

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

По умолчанию максимальное время выполнения скрипта — 30 секунд, сделаем минуту:

Если указать 0, то скрипт может выполняться бесконечно. Вы также можете ограничить время, на протяжении которого скрипт будет загружать данные, 60 секунд:

Максимальное количество переменных в GET и POST:

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

Максимальный размер данных, передаваемых в POST запросе тоже ограничивается, размер по умолчанию — 8 Мегабайт:

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

С помощью директив disable_functions и disable_classes вы можете отключить использование в скриптах определенных функций или классов, например, это может быть полезно для веб-хостингов. В этом примере мы отключаем использование функции ini_set, которая позволяет менять настройки php из скрипта:

Директории по умолчанию

Файл настройки php.ini позволяет указать пути в файловой системе по умолчанию для различных действий. Вы можете задать папки где система будет искать скрипты, если вы попытаетесь подключить их с помощью инструкции include:

Папка с модулями php:

Папка для записи временных файлов:

Загрузка файлов

Для того чтобы пользователи могли загружать свои файлы на сервер, например, фото, нужно включить эту функцию в php:

Максимальный размер загружаемого файла:

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

Настройка php.ini практически завершена, нам остались лишь расширения.

Настройка расширений

Расширения позволяют очень сильно увеличить функциональность php. Например, благодаря расширениям вы можете использовать в своих скриптах базы данных mysql, postgresql, mysqli, sqlite, графическую библиотеку gd и многое другое. Все это включается в этом разделе.

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

extension=php_mysql.so
extension=php_mbstring.so
extension=php_pgsql.so

Обратите внимание, что для windows расширение будет иметь формат dll, но для linux нужно использовать so. В следующих секциях идет настройка каждого из расширений, но мы их рассматривать не будем потому что они обычно не требуют настройки.

Выводы

В этой статье мы рассмотрели как выполняется настройка php на сервере или обычном компьютере для разработки веб-сайтов. Файл настроек php имеет довольно простую структуру и с ним довольно не сложно справиться. После завершения всех настроек и сохранения изменений не забудьте перезагрузить веб-сервер или сервис php-fpm.

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

Как врапперы PHP могут быть использованы для атаки на веб-приложения

Содержание статьи

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

WARNING

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

Intro

Уязвимости, связанные с реализованным в PHP механизмом врапперов, обсуждаются достаточно давно. Ссылки на них присутствуют в OWASP TOP 10 и WASC TCv2. Однако ряд особенностей реализации кодирования данных приводит к тому, что даже приложения, разработанные с учетом требований безопасности, могут содержать уязвимости (включая критические). В этой статье мы сначала кратко рассмотрим, что представляют собой PHP wrappers и как они могут быть полезны программистам. Затем разберем их особенности, которые позволяют обходить встроенные в приложение фильтры безопасности и реализовывать атаки, связанные с несанкционированным доступом к файловой системе и выполнением произвольного кода.

Wrapper’ы

В PHP есть такое понятие, как потоки (Streams), которые появились в интерпретаторе начиная с версии 4.3.0. Это абстрактный слой для работы с файлами, сетью, сжатыми данными и другими ресурсами, использующими единый набор функций. В простейшем определении, поток — это ресурс, имеющий «потокообразное» поведение. То есть ресурс, из которого можно читать, в который можно писать и внутри которого можно перемещаться. Для примера рассмотрим функцию fopen. Согласно официальной документации, она имеет следующий синтаксис:

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

Но помимо тривиального пути к файлу могут быть использованы так называемые врапперы (wrapper). Лучший способ пояснить, что это такое, — привести несколько примеров. Итак, с использованием врапперов через все ту же функцию fopen становится возможным:

  • скачивать файлы с FTP: ftp://user:password@10.0.0.1/pub/file.txt;
  • обращаться, если доступ к ним ограничен, к server-status/server-info по IP: http://127.0.0.1/server-status;
  • обращаться к файловым дескрипторам, открытым на чтение (PHP >= 5.3.6): php://fd/XXX;
  • и даже выполнить команды OS (если установлено расширение expect): expect://ls.

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

Секция Registered PHP Streams в выводе phpinfo()

Хакер #163. Лучшие гаджеты для хакера

В рассмотренном примере врапперы использовались в режиме read. Если же происходит запись данных, то и в этом случае врапперы также могут расширить возможности многих функций. Например, функция copy() поддерживает врапперы в обоих своих аргументах, и если во втором аргументе используется обертка php://output, то копируемый файл отправляется в выходной буфер. Таким образом, функция copy() позволяет не только копировать файлы, но и читать их.

Аналогичным образом можно использовать функцию file_put_contents и любую другую функцию, поддерживающую враппер в режиме write:

В версии PHP 5.3.6 появился враппер php://fd, который предоставляет прямой доступ к файловым дескрипторам. Если PHP установлен как модуль Apache’а, враппер php://fd дает возможность записывать произвольные данные в access_log/error_log (обычно права на этих файлах 644, и напрямую в них может писать только root).

Надо сказать, что в PHP довольно много встроенных врапперов, но при этом можно создавать и регистрировать собственные обертки, используя функцию stream_wrapper_register. Более подробную информацию ты сможешь найти на официальном сайте PHP. Полный список доступных врапперов можно посмотреть с секции phpinfo — Registered PHP Streams.

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

Что таит в себе ZIP?

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

В Linux-системах модуль zip становится доступным, если PHP скомпилирован с опцией —enable-zip. Архивировать можно не только отдельные файлы, но и целые каталоги; чтобы сохранялась структура каталога, в именах файлов, добавляемых в архив, допустимо использовать слеш /. Еще одной важной особенностью модуля zip является возможность обрабатывать файлы с произвольным именем: главное, чтобы содержимое файла было корректно сформированным zip-архивом.

После того как zip-архив создан, с помощью враппера zip:// можно напрямую обращаться к файлам внутри архива.

Возможность помещать в архив файлы, в именах которых присутствует слеш, позволяет эксплуатировать уязвимости типа Remote File Include, при отсутствии null-байта. Для примера рассмотрим следующий простой скрипт:

Конечно, добиться выполнения кода в данном случае можно разными путями. Но использование врапперов http://, ftp://, data:// ограничивается директивой allow_url_include, а использованию null-байта при инклуде локальных файлов скорей всего помешает директива magic_quotes_gpc. И может даже показаться, что при allow_url_include=Off и magic_quotes_gpc=On проэксплуатировать уязвимость никаким образом не получится. Но есть еще один способ, не описанный ранее в паблике!

Для начала предположим, что есть возможность создавать на атакуемом сервере файлы. Тогда, создав zip-архив, как показано в примере выше, возможно выполнить PHP-код, используя враппер zip://.

Если нет возможности создать нужный файл с помощью PHP-функции, то можно использовать временные файлы, которые создает PHP при загрузке контента через HTML-форму. Путь до временного файла можно узнать из phpinfo(). Более подробные сведения о том, как использовать временные файлы при эксплуатации уязвимостей типа LFI/RFI, можно почерпнуть на форуме rdot.org. Важно отметить, что директива allow_url_fopen не ограничивает применение обертки zip://.

Where is my data://?

Враппер data:// с момента своего появления привлекал внимание специалистов по веб-безопасности. В официальной документации этот враппер предлагают использовать в очень ограниченной форме. Но согласно спецификации RFC 2379, эта обертка допускает более развернутый синтаксис:

При этом mediatype может либо полностью отсутствовать, либо быть заполнен произвольными значениями:

Эту особенность враппера можно использовать для обхода проверок и фильтров. Например, в популярном скрипте TimThumb v1.x есть такой фильтр:

Обойти эту проверку можно следующим образом:

В PHP существует такая функция, как stream_get_meta_data(). Согласно официальной документации, она извлекает метаданные из потоков и файловых указателей:

При этом в возвращаемом массиве содержатся элементы с четко заданными ключами, и задача добавления в этот массив новых элементов выглядит на первый взгляд довольно проблематичной. Но с помощью враппера data:// можно довольно просто манипулировать этим массивом! Как? Приведу пример:

Документация к врапперу data://

Если в переменной $file вместо имени локального файла использовать враппер data,

то можно легко переопределить параметр $password и, используя куки, пройти авторизацию.

Холодный компресс

Согласно документации, обертка compress.zlib:// позволяет распаковывать gz-архивы. Если с помощью этого враппера обрабатывать данные, не являющиеся zlib-архивом, то данные возвращаются без изменений.

Например, прочитать файл /etc/hosts можно таким образом:

«Очень полезно!» — подумаешь ты :). Сейчас будет круче. Если ты хоть немного программировал на PHP для веба, то наверняка знаком с функцией prase_url(). Напомню, эта функция осуществляет парсинг URL. И тут есть один интересный момент: на вход функции можно предоставить не только URL, но и строку довольно общего типа:

Учитывая эту особенность, можно обходить различные проверки и фильтры на основе функции parse_url, используя многофункциональные врапперы. Для примера рассмотрим следующий скрипт, который, по задумке разработчиков, может загружать файлы только с доверенного хоста img.youtube.com.

В штатном режиме превью с img.youtube.com загружаются следующим образом:

В этом случае фильтр можно обойти и с помощью враппера compress.zlib://.

Помимо этого, довольно просто обойти фильтр на имя хоста и загрузить на сервер файл с произвольным именем и содержимым при помощи ранее рассмотренного нами враппера data://:

В этом случае локальные файлы будут копироваться в папку с превью: если эта папка доступна для прямого обращения из браузера, то появляется возможность просматривать системные файлы. Из этого примера видно, что использование врапперов data:// и compress.zlib:// может быть полезным в скриптах, скачивающих файлы с удаленных хостов. Одним из таких скриптов является TimThumb.

Уязвимость в плагине WordPress

Эксплуатация уязвимостей в TimThumb v1.x

TimThumb — это популярный скрипт для работы с изображениями, который используется во многих темах и плагинах для WordPress. В августе 2011 года в скрипте TimThumb v 1.32 была найдена критическая уязвимость, позволяющая загружать на атакуемый сервер вместо изображений с доверенных хостов файлы с PHP-кодом. Почти в одночасье в публичном доступе появилась адвизори, подробно рассказывающая об эксплуатации этой уязвимости.

Суть уязвимости заключалась в том, что скрипт некорректно проводил проверку URL по списку доверенных хостов, с которых возможно было загрузить изображения. Для обхода фильтров, к примеру по доверенному хосту blogger.com, предлагалось зарегистрировать домен четвертого уровня, содержащего в себе URL доверенного хоста, например blogger.com.attacker.com, и загружать файлы с этого домена.

Этим способом можно было проэксплуатировать уязвимость до версии 1.32 (revision 142). Но более новые версии оказались также уязвимы. Рассмотрим, каким образом происходит загрузка изображений в версии 1.34 (revision 145):

Несложно заметить, что при проектировании функции check_external было допущено несколько логических ошибок:

  1. После выполнения большинства проверок в функцию parse_str попадают нефильтрованные пользовательские данные. Таким образом, можно переопределить переменные, которые до этого проверялись: $url_info[‘host’], $src, $local_filepath. Поэтому возможно загружать файлы с любых серверов.
  2. После загрузки файла на сервер на основе getimagesize проверяется, является ли файл изображением. Если проверка не пройдена, то файл удаляется. Но так как есть возможность влиять на переменную $local_filepath, то к локальному файлу можно обращаться, используя врапперы php://filter, compress.zlib://. А в этом случае функция unlink не сможет удалить файл.

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

Ветка 1.х заканчивается 149-й ревизией, в которой тоже есть уязвимости. В этой ревизии уже убрана функция parse_str и поэтому нет возможности произвести перезапись переменных. Но фильтры, проверяющие валидность URL, проверяют только вхождение соответствующих подстрок в строке $src. При этом если функция curl_init недоступна на атакуемом сервере, то загрузка файлов осуществляется с помощью file_get_contents/file_put_contents. Важно отметить, что эти функции, в отличие от curl_init, поддерживают все доступные в PHP врапперы.

Таким образом, с помощью враппера data:// можно обойти все фильтры и создать файл в директории кеша с произвольным содержимым:

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL