Сервера apache в связке
Содержание статьи
Веб-сервер на связке nginx+apache
Разворачиваем веб-сервер под операционной системой Linux, который будет использовать одновременно nginx и apache.
Пусть имеется аппаратная платформа, на которой уже установлен CentOS.
Настроим связку apache+nginx. На передовую (front-end) выставляем лёгкий и высокопроизводительный nginx, который будет обрабатывать запросы к статическому контенту (картинки, стили, js и т.п.). В тылу (back-end) нас будет страховать apache, задачей которого является предоставление динамического контента (в основном, PHP).
Безусловно, возникает законный вопрос, нельзя ли обойтись без apache вообще? Действительно, ничего не мешает настроить совместную работу nginx+php+mysql (вызываем PHP в режиме FastCGI с помощью php-fpm). Производительность такой системы будет ещё выше. Но есть и серьезный недостаток: большинство стандартных движков сайтов ориентировано непосредственно на работу под apache (правила доступа к различным директориям сайта настраиваются в файле .htaccess); а ввиду того, что nginx не обрабатывает .htaccess, без доработок такие сайты под nginx работать не будут. Причем, если переработка одного сайта является вполне выполнимой технической задачей, то обслуживание нескольких сайтов (особенно чужих), становится настоящей проблемой.
Итак, жертвуем экстремальной производительностью, но сохраняем поддержку .htaccess.
Устанавливаем apache, mysql, php. Для этого нам пригодится yum и стандартные репозитории.
yum -y install httpd mysql mysql-server php php-mysql php-mbstring php-cli
Установка nginx чуть сложнее, придётся сходить на сайт разработчика и прочитать методику установки. К счастью, под распространенные дистрибутивы (CentOS и подобные), разработчик предоставляет готовые пакеты.
Настраиваем всю связку:
- Конфигурация mysql
- Конфигурация php
- Конфигурация apache
- Конфигурация nginx.
Теперь рассмотрим каждый шаг подробно.
Конфигурация mysql
Рассмотрена в соответствующей статье.
Конфигурация php
Практически не требуется, в деталях описана в отдельной статье. Главное не забыть про shorttag: short_open_tag = On.
Конфигурация apache
Так как на передовую мы выдвигаем nginx, значит именно он будет работать на стандартном порту 80, а обращение к apache будет проксироваться через любой другой порт. Я выбрал 8080.
Модифицируем файл глобальных настроек. Я привожу только самые важные параметры, которые надо проверить:
Timeout 60
KeepAlive Off
# MaxKeepAliveRequests 100
# KeepAliveTimeout 10
StartServers 2
MinSpareServers 2
MaxSpareServers 4
ServerLimit 6
MaxClients 10
MaxRequestsPerChild 800
# Слушаем нестандартный порт,
# так как у нас на передовой nginx
Listen 127.0.0.1:8080
# Пользователь и группа
User apache
Group apache
# Определяем порт
NameVirtualHost *:8080
Интересно, что KeepAlive следует отключать (спасибо за наводку внимательному читателю Mike). Производительность системы будет повышаться, если процесс httpd, отдав динамическое содержимое, будет тут же освобождаться.
Важно завести пользователя и группу, от которых будут работать в связке две службы: и nginx, и httpd. Естественно, это должен быть один и тот же пользователь как для httpd, так и для nginx во избежание конфликтов! Я для этих целей использую пользователя и группу apache; в результате httpd работает из-под «своего» имени, а nginx вынужден работать под чужим именем.
Следующим шагом будет настройка виртуальных серверов. Каждый виртуальный сервер будем настраивать, создавая для него отдельный конфигурационный файл в /etc/httpd/conf.d/, причем необходимо следить, чтобы расширением являлось именно .conf. Предположим, создаётся виртуальный сервер для сайта drach.pro, тогда потребуется файл /etc/httpd/conf.d/drach.pro.conf со следующим содержимым:
# Слушаем выбранный порт:
<VirtualHost *:8080>
ServerName drach.pro
ServerAlias www.drach.pro
ServerAdmin Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
DocumentRoot /var/www/html/drach.pro
CustomLog /var/log/httpd/drach.pro_access.log combined
ErrorLog /var/log/httpd/drach.pro_error.log
<Directory «/home/drach.pro/www»>
AllowOverride All
Options +Includes
</Directory>
</VirtualHost>
Таким образом необходимо описать все виртуальные сервера. Кроме того, надо не забыть про файлик vhost.conf, в который надо поместить конфигурацию сайта по умолчанию.
Теперь десерт! Не достаточно настроить apache на обычную работу, необходимо корректно обрабатывать REMOTE_ADDR заголовка. Для этих целей устанавливаем и настраиваем RPAF (mod_rpaf соответствует первой версии apache, а mod_rpaf2 — второй).
Без RPAF будем иметь REMOTE_ADDR не пользовательский, а IP-адрес сервера с передовой (это nginx). RPAF будет обрабатывать заголовок X-Forwarded-For, который получен от nginx и генерировать корректный REMOTE_ADDR.
Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP! Например, для моих целей это крайне важно, так как приходится наблюдать за пользователями и вести подробные логи для отчётов.
Устанавливаем модуль RPAF, для чего его придётся найти в интернете отдельным пакетом под наш дистрибутив. Есть альтернативный путь: подключить хранилище Atomic repo и использовать yum. Затем настраиваем RPAF, создавая и редактируя /etc/httpd/conf.d/mod_rpaf.conf:
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
# Enable reverse proxy add forward RPAFproxy_ips
YOUR_PROXY_SERVER_IP_LIST_OR_ONE_IP
# which ips are forwarding requests to us
RPAFsethostname Off
# let rpaf update vhost settings
# allows to have the same hostnames as in the «real»
# configuration for the forwarding Apache
RPAFproxy_ips 127.0.0.1
RPAFheader X-Real-IP
После конфигурации необходимо перезапустить Apache.
Конфигурация nginx
Описываем глобальный файл конфигурации /etc/nginx/nginx.conf:
user apache;
worker_processes auto; разрешаем серверу выбирать количество процессов!
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
‘$status $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;
# Журналирование будет индивидуальное для всех сайтов:
# access_log /var/log/nginx/access.log main;
sendfile on;
client_max_body_size 24M;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
# Минимальная длина ответа, при которой модуль будет жать, в байтах
gzip_min_length 1100;
# Разрешить сжатие для всех проксированных запросов
gzip_proxied any;
# Запрещает сжатие ответа методом gzip для IE6
gzip_disable «msie6»;
# Уровень gzip-компрессии
gzip_comp_level 8;
# 1) MIME-типы которые необходимо жать
#gzip_types text/plain text/html text/xml application/xml application/x-javascript text/javascript text/css text/json;
# 2) Если у вас появляются предупреждения, типа «duplicate MIME type text/html», то стоит исключить text/html
gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
# Хватаемся за соломинку:
#gzip_types text/html text/xml text/css application/x-javascript text/javascript;
include /etc/nginx/conf.d/*.conf;
}
Теперь конфигурируем виртуальные хосты! Причем, поступаем профессионально: конфигурационные файлы складываем в /etc/nginx/conf.d: например, для сайта drach.pro заводим отдельный файл /etc/nginx/conf.d/drach.pro.conf:
# A virtual host drach.pro
server {
# listen drach.pro:80;
listen 80;
server_name drach.pro;
# Ведём журнал доступа:
access_log /var/log/nginx/drach.pro_access.log;
# Разделяем статику и динамку, статику храним в кэше 10 дней:
location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js|doc|docx|pdf|xls|xlsx|rar|zip|tbz|7z|exe)$ {
root /var/www/html/drach.pro/;
expires 10d;
}
# htaccess и htpasswd не отдаем:
location ~ /.ht {
deny all;
}
# Мы хотим видеть статистику при обращении к папке /stat
location = /stat {
stub_status on;
access_log off;
# allow xx.xx.xx.xx;
# deny all;
}
location / {
proxy_pass https://127.0.0.1:8080/;
proxy_redirect off;
log_not_found off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Конец. Достаточно перезапустить все службы и убедиться, что веб-сервер работает!
service httpd restart && service nginx restart
Отслеживаем доступ к серверу в реальном времени:
tail -f /var/log/nginx/drach.pro_access.log
или
tail -f /etc/httpd/logs/drach.pro_access.log
Ежели в консоли браузера появляется ERR_INCOMPLETE_CHUNKED_ENCODING (обычно это бывает, если файлы css и js генерируются «на лету»), необходимо проверить права и владельца директории /var/cache/nginx/proxy_temp. Также есть смысл убрать эти два расширения из разрешённых статических типов файлов для nginx.
Ежели в журнале ошибок появляется upstream response is buffered to a temporary file, следует в файл глобальной конфигурации nginx добавить proxy_max_temp_file_size 0; в секцию http.
Источник
Заметки сисадмина » Установка Web-сервера Apache в связке с PHP 5 и MySQL (Apache+PHP+MySQL)
В этой статье мы рассмотрим установку и настройку Web-сервера Apache, PHP 5 и СУБД MySQL для использования их на локальной машине под операционной системой Windows (2000 и XP). Использование локальных серверов может понадобится по многим причинам – вам необходимо изучить PHP или MySQL, а тестирование своих Web-приложений на хостинге либо дорого обходится, либо такой возможности вообще нет. В этом случае вам понадобится связка Apache+PHP+MySQL на локальной машине.
Для начала необходимо раздобыть дистрибутивы серверов Apache и MySQL, а так же архив PHP. Мы будем устанавливать и настраивать Apache 2, MySQL 4 и PHP 5.
Скачать Apache можно с зеркал приведённых на официальном сайте https://www.apache.org/dyn/closer.cgi. При поиске следует помнить, что Apache так же может называться httpd, по имени его демона в UNIX. На зеркалах обычно много различных файлов, например:
httpd-2.0.49-win32-src.zip – это архив с исходными кодами (src) для Windows (win32) Web-сервера Apache (httpd) версии 2.0.49.
httpd-2.0.49.tar.gz – тоже самое, но для Linux, в котором программы принято распространять в исходных кодах.
apache_2.0.50-win32-x86-no_ssl.exe – а вот это, откомпилированный под архитектуру (x86) для Windows (win32) без поддержки SSL(no_ssl) сервер Apache (apache) версии 2.0.50 – вот он и нужен.
Установка Web-сервера Apache
Запустите установщик Web-сервера Apache. Результатом будет окно с лицензионным соглашением, после принятия которого, следует перейти к следующему окну с краткой информацией о нововведениях во второй версии Apache. Следующее окно, показанное на рисунке, позволяет ввести информацию о сервере: доменное имя сервера, имя сервера и адрес электронной почты администратора. Если установка происходит на локальную машину, то в поля для доменного имени и имени сервера следует ввести localhost (см. рисунок.). В нижней части окна предлагается выбрать номер порта по которому сервер будет принимать запросы (80 или 8080).
localhost – это имя для использования сервера на локальной машине, которое связано с IP-адресом 127.0.0.1, который зарезервирован для локального использования.
После этого будет предложен способ установки: стандартный (Typical ) или выборочный (Custom), позволяющий выбрать компоненты сервера вручную. Следующее окно позволяет выбрать каталог установки сервера, по умолчанию это C:Program FilesApache Group, но мы рекомендуем выбрать другой каталог, например, С:www. После этого мастер установки сообщит о готовности к процессу установки и после нажатия кнопки Install, будет произведено копирование файлов сервера. Если установка прошла успешно, Windows автоматически запустит Apache.
После успешной инсталляции при наборе в окне браузера https://localhost/ или https://127.0.0.1/ – должна загрузится страница сервера.
Теперь необходимо научиться управлять Apache, а именно научится запускать, останавливать и перезапускать сервер. Существует много способов осуществить эти операции: при помощи утилиты ApacheMonitor, используя консоль управления сервисов Windows, используя пункты меню Пуск, из командной строки… Мы рассмотрим консоль управления сервисов Windows, позволяющего настроить Apache для автоматического старта при запуске системы. Для запуска консоли управления выполните команду
Пуск->Настройка->Панель управления->Администрирование->Службы.
В появившемся окне консоли, на приведённом ниже рисунке, следует выбрать сервис Apache2. Контекстное меню, открывающееся по нажатию на правой кнопке, позволяет осуществлять запуск, остановку и перезапуск сервиса.
Службы Windows позволяют осуществлять запуск фоновых приложений при старте системы. Для этого необходимо перейти в окно Свойства, выбрав в контекстном меню сервиса пункт Свойства и в появившемся окне в выпадающем списке “Тип запуска” выбрать пункт “Авто”.
Конфигурирование Apache
Web-сервер — сложный программный продукт работающий на разных платформах и в разных операционных системах по всему миру. Поэтому для корректной работы на установленной системе его необходимо настроить (сконфигурировать).
По умолчанию настройки Apache расположены в файле httpd.conf в директории conf. Далее будут описаны основные директивы файла httpd.conf и их общеупотребительные значения.
Пути к файлам
В конфигурационных файлах Apache и PHP Вам часто придется указывать пути к различным директориям и папкам. В операционных системах UNIX и Windows при-меняются различные разделители каталогов. В UNIX используется прямая косая черта “/”, например /usr/bin/perl, в в Windows обратная, например, c:Apachein. Вообще, в некоторых директивах Apache и PHP работают оба вида разделителей каталогов: прямой(/) и обратный(), но так как и Apache и PHP изначально разрабаты-вались под UNIX, то применяя их “родной” формат, Вы сможете избежать ряда проблем. Поэтому пути в настроечных файлах (httpd.conf и php.ini) рекомендуется писать через слеш в формате UNIX — “/”. Например:
ScriptAlias “/php_dir/” “c:/php/”
Директивы файла httpd.conf
Port
Port 80
Устанавливает порт TCP, который используется Apache для установки соединения. По умолчанию используется 80 порт.
Единственная причина использования нестандартного порта — это отсутствие прав на использование стандартного порта. При использовании нестандартного порта, например, 8080 номер порта следует указывать в адресе, например: https://localhost:8080/.
ServerAdmin
ServerAdmin mymail@yandex.ru
Содержит e-mail-адрес администратора web-сервера, который будет отображаться при ошибках работы сервера.
ServerName
ServerName myserver
Содержит имя компьютера для сервера.
ServerRoot
ServerRoot “C:/Apache2”
Указывает на каталог, содержащий файлы WEB-сервера Apache.
Не путайте директиву ServerRoot с директивой DocumentRoot, которая указывает каталог для файлов WEB-сайта.
DocumentRoot
DocumentRoot “C:/Apache2/htdocs”
Определяет каталог, в котором расположены файлы WEB-сайта.
Контейнер <Directory />
Сфера действия директив внутри этого контейнера распространяется на все файлы и подкаталоги внутри DocumentRoot.
<Directory />
Options FollowSymLinks Includes Indexes
AllowOverride All
</Directory>
- Директива AllowOverride установленная в значение All разрешает переопределять значения главного конфигурационного файла httpd.conf в файлах .htaccess.
- Директива Options FollowSymLinks разрешает Apache следовать символическим ссылкам.
- Директива Options Includes разрешает выполнение директив SSI (Server Side Includes) в коде страниц web-сайта.
- Директива Options Indexes указывает, что нужно возвращать содержимое каталога, если отсутствует индексный файл.
DirectoryIndex
DirectoryIndex index.html index.phtml index.php
Содержит список индексных файлов, которые следует отображать при обращении к директории без указания имени файла (например, https://localhost/test/).
AddDefaultCharset
AddDefaultCharset windows-1251
Устанавливает кодировку по умолчанию, если кодировка не установлена в заголовке HTML-документа. Также Вам может потребоваться указывать значение кодировки KOI8-R.
Создание виртуальных хостов
На одном WEB-сервере Apache можно установить несколько WEB-сайтов. Эта функция сервера называется виртуальным хостингом. Ниже рассмотрим создание виртуальных узлов на основе имен. Виртуальные узлы обычно расположены в конце файла httpd.conf.
Сначала требуется указать какой IP-адрес используется для виртуальных хостов.
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
# Директивы виртуального хоста
</VirtualHost>
Далее нужно прописать директивы для контейнера <VirtualHost>, которые будут определять конфигурацию виртуального хоста.
Файл httpd.conf. Контейнер <VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerAdmin webmaster@may_domain.ru
DocumentRoot c:/www/mysite
ServerName www.mysite.ru
ServerAlias www.site.ru www.host2.ru
ErrorLog logs/mysite-error.log
CustomLog logs/mysite-access.log common
</VirtualHost>
Рассмотрим директивы виртуального узла:
- DocumentRoot указывает каталог, где расположены файлы (странички) данного виртуального узла (WEB-сайта)
- ServerName указывает имя виртуального узла, по которому к нему можно обратиться. В данном случае, по адресу https://www.mysite.ru/.
- ServerAlias содержит псевдонимы имен виртуального узла. В данном случае к виртуальному узлу можно также обратиться, используя имена: https://www.site.ru/ и https://www.host2.ru/.
- ErrorLog и CustomLog указывает имена логов сервера для этого виртуального хоста.
Контейнеры обычно располагают один за другим в конце файла httpd.conf.
Файл httpd.conf. Настройка виртуальных хостов
NameVirtualHost 127.0.0.1:80
<VirtualHost 127.0.0.1:80>
# Директивы виртуального хоста 1
</VirtualHost>
<VirtualHost 127.0.0.1:80>
# Директивы виртуального хоста 2
</VirtualHost>
<VirtualHost 127.0.0.1:80>
# Директивы виртуального хоста 3
</VirtualHost>
Для применения изменений, вносимых в файл httpd.conf, Apache следует перезагрузить.
Для того, чтобы обращаться к виртуальным узлам по именам их следует прописать в базы данных DNS-сервера. Если Вы используете Apache для тестирования файлов на локальной машине, то имена ваших виртуальных узлов следует прописать в файле hosts. Для Windows 2000 и XP он расположен в каталоге C:WindowSystem32Driversets. Файл hosts содержит записи вида:
Формат записей файла hosts
127.0.0.1 www.mysite.ru
127.0.0.1 www.site.ru
127.0.0.1 www.host2.ru
Установка и настройка PHP
Для установки PHP следует создать каталог c:/php и разместить в нём файлы из zip-архива дистрибутива. После этого следует переименовать конфигурационный файл php.ini-dist в php.ini и скопировать его в директорию Windows.
Далее, необходимо сообщить Web-серверу о наличии установленного PHP. Установка PHP возможна двумя вариантами: как модуль Apache и как внешнее CGI-приложение. Ниже будут рассмотрены оба варианта установки.
Установка PHP в качестве модуля
Установка PHP в качестве модуля немного повышает быстродействие, так как модуль PHP загружается один раз при запуске Web-сервера
При установке PHP в качестве модуля настройки из php.ini читаются один раз при запуске Web-сервера. Поэтому при внесении изменений в php.ini необходимо перегрузить Apache для того, чтобы внесенные изменения вступили в силу.
Для установки PHP откройте файл главный настроечный файл Apache httpd.conf на редактирование и удалите символы комментариев со следующих строк, при необходимости изменив их:
Файл httpd.conf. Подключение PHP как модуль Apache
AddType application/x-httpd-php phtml php
LoadModule php5_module c:/php/php5apache2.dll
Вместо директории c:/php подставьте Вашу директорию с установленным PHP.
Установка PHP, как CGI-приложения
При установке PHP, как CGI-приложения интерпретатор PHP будет загружаться каждый раз при вызове PHP-сценария. В связи с этим, возможно, некоторое ухудшение быстродействия. Если PHP установлен, как CGI, то при внесении изменений в файл php.ini Apache перезагружать не следует, так как установки читаются каждый раз при выполнении PHP-сценария. Установка PHP как CGI немного ускоряет внесение изменений в конфигурацию PHP, так она не требует перезагрузки WEB-сервера.
При установке PHP, как CGI перестанут работать некоторые заголовки, например, Вы не сможете организовать авторизацию пользователей средствами PHP. Авторизации можно будет реализовать только средствами самого Apache с помощью файлов .htaccess.
Для установки PHP откройте главный настроечный файл httpd.conf на редактирование, найдите в нем закомментированные строки подключения PHP и измените их следующим образом:
Файл httpd.conf. Подключение PHP как CGI
AddType application/x-httpd-php phtml php
<Directory “c:/php”>
Options ExecCGI
</Directory>
ScriptAlias “/php_dir/” “c:/php/”
Action application/x-httpd-php “/php_dir/php-cgi.exe”
Вместо директории c:/php подставьте Вашу директорию с установленным PHP.
Конфигурирование PHP (файл php.ini)
Так как на локальной машине вы, скорее всего, будете заняты тестированием Ваших Web-приложений, то необходимо должным образом настроить конфигурационный файл php.ini. Найдите директиву error_reporting и установите для неё следующее значение:
error_reporting = E_ALL & ~E_NOTICE
Это значение настроит PHP таким образом, что при работе PHP-скриптов будут отображаться все ошибки, а “замечания” будут игнорироваться. Так же обходимо проследить, чтобы директива display_errors, была включена:
display_errors = On
Если данная директива отключена (Off), то сообщения об ошибках не будут выводится в окно браузера и в случае возникновения в коде ошибки вы будете гадать перед девственно белым окном — что бы это означало.
Так же необходимо проследить, чтобы директива variables_order имела следующее значение:
variables_order = “EGPCS”
Буквы здесь означают следующее:
E – переменными среды
G – переменными передаваемыми по методу GET (G)
P – переменными передаваемыми по методу POST (P)
C – Cookies
S – сессии
Отсутствие какой-либо из букв не позволит вам работать с соответствующими переменными.
Следующая директива, которая может потребовать настройки – это register_globals. Если данная директива включена
register_globals = On
то переменные передаваемые метором GET, POST, через cookies и сессии можно использовать в PHP-скрипте, обращаясь к ним просто как обычным переменным $someone.
Если данная директива отключена
register_globals = Off
то к таким переменным можно будет обращаться только при помощи суперглобальных массивов ($_POST, $_GET и т.п.).
Директива register_long_arrays позволяет использовать суперглобальные массивы в старом формате (“длинном” – $HTTP_GET_VARS, $HTTP_POST_VARS и т.д.)
register_long_arrays = On
Теперь необходимо настроить индексный файл. Если в окне браузера набрать строку https://localhost/, а не https://localhost/index.html. Сервер всё равно предоставит браузеру index.html, так как этот файл является индексным и ищется в директории первую очередь, если не указан конкретный файл. Теперь необходимо настроить http.conf, таким образом, чтобы Web-сервер Apache так же реагировал на файлы index.php. Для этого найдте в http.conf директиву DirectoryIndex и исправьте её следующим образом:
DirectoryIndex index.html index.html.var index.php
После этого необходимо перегрузить сервер Apache, а в корневой директории виртуального хоста (“C:/www/scripts”) создать пробный файл PHP (index.php):
В случае успешной настройки, обращение по адресу https://localhost/index.php отобразит фиолетовую таблицу с текущими настройками PHP, которая выдаётся функцией phpinfo().
Таким образом, у нас настроена связка Apache и PHP и можно переходить к настройке MySQL. Распакуйте дистрибутив MySQL во временную директорию и запустите установщик. Контролировать работу сервера MySQL можно точно так же как и Apache, используя консоль управления сервисов Windows.
Подключение MySQL
Подробная методика подключения к PHP расширения MySQL описана в статье по ссылке: “Подключение к PHP расширения для работы с MySQL”.
Если сервер MySQL уже установлен на Вашей машине, то следующим шагом будет настройка PHP для работы с базами данных MySQL.
Откройте на редактирование файл php.ini из каталога Windows. Для подключения библиотеки расширения MySQL Вам нужно убрать символ комментария ;(точка с запятой) из строки:
extension=php_mysql.dll
Также проверьте значение директивы extension_dir
extension_dir =”c:/php-5.0/ext”
Она должна указывать на каталог, где хранятся расширения PHP. Разделители каталогов рекомендуется писать в формате UNIX (/) — обратный слеш. Однако, если ничего не получается, просто откатите назад значение директивы extension_dir, а библиотеку php_mysql.dll скопируйте в корень C:/php-5.0/ – в большинстве случаев это должно помочь.
Если PHP Вас подключен как модуль, то Вам также необходимо скопировать библиотеку libmysql.dll из каталога с установленным PHP в системный каталог C:/Windows/System32. Чтобы внесенные изменения вступили в силу — перезагрузите Apache.
Для проверки работы MySQL перезапустите сервер Apache и создайте проверочный скрипт со следующим кодом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php $dblocation = «127.0.0.1»; $dbname = «test»; $dbuser = «root»; $dbpasswd = «»; $dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd); if (!$dbcnx) { echo «<p>К сожалению, не доступен сервер mySQL</p>»; exit(); } if (!@mysql_select_db($dbname,$dbcnx) ) { echo «<p>К сожалению, не доступна база данных</p>»; exit(); } $ver = mysql_query(«SELECT VERSION()»); if(!$ver) { echo «<p>Ошибка в запросе</p>»; exit(); } echo mysql_result($ver, 0); ?> |
В случае успешной интеграции MySQL в связку Apache и PHP, обращение к проверочному скрипту выведет в окно браузера версию сервера MySQL.
В новых версиях MySQL (начиная с 4.1.0) изменился порядок работы с национальными кодировками, поэтому старый код может вызывать появление в таблице базы данных знаков вопроса ‘????????’ вместо русского текста. Для того, чтобы этого не возникало в начало PHP-скрипта, после установки соединения с базой данных, следует поместить следующие строки:
<?php mysql_query («set character_set_client=’cp1251′»); mysql_query («set character_set_results=’cp1251′»); mysql_query («set collation_connection=’cp1251_general_ci'»); ?> |
Установка расширений PHP
На последок вам возможно понадобится настроить некоторые расширения PHP, они настраиваются точно так же как и MySQL.
Так для того, чтобы подключить графическую библиотеку GDLib в php.ini необходимо раскомментировать строку:
extension=php_gd2.dll
Проверьте после этого наличие данной библиотеки в папке c:phpext. После внесения изменений в php.ini перезапустите сервер. Что бы быстро проверить: подключилась ли библиотека — выполните функцию phpinfo(). Если все в порядке, то в таблице, которая отображается функций phpinfo(), должен появится раздел “gd“. Скачать GDLib2
Некоторые расширения требуют дополнительных библиотек. Так для того чтобы воспользоваться расширением PHP “Mcrypt Encryption“, позволяющем осуществлять симметричное шифрование необходимо, во первых, расскомментирования строку в php.ini
extension=php_mcrypt.dll
А во вторых скопировать в папку С:/WINDOWS/ дополнительную библиотеку libmcrypt.dll
Ошибка Internal Server Error при подключении PHP
Проверьте, нет ли у Вас ошибок при подключении PHP в httpd.conf.
Файл httpd.conf. Подключение PHP как CGI
AddType application/x-httpd-php phtml php
<Directory “c:/php”>
Options ExecCGI
</Directory>
ScriptAlias “/php_dir/” “c:/php/”
Action application/x-httpd-php “/php_dir/php-cgi.exe”
Особое внимание обратите на имя подключаемого модуля: php-cgi.exe. Для применения изменений, вносимых в файл httpd.conf, Apache следует перезагрузить.
При использовании устаревшего имени php.exe, использовавшегося в более ранних версиях вместо php-cgi.exe также возможно появлении ошибки:
403 Forbidden You don’t have permission to access /__php_dir__/php.exe/test.php on this server
HTML-файлы выполняются, а PHP-скрипты нет
При ненастроенном подключении PHP при обращении к файлам с расширением php, например: http:/localohost/index.php открывается окно с запрос на загрузку такого файла. Это говорит о том, что не настроена обработка файлов с расширением php. Проверьте в файле httpd.conf существование следующей строки:
AddType application/x-httpd-php phtml php
Notice: Undefined variable…
На новом, только что установленном, PHP можно часто видеть сообщения вида:
Notice: Undefined variable: msg in C:/Main/addrec.php on line 7
Это не ошибка — это рекомендации по кодированию, сообщающие о неинициализированных переменных. Следует отключить вывод подобных рекомендаций в файле php.ini. Найдите директиву error_reporting и установите ее значение:
error_reporting = E_ALL & ~E_NOTICE
Не подключается MySQL
Иногда возникают проблемы с установкой MySQL. Следует проконтролировать запускается ли MySQL в качестве сервиса каждый раз при старте системы. Для этого откройте консоль сервисов:
Пуск | Настройка | Панель управления | Администрирование | Службы
найдите там MySQL – запустите. Чтобы сервер стартовал при каждой загрузке системы нажмите правую кнопку мыши на сервисе и выберите “Свойства” – в открывшемся выпадающем списке “Тип запуска” выберите пункт “Авто”.
Если при запуске Apache и при обращении ко скриптам выдается сообщение о невозможности загрузки библиотеки php_mysql.dll.
PHP startup: Unable to load dynamic library c:/php/ext/php_mysql.dll
– не найден указанный модуль
То еще раз сверьтесь с инструкциями из раздела, где описывается подключение к PHP библиотеки для работы с MySQL. Используете ли Вы “правильную” версию файла php_mysql.dll (именно для той версии PHP, которая установлена в системе)?
Версии файла php_mysql.dll различаются для разных версий PHP, хотя и имеют одно и тоже название.
Скопирована ли библиотека libmysql.dll из каталога с установленным PHP в системный каталог C:/Windows/System32?
Неизвестные ошибки
Если все же настроить связку Apache, PHP и MySQL не получается, то причины могут быть в следующем:
- Использование русских буквы в именах директорий прописываемых в настроечных файлах httpd.conf и php.ini.
- Использование пробелов в именах файлов и директории в настроечных файлах. Если в именах файлов и директорий есть пробелы, то их нужно обрамлять кавычками.
- Использование разделителей каталогов формате Windows (обратный слеш): c:apache/bin. Для надежной работы следует использовать разделители в формате UNIX (прямой слеш), например: c:/apache/bin.
- Существование нескольких настроечных файлов php.ini на машине, либо отсутствие такого файла. Нужный файл php.ini должен лежать в директории Windows. Проведите поиск по дискам компьютера, найдите все лишние версии файлов и удалите их.
Источник