Intereting Posts
preg_replace, чтобы вырезать непечатаемые символы, кажется, также удаляет все иностранные символы Могу ли я вручную указать на профилировщике xdebug, чтобы начать профилирование в определенном месте? диспетчер иногда вызывает код из другого приложения Сортировка таблицы с помощью jQuery apns запускает php-скрипт в режиме распространения на реальном сервере Как добавить дополнительные атрибуты сеанса идентификации пользователя в Yii2? Как использовать буферизацию вывода внутри теста PHPUnit? Объединение строк в виде массива из другой таблицы для каждой строки Инструкция PDO подготовить и сопоставить в логическом режиме Получить частичную веб-страницу Сделать анонимный звонок с помощью PHP SDK Что считается лучшей практикой для обработки переменных, хранящихся в файле конфигурации? Удалить первый экземпляр строки с помощью PHP Является ли Propel'sArray / fromJSON безопасным с SQL-инъекции? На PHP, как узнать, сколько месяцев прошло в этом месяце uptil сегодня?

LDAP работает с PHP CLI, но не через apache

Я пытаюсь проверить подлинность LDAP на сервере Windows 2008 Server из окна Fedora.

Следующий код работает из командной строки (печатает «Успех»):

if($ldap = ldap_connect('10.0.0.101')) { ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3); $bind = ldap_bind($ldap,'administrator@domain.tld','XXXXXXX'); print ldap_error($ldap); } 

… вытягивание одного и того же файла с помощью печати Apache / mod_php «Не удается связаться с сервером LDAP»

Я видел много сообщений о таких проблемах, но не нашел полезной информации о том, как ее разрешить.

Я очень долго боролся с этой точной проблемой на centos6. Разница php.ini кажется хорошим местом для проверки, но это не дало мне ответа. Оказывается, это было связано с SELinux.

 $ getsebool -a | grep httpd allow_httpd_anon_write --> off allow_httpd_mod_auth_ntlm_winbind --> off allow_httpd_mod_auth_pam --> off allow_httpd_sys_script_anon_write --> off httpd_builtin_scripting --> on httpd_can_check_spam --> off httpd_can_network_connect --> off httpd_can_network_connect_cobbler --> off httpd_can_network_connect_db --> on httpd_can_network_memcache --> on httpd_can_network_relay --> off httpd_can_sendmail --> off httpd_dbus_avahi --> on httpd_enable_cgi --> on httpd_enable_ftp_server --> off httpd_enable_homedirs --> off httpd_execmem --> off httpd_manage_ipa --> off httpd_read_user_content --> off httpd_run_stickshift --> off httpd_setrlimit --> off httpd_ssi_exec --> off httpd_tmp_exec --> off httpd_tty_comm --> on httpd_unified --> on httpd_use_cifs --> off httpd_use_gpg --> off httpd_use_nfs --> off httpd_use_openstack --> off httpd_verify_dns --> off 

Вы заметите, что в моем случае адрес httpd_can_network_connect был отключен. Это логическое значение в SELinux и может быть скорректировано с помощью следующей команды.

 $ setsebool -P httpd_can_network_connect on 

Подробнее об этом вы можете узнать по адресу http://wiki.centos.org/TipsAndTricks/SelinuxBooleans, который явно использует пример apache и ldap в качестве примера. Надеюсь, поможет!

Возможно, у вас возникла эта проблема, потому что у Apache есть один файл php.ini и у CLI может быть другой, и версия Apache может не включать расширение LDAP .

Попробуйте проверить, какой php.ini загружается с phpinfo() в обеих средах:

 <?php print phpinfo(); ?> 

Вы должны увидеть путь php.ini и дополнительную полезную информацию:

 Configuration File (php.ini) Path => /etc/php5/cli Loaded Configuration File => /etc/php5/cli/php.ini Scan this dir for additional .ini files => /etc/php5/cli/conf.d 

Альтернативный способ увидеть конфигурацию, загруженную в CLI – это вызов php с параметром -i :

 $ php -i | grep 'php.ini' Configuration File (php.ini) Path => /etc/php5/cli Loaded Configuration File => /etc/php5/cli/php.ini