Сделано в Раскрутке

Архив эхоконференции RU.PHP

- RU.PHP ------------------------------------------------------------- RU.PHP -
 Msg  : #74 [2443]
 От   : FAQ AutoPoster                2:5012/8.13         12 мая 03, 14:41
 Кому : All                                               16 мая 03, 21:09
 Тема : FAQ [3/5]
-------------------------------------------------------------------------------
>>2.2. Скрещивание PHP/Win32 и Apache/Win32. 
Предполагается, что вы уже установили PHP и Apache. Для внесения пущей 
ясности положим, что PHP установлен в каталоге 'C:\HTTP\php', а Apache 
в 'C:\HTTP\apache', причем Apache уже настроен и без лишней ругани отзывается
на имя localhost, а необходимые изменения внесены в php.ini. 
Теперь определимся, каким образом PHP будет функционировать: в виде 
CGI-приложения [1] или как SAPI-модуль Apache [2] (разбор полетов на предмет 
различий см.) 
1. Hастройка PHP в качестве CGI-приложения. 

Откройте Notepad'ом (FAR'ом, NC, WinCmd, и т.п.) файл
C:\HTTP\apache\conf\httpd.conf и найдите в нем и раскомментируйте (уберите
значок # в начале строки) следующие строчки: 

#AddType application/x-httpd-php .php 
#AddType application/x-httpd-php-source .phps 

затем вставьте после них это: 

ScriptAlias "/__php_dir__/" "C:/HTTP/php/" 
Action application/x-httpd-php "/__php_dir__/php.exe" 

2. Hастройка PHP в качестве модуля Apache. 
Добавьте в файл C:\HTTP\apache\conf\httpd.conf строчки: 

LoadModule php4_module c:/HTTP/php/sapi/php4apache.dll 
AddType application/x-httpd-php .php 

Тестирование. 
Теперь перезапустите Apache. Создайте в каталоге C:\HTTP\apache\htdocs файл 
test.php следующего содержания: 

 
запустите браузер и перейдите на http://localhost/test.php . Если ваш 
браузер отобразил нечто табличное с большим количеством непонятной 
информации, примите поздравления. Если вместо этого ваши старания 
увенчались 'Error 500 - Internal Server Error', попробуйте прочитать эту 
статью немного более внимательно. 

> ivan kovalenko, 2:5057/53

2.3. Установка PHP >=4.2.2 как модуль Apache 2.0.x под Windows. 

0. Прежде всего нужно скачать последние стабильные версии как Apache так и 
   PHP. PHP лучше скачать по адресу http://snaps.php.net/win32/, где выбрать 
   последний snapshot. 
1. Итак, устанавливаем Apache 2.0.x как обычно. 
2. Устанавливаем PHP в каталог c:\php (например). 
3. Переименовываем файл php.ini-dist в php.ini и правим по вкусу, 
4. обязательно не забыв указать путь к extensions, в нашем случае это 
   extension_dir = c:/php/extensions 
5. и каталог с документами, в нашем случае это 
   doc_root = c:/Program files/Apache Group/Apache2/htdocs. 
6. Копируем этот файл и файл php4ts.dll в каталог c:\winnt. 
7. Меняем расширение у файла c:\php\sapi\php4apache2.dll на .so 
8. В файле httpd.conf у Apache ищем строки, начинающиеся с LoadModule и 
   добавляем свою строку, не забыв кавычки, 
   LoadModule php4_module "c:/php/sapi/php4apache2.so" 
9. Там же ищем строку AddType application/x-tar .tgz и ниже добавим свою 
   AddType application/x-httpd-php .php 
10. необязательно: Ищем строки, начинающиеся с AddIcon и добавим .php в 
    AddIcon /icons/p.gif .pl .py .php 
11. Стартуем (рестартуем) Apache 
12. Если не запускается, читам Application log в Event Viewer-e и чешем 
    затылок, думая где ошиблись. 
13. Возможно еще придется скопировать файлы из c:\php\dlls в 
    c:\winnt\system32, это если с какими-то extensions-ами не запустится. 
    В начале пробуйте закомментировав вообще все расширения.

> Andy Ice, 2:5012/8.13

-----------------------------------------------------------------------------
>>>3. Hастройка 
-----------------------------------------------------------------------------
>>3.1 Каким образом создать ссылку, типа как у http://lenta.ru/2002/01/09/? 
У ленты этот движок основан на mod_rewrite, имнсхо, поскольку там апач стоит 
www.lenta.ru 

HTTP/1.1 200 OK 
Date: Fri, 11 Jan 2002 14:45:37 GMT 
Server: Apache/1.3.14 (Unix) rus/PL30.0 

соответственный rewrite rule регекспом - и все ок. а в директории хтмл'ки 
складывать - черезчур корявый изврат. 8) 

вот пример, как организовать подобное: 

мы хотим выводить новости из базы данных по запрошенному ури 
w3.lenta.ru/2002/01/11/tv6/ имея таблицу с полями новостей anchor 
VARCHAR(255), date date, announce VARCHAR(255), body TEXT; где anchor - 
текстовый указатель, date - дата, announce - анонс новости, body - тело 
новости. 

делаем виртуальный хост 
--- [ httpd.conf ] --- 
LoadModule rewrite_module modules/mod_rewrite.so 

 
    ServerName w3.lenta.ru 
    DocumentRoot "/wwwroot/htdocs/w3lenta" 

    RewriteEngine On 
    RewriteLogLevel 2 

    RewriteCond %{REQUEST_URI} !/index\.php 
    RewriteRule ^/([0-9][0-9][0-9][0-9]+)/([0-9][0-9]+)/([0-9][0-9]+)/(.*)/$ 
    /news.php?anchor=$4&date=$1-$2-$3 [T=application/x-httpd-php,L] 

    ErrorLog logs/w3lenta-error.log 
    CustomLog logs/w3lenta-access.log common 

     
        Options +Includes -Indexes 
     
 
--- [ httpd.conf ] --- 

сразу привожу извинения за длинный регексп - пхп/перловый 
^/(\d{4}+)/(\d{2}+)/(\d{2}+)/(.*)/$ не прокатил. видимо модифер \d rewrite 
engine не понимает - у него там какие-то свои правила паттернов. 

прописываем w3.lenta.ru в hosts на ip 192.168.10.1 (ip по вкусу - у кого 
как отстроен локальный айпишник) 
создаем два файла в корне /wwwroot/htdocs/w3lenta/: 

1. этот будет отвечать на запрос w3.lenta.ru и в нем, допустим, строится 
листинг по таблице из 10-ти последних новостей, но мы сюда забьем тестируемый 
урл. 
--- [ index.php ] --- 
ТВ-6 распадается 
--- [ index.php ] --- 

2. этот будет выводить новость по date и anchor. кода не прописано, но 
сделать select announce, body, date from table where date=$date AND 
anchor=$anchor из таблицы новостей, я думаю, трудности никому не составит. 8) 

--- [ news.php ] --- 
 
--- [ news.php ] --- 

набираем в ослике w3.lenta.ru, щелкаем линк, и наслаждаемся результатом 8) 

данные запрошенной новости: anchor = tv6, date = 2002-01-11 
REQUEST_URI: http://w3.lenta.ru/2002/01/11/tv6/ 

remarks: в реале можно сделать, если админ конфиг пропишет или ты сам 
админ. 8) 
некоторые феньки rewrit'а (не могу сказать точно какие) работают только в 
версии апача выше 1.2 - я тестировал на 1.3.20. категорию прикрутить тоже 
несложно - просто соответствующих категориям регекспов налепить, убрав 
modifier L (last rule) из всех окромя последнего.

> Vladimir N. Zaytcev <2:5015/116>

>>3.2. Я делаю так, как написано в примерах, но переменные, передаваемые в 
>>скрипт, не видны. Почему? 
Hачиная с PHP версии 4.1 установка register_globals по умолчанию установлена
в Off. Это означает, что к переменным переданным извне, например так 
http://some.server.dom/script.php?varname=value, при такой настройке в 
скрипте нельзя обращаться напрямую по имени $varname. Вместо этого надо 
использовать обращение к элементам специально предопределенных следующих 
массивов: 
$_GET, $_POST, $_COOKIE, $_SESSION, $_SERVER (в PHP версии от 4.1) или, 
соответственно, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, 
$HTTP_SERVER_VARS (в любых версиях PHP). 
При этом обращение к переменной приведенной в примере выше будет выглядеть 
так: 
$_GET['varname'] или $HTTP_GET_VARS['varname']

> Serge V. Tarasov

>>3.3. Зачем теперь register_globals=off? 
Это сделано для облегчения написания безопасных скриптов. При разработке 
достаточно сложных проектов, когда число используемых переменных велико, 
очень легко можно допустить использование неинициализированной переменной, 
которая при register_globals=On может быть передана скрипту извне злобным 
хацкером. Поэтому, для написания хороших скриптов, рекомендуется обращаться 
к входным переменным через предопределенные массивы (при этом программист, 
заранее зная, что эти переменные переданы снаружи производит соответствующие 
проверки на корректность) и включить error_reporting = E_ALL (по крайней 
мере, на этапе написания и тестирования скрипта) для того, чтобы PHP 
предупреждал о использовании неинициализированных переменных. 
Безусловно, возможно написание хороших и безопасных скриптов и при 
register_globals=On, но: 
- это требует значительно более внимательного подхода к написанию; 
- эти скрипты не будут корректно работать на хостинге, где 
register_globals=Off (в отличие от скриптов, написанных для 
register_globals=On, которые будут корректно работать везде); 
ВHИМАHИЕ! 
- возможно, что из будущих версий PHP register_globals будет исключен вообще.

>Serge V. Tarasov

>>3.4. У моего хостера стоит register_globals=off, как можно включить 
register_globals программно? 
Так как, вероятно, в следующих версиях register_globals уберут совсем и 
поведение PHP будет таким, как при register_globals=off, то рассмотрим этот 
вопрос под другим углом. 
Поскольку существует множество уже используемых скриптов (надежных и не 
очень), которые написаны в расчете на register_globals=On, то добавлением 
нескольких строк кода заставим скрипт работать. 
В общем случае, надо из предопределенных массивов $_GET, $_POST, $_COOKIE, 
$_SESSION, $_SERVER (или какие вам нужны) импортировать значения в переменные 
с именами элементов. Hапример так (для переменных получаемых по GET): 
 
или, лучше так: 
 
Естественно, это негативно сказывается на безопасности, поскольку после 
выполнения такого кода у вас станут глобальными все переменные переданные 
снаружи (нужные и ненужные), т.е. это все равно, что сделать 
register_globals=On.

> Serge V. Tarasov

-----------------------------------------------------------------------------
>>>>4. Работа с базами данных 
-----------------------------------------------------------------------------
>>4.1. При выборке из базы не правильно сортирует русские буквы. 
Если есть возможность, то запустите mysqld с опцией: 
--default-character-set=cp1251, если нет, то попробуйте послать MySQL такой 
запрос: SET CHARACTER SET cp1251_koi8 - это изменит набор символов для 
текущего соединения. SET CHARACTER SET DEFAULT - установит обычную таблицу 
символов. 

Имейте ввиду, что эта настройка действует только для текущего соединения. Более
подробно в RTFM. 

> trent

--- GMT v1.04beta5
 * Origin: Two Beer Or Not Two Beer? (2:5012/8.13)


При переходе по баннеру - скидка 25% на первый месяц обслуживания!
Самый простой способ получить ROOT-доступ
При переходе по баннеру - скидка 25% на первый месяц обслуживания!