Apache не загружает расширение PHP MySQL, но IIS делает - PullRequest
6 голосов
/ 27 марта 2012

У меня действительно раздражающая проблема с PHP на Windows Server 2008 R2.IIS и Apache работают на одной и той же машине (Apache встроен в другой продукт, и он там не мой выбор).

IIS настроен на использование нескольких версий PHP и ни одной из PHPверсии были установлены с помощью установщика Windows (поэтому php.exe не существует в пути).

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

Если я проверяю phpinfo () на моем сайте Apache, у него нет записи для MySQL, даже если php_mysql.dll включен в php.ini и существует в каталоге \ ext.Если я (временно) добавлю эту версию PHP (тот же каталог, тот же php.ini) в IIS и настрою тестовый сайт с помощью phpinfo (), то в нем правильно отобразится MySQL.Я знаю, что это не просто странная проблема с phpinfo, потому что у меня есть PHP-сайт на базе MySQL, работающий в Apache, и он не работает с Call to undefined function mysql_connect()

Было предложено скопировать libmysql.dll из каталога PHP вC: \ Windows \ System32, но это не имеет значения.Поскольку на сервере имеется несколько версий PHP, я предполагаю, что, возможно, загружается неправильная версия libmysql.dll, но PATH не содержит никаких каталогов, содержащих libmysql.dll.

IIS и Apacheпросматривая точно такую ​​же установку PHP, php.ini и каталог ext, но только IIS может загрузить расширение MySQL.Apache входит в системную учетную запись по умолчанию, так как похоже, что System имеет доступ ко всем DLL.

В журналах Apache ничего не говорится о том, что какие-либо DLL не загружаются.Я регистрирую ошибки PHP в журнале событий, но об этих расширениях ничего не сообщается.

После поиска в Google этой проблемы я обнаружил другие внезапно возникающие проблемы в PHP на сервере Windows, но с обычными решениями - перестройка php.ini, перезапуск IIS, перезапуск сервера - не помогли.

Любые предложения о том, где искать дальше, очень ценятся!

Ответы [ 4 ]

3 голосов
/ 30 марта 2012

Я знаю, что в конечном итоге это может не ответить на ваш вопрос, но вы пытались настроить Apache для выполнения PHP через FastCGI (mod_fcgid) и использовать тот же двоичный файл, что и IIS?

Я знаю, что вы используете mod_php, но вызов его через FastCGI отвлечет PHP от процесса веб-сервера.Если расширения нормально загружаются в PHP, вызываемом через FastCGI, нет причин, по которым они не будут работать на другом веб-сервере.

Кроме того, я лично считаю, что это лучше, так как PHP вызывается толькокогда запрашивается * .php файл.Таким образом, Apache не будет загружать PHP в память для каждого запроса, что даст вам лучшую производительность для обслуживания статических файлов, например.

Обновление

Для этоговам нужно скачать mod_fcgid из http://httpd.apache.org/mod_fcgid/,, загрузить модуль в вашей конфигурации Apache следующим образом,

LoadModule fcgid_module modules/mod_fcgid.so  

И затем просто указать, какой двоичный файл вы хотите вызывать при запросе страниц PHP:

AddHandler fcgid-script .php  
FcgidWrapper "c:/php/php-cgi.exe" .php  

Затем файлы с расширением .php теперь будут выполняться оболочкой PHP FastCGI.Обязательно укажите тот же двоичный файл php-cgi.exe, который использует IIS.

Все расширения, которые ранее были доступны в IIS, теперь должны быть доступны в Apache, поскольку установка PHP в обеих средах одинакова.

Держите меня в курсе.

1 голос
/ 04 апреля 2012

В конечном итоге эта проблема сводится к отсутствующей ссылке на PATH.Хотя IIS, кажется, не требует наличия модулей PHP или PHP в пути, похоже, что это делает Apache (или, возможно, моя версия PHP?).Мне повезло, что мне нужно запустить только одну версию PHP вне IIS, так как я понятия не имею, что произойдет, если у меня будет несколько экземпляров Apache, ссылающихся на разные версии PHP и несколько каталогов PHP в пути - возможно, одна из них всегда будет терпеть неудачу.

Пока похоже, что добавление версии Apache PHP к пути не повлияло на версии PHP IIS, но я буду громко ругаться, если это вдруг произойдет.

1 голос
/ 04 апреля 2012

Как правило, вам потребуются разные библиотеки библиотек для разных версий PHP, которые вы используете.Лучше всего хранить их в своих собственных каталогах.

Есть несколько разных вещей, которые могут привести к тому, что модуль не будет загружаться, включая версию PHP, независимо от того, используете ли вы потоковую или не поточную версиюа также если двоичные файлы были скомпилированы как VC6 или VC9 †.Обычно самый простой способ отладки, если вы получаете какие-либо ошибки при загрузке модуля, - это запуск php.exe из командной строки, поскольку он будет выплевывать любые ошибки запуска (также убедитесь, что они включены в ваш php.ini, и вы загружаете правильныйфайл php.ini при этом).

† IIRC VC6 / VC9 относится к тому, с какой версией Visual Studio PHP была скомпилирована.

1 голос
/ 30 марта 2012

1.- проверьте путь php.ini в phpinfo.

2.- добавьте папку php в путь windows

http://www.computerhope.com/issues/ch000549.htm

3.- добавьте директивуPHPINIDir для apache conf

http://php.net/manual/en/install.windows.apache2.php

4.- раскомментируйте расширение mysql в соответствующем php.ini

5.- перезагрузите apache

6.-проверьте расширение mysql в phpinfo

и, пожалуйста, не копируйте файлы в system32

...