Пишем свой PHP Бойко Артем (mr.prutik@mail.ru) Хакер, номер #089, стр. 089-118-1 Разрабатываем собственный язык web-сценариев Perl, Python, PHP, ASP – языков для веб-кодинга сейчас навалом, и все очень активно ими пользуются. Еще бы: динамический контент, удобное управление сайтом, форумы, "голосовалки", движки всякие. В общем, одним статичным HTML для создания сайта уже очень давно никто не обходится. Типичные ошибки, появляющиеся изо дня в день в скриптах на этих языках чуть ли не стандартизированы. Чувствуешь всю опасность ситуации? Чтобы сайт было действительно сложно сломать, он должен быть либо на обычном HTML, без всяких динамических наворотов, либо использовать свой собственный язык сценариев, еще неизвестный взломщику. А если учесть, что без динамического контента сейчас не жизнь, то у нас один выход – написать свой личный скриптовой язык и воспользоваться им при разработке сайта. Все, что нам необходимо для быстрого старта, – это веб-сервер, роль которого успешно сыграет Denwer и любой компилятор Си на твой выбор. Интерпретатор web-языка может работать как cgi-приложение или как модуль web-сервера. Типичный модуль – это PHP. Типичные же представители cgi-языков – это Perl или Python. Ты, наверное, замечал, что скрипты для них помещены в отдельную папку (чаще всего cgi-bin), а первая их строка представляет собой что-нибудь вроде #!/usr/bin/perl. Если залезть в директорию /usr/bin/, то можно обнаружить там файл perl (perl.exe в windows) – это интерпретатор языка Perl. Это означает, что первой строкой в cgi-скриптах идет путь к приложению, ответвленному за их обработку. Web-сервер должен запустить его с такими параметрами, чтобы интепретатор понял, что ему нужно интерпретировать. Давай посмотрим, с какими. Для этого создавай в Си консольное приложение и вбивай туда следующий код: #include <iostream> #include <stdlib.h> // подключаем нужные хидеры using namespace std; // пространство имен int main(int argc, char *argv[]) { for (int i = 0; i < argc; ++i) { printf(argv[i]); // выводим переданный аргумент printf("<br>"); // переходим на следующую строку } return 0; // говорим, что все хорошо } Эта небольшая программка просто выводит каждый аргумент, с которым она была запущена. Нам очень важно разобраться, как же работают cgi-интерпретаторы, так как Apache будет ее запускать вовсе не на наших глазах. Компилируем код и сохраняем получившийся файл в /usr/bin/test.exe. Далее создаем файл /home/localhost/cgi-bin/test.tst (я использовал расширение tst, хотя ты можешь использовать любой - хоть обычный cgi) со следующим содержанием: #!/usr/bin/test // адрес нашего интерпретатора print "Content-type: text/html\n\n"; // даем знать, какого типа возвращаемый результат Открываем браузер и заходим по адресу: http://localhost/cgi-bin/test.tst. На экране мы увидим, что наша программа запускалась с двумя аргументами: /usr/bin/test и \home\LOCALH~1\cgi-bin\test.tst. Несложно понять, что первый является адресом интепретатора, а второй - адресом скрипта на сервере, который мы открывали браузером. Многое стало ясно. Оказалось, что переменная argv[1] в Си будет содержать имя интерпретируемого файла. |