PHPIniDir не работает под Windows 7?

У меня был сервер, работающий на машине с Windows XP, с использованием Apache2 с PHP и MySQL. Недавно я обновился до Windows 7, и у меня возникли проблемы с его работой. Apache работает нормально, и PHP работает, но я не могу заставить его работать с файлом php.ini.

Когда я устанавливаю PHPIniDir в каталог с файлом php.ini, служба Apache НЕ запускается.

Когда я устанавливаю PHPIniDir в каталог без файла php.ini, служба Apache запускается.

Когда я пропускаю PHPIniDir, служба Apache не запускается.

Кто-нибудь нашел решение этой проблемы? Спасибо!

ИЗМЕНИТЬ:

PHPIniDir "C:\Windows" #работает (нет файла php.ini)

PHPIniDir "C:\Program Files (x86)\php\" #не работает (содержит php.ini файл)

Я включаю не более одного в любой момент времени.


person giroy    schedule 16.12.2009    source источник
comment
Можете ли вы опубликовать директивы конфигурации, которые работают и не работают? У вас есть какие-либо ошибки в журналах Apache?   -  person Pascal MARTIN    schedule 16.12.2009
comment
D:\Apache24\bin›httpd.exe -d D:/Apache24 AH00526: синтаксическая ошибка в строке 517 файла D:/Apache24/conf/httpd.conf: неверная команда «PHPIniDir», возможно, написана с ошибкой или определена не включенным модулем в конфигурации сервера   -  person Mark Lakata    schedule 04.04.2012


Ответы (7)


У меня такая же проблема. Я починил это. Откройте файл php.ini с помощью блокнота или любого текстового редактора. Отключите все расширения в файле php.ini. Комментируйте расширения одно за другим и выясняйте, какое расширение вызывает проблему.

person Murat    schedule 01.06.2010

удалить последнюю косую черту:

PHPIniDir "C:\Program Files (x86)\php"
person ar2r    schedule 09.02.2012
comment
Снова укусил обратную косую черту в httpd.conf..., спасибо - person Alberto Martinez; 06.12.2017

Причин несколько:

  • Старая версия Apache и/или PHP. Apache 2.2.13/2.2.14 отлично работает в Windows 7, а также в PHP 5.2.11/5.3.
  • Некоторые расширения PHP могут привести к сбою запуска Apache. Вы можете либо проверить файлы журнала Apache, либо включить «display_startup_errors» в php.ini (когда он включен, вы можете использовать ApacheMonitor.exe для запуска или остановки службы Apache, и в случае возникновения ошибки он отобразит сообщение). Вы также можете отключить все расширения PHP и, если это поможет, включить их одно за другим и посмотреть, какое из них вызывает проблему.
  • Имхо, убедитесь, что вы скачали архив PHP и не использовали автоматический установщик. По моему опыту, установщики никогда не работали хорошо. Вы всегда можете добавить две директивы, связанные с PHP (PHPIniDir и LoadModule), в файл конфигурации Apache и убедиться, что каталог PHP включен в путь Windows. О, и ошибка службы также может быть вызвана библиотекой php2apache.
  • Проверьте, включены ли каталоги Apache/PHP/MySQL в путь Windows. Вот хорошая утилита для этого: Redmond Path. Вы можете добавить в путь следующие каталоги: Apache/bin dir, PHP dir, MySQL/bin dir. Это может помочь.
person Community    schedule 16.12.2009
comment
Я пытался включить ошибки, но по-прежнему получаю ту же ошибку: запрошенная операция не удалась! - person giroy; 16.12.2009
comment
В конце php.ini есть раздел с расширениями. Они выглядят так: [PHP_BZ2] extension=php_bz2.dll [PHP_CURL] extension=php_curl.dll Когда все они закомментированы, apache запускается нормально. Любая идея, почему это? - person giroy; 16.12.2009
comment
После еще нескольких тестов кажется, что я могу включить расширения, но есть какой-то предел, я думаю, по общему размеру расширения? - person giroy; 16.12.2009
comment
Итак, это вызвано некоторым расширением PHP. Вы уже выяснили, какой именно? Нет необходимости включать все расширения сразу. Просто попробуйте включить те, которые вам нужны, один за другим, чтобы вы знали, какой из них не работает. Не могли бы вы также проверить значение extension_dir в php.ini? - person ; 16.12.2009
comment
О, и не могли бы вы указать версии Apache и PHP, которые вы установили? - person ; 16.12.2009
comment
Ok. Это именно то, что у меня есть. Еще две вещи. Вы тестировали файл конфигурации Apache? (Пуск -> Все программы -> HTTP-сервер Apache -> Настроить сервер Apache -> Тестовая конфигурация). Он должен сказать «Синтаксис в порядке». Не могли бы вы также проверить, есть ли что-нибудь в файле error.log? (ApacheDir/logs/error.log, если вы не меняли путь к error.log). - person ; 16.12.2009
comment
Тест говорит, что синтаксис в порядке, как вы сказали. В журнале нет ошибок, однако я получаю следующие предупреждения в случае сбоя. [предупреждение] (OS 995) Операция ввода-вывода была прервана либо из-за выхода из потока, либо из-за запроса приложения. :winnt_accept: Ошибка асинхронного AcceptEx. [предупреждать] файл pid C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/httpd.pid перезаписан - Нечистое завершение предыдущего запуска Apache? - person giroy; 16.12.2009
comment
О, может быть, это поможет: brooks-bilson.com/blogs/rob/index.cfm/2008/1/4/ - person ; 16.12.2009
comment
это не помогло. Предупреждение id кажется более распространенным. - person giroy; 16.12.2009
comment
Может быть, это вызвано брандмауэром или другим приложением, которое использует тот же порт, что и Apache? Мне только что удалось разбить Apache через Skype (Инструменты -> Параметры -> Дополнительно -> Соединение -> Использовать порт 80 и 443...), я фактически отключил его сразу после установки, но когда он вернулся возникает та же ошибка (запрошенная операция не удалась!), хотя Apache ничего не записывает в файл журнала. - person ; 16.12.2009
comment
Если это не вызвано брандмауэром/Skype, вы можете попробовать следующее: #1 Замените установку PHP на эту: php.net/get/php-5.2.11-Win32.zip/from/a/mirror. # 2 Убедитесь, что и Apache, и PHP включены в путь Windows. Если обе эти вещи не работают, попробуйте переместить Apache и PHP из каталога Program Files в корень (скажем, C:\Apache и C:\PHP), просто попробуйте использовать какой-нибудь путь без пробелов, это помогает иногда. - person ; 16.12.2009
comment
№1, кажется, исправил это. единственная разница, которую я вижу, заключается в том, что в новой версии гораздо меньше расширений, поэтому я предполагаю, что одно или несколько расширений что-то ломали. Спасибо! - person giroy; 17.12.2009

У меня была та же проблема, вы должны указать полный URL-адрес модуля PHP в файле httpd.conf.

Все руководства, которые я нашел, говорили следующее:

PHPIniDir "C:/Program Files/PHP"
LoadModule php5_module "php5apache2_2.dll"

Когда на самом деле нужно:

PHPIniDir "C:/Program Files/PHP"
LoadModule php5_module "C:/Program Files/PHP/php5apache2_2.dll"
person Tungsten Carbide Rings    schedule 01.03.2011

Я так и не смог пройти дальше этой строки:

LoadModule php5_module "C:/Program Files (x86)/PHP/php5apache2_2.dll"

Итак, наконец, в отчаянии я создал новую папку C:/PHP, скопировал эту dll в C:/PHP и изменил строку на

LoadModule php5_module "C:/PHP/php5apache2_2.dll"

И с первого раза все получилось! Может быть, он просто не любит пробелы в пути. Или, может быть, ему не нравятся длинные имена путей. Понятия не имею. Вполне вероятно, что это исправление специфично для конкретной версии Apache и PHP, но, потратив около 20 часов на эту проблему, я настолько туманен, что не знаю, что это может быть за зависимость.

person Dave Grossman    schedule 24.08.2012

У меня тоже была эта проблема, но я смог заставить Apache снова работать, отключив все расширения в файле php.ini (у меня были все DLL в папке ext, но они были отключены в php.ini). использовать все расширения php, я попытался отключить одно за другим, чтобы увидеть, какие из них вызывали сбой Apache. Я также установил PHP в C:, чтобы избежать проблем с "пустым пространством/длинным путем". В конце концов, вот как выглядит файл httpd.conf моего Apache в части PHP:

#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "C:\PHP"
LoadModule php5_module "C:\PHP\php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

Кроме того, расширения, которые приводили к сбою apache, были:

  • php_oci8.dll
  • php_pdo_oci.dll
  • php_pdo_oci8.dll
  • php_pdo_sqlite_external.dll
  • php_pspell.dll
  • php_sybase_ct.dll

Хотя я действительно не знаю, что с ними не так.

Обратите внимание, что я установил PHP с помощью установщика msi (php-5.2.17-Win32-VC6-x86.msi) и установил ВСЕ расширения. Я также использую Windows 7.

person priki    schedule 25.01.2013

В качестве альтернативы ответу @ar2r об удалении последней обратной косой черты вы можете написать путь, используя (прямую) косую черту, и он будет работать даже с косой чертой в конце. По какой-то причине использование обратной косой черты в конце пути не работает в последних версиях Windows:

# works, no slash or forward slash at the end
PHPIniDir "C:\Program Files\PHP7"
PHPIniDir "C:/Program Files/PHP7/"
PHPIniDir "C:\Program Files\PHP7/" # mixing slashes and backslashes

# doesn't works, backslash at the end
PHPIniDir "C:\Program Files\PHP7\"

Обратите внимание, что комбинирование прямой и обратной косой черты работает до тех пор, пока завершающая косая черта не является обратной косой чертой.

Это относится и к другим директивам, я заметил такое поведение при настройке Alias для значков индекса каталога.

person Alberto Martinez    schedule 06.12.2017