|
- Содержание
- Соглашения по расширениям
- Макросы
- Работа с памятью
- Функции работы с файлами и директориями
- Работа со строками
- Сложные типы
Предварительные условия. Прежде чем работать с остальной частью этой главы, вы должны запросить чистые,
немодифицированные исходные деревья вашего любимого Web-сервера.
Мы работаем с Apache (доступен с http://www.apache.org)
и, конечно, с PHP (доступен с http://www.htm.net).
Альтернативно вы можете использовать архивы исходников на
CD-ROM, сопровождающим эту книгу. Все примеры в этой книге работают
с архивами исходников с CD-ROM; мы не можем гарантировать это для каждой
версии, полученной из Net. Однако, поскольку программное обеспечение Open Source разрабатывается очень быстро,
велики шансы того, что версии на CD-ROM уже устарели и не имеют
всей необходимой функциональности. Если вы не можете получить с
соответствующих Web-сайтов официальные архивы для работы, поэкспериментируйте с архивами на CD-ROM.
Убедитесь, что вы можете скомпилировать рабочее окружение PHP самостоятельно!
Мы здесь не углубляемся в этот вопрос, поскольку вы уже изучали базовые возможности в этой главе. |
Прежде чем начинать обсуждение кода, вы должны познакомиться с исходным
деревом, чтобы быстро перемещаться по PHP-файлам. Это необходимо для реализации и отладки расширений.
После извлечения PHP-архива вы увидите структуру директорий, примерно как на Рисунке 9.2.
Рисунок 27-1. Рисунок 9.2. Структура основных директорий исходного дерева PHP.
В таблице описано содержимое большинства этих директорий.
Директория |
Содержимое |
---|
php-4 | Главные исходные файлы PHP и главные header-файлы; здесь вы найдёте все
определения API РНР, макросов etc. (это важно). | ext |
Хранилище динамических и встроенных модулей; по умолчанию это "официальные"
модули PHP, которые интегрированы в главное исходное дерево. В PHP 4.0
можно компилировать эти стандартные расширения как динамически загружаемые модули (как минимум те,
которые это поддерживают). | pear | Директория для хранения классов PHP.
На момент написания она была всё ещё в стадии разработки,
но здесь делается попытка создания чего-либо подобного CPAN для Perl. |
sapi | Содержит код для различных абстрактных слоёв сервера. |
TSRM | Местонахождение "Thread SafeResource Manager" (TSRM) для Zend и PHP. |
Zend | Местонахождение файла Zend; здесь вы найдёте все определения Zend API, макросов etc. (это
важно). |
Рассмотрение всех файлов, входящих в пакет PHP выходит за рамки этой главы.
Однако вы должны хотя бы кратко просмотреть следующие файлы: php.h, размещённый в главной директории PHP. Это файл содержит определения
большинства макросов и API РНР. zend.h, размещённый в главной директории Zend. Это файл содержит большинство макросов
и определений Zend'а. zend_API.h, также размещённый в директории Zend, который определяет API Zend'а.
Вы должны также проследовать по некоторым включениям в эти файлы; например,
относящимся к Zend executor, поддержке файлов инициализации PHP, и подобным.
После чтения этих файлов выделите время для просмотра пакета, чтобы увидеть
взаимосвязи файлов и модулей - как они соотносятся и, особенно, как они
используют друг друга. Это также поможет вам приспособиться к стилю
кодирования, в котором авторизован PHP. Для расширения PHP вы должны быстро приспособиться к этому стилю.
Zend построен с использованием определённых соглашений; чтобы исключить
нарушение стандартов Zend, вы должны следовать правилам, описанным в следующих разделах. | |