Httpd libphp5.so ldap错误

Kim*_*erg 6 php apache homebrew osx-yosemite

由朱兹解决

谢谢!

$ brew uninstall php56
$ brew install php56 --without-ldap
Run Code Online (Sandbox Code Playgroud)

所以,我需要一些帮助,我环顾四周,但找不到任何解决问题的方法.

我已经通过Homebrew安装了Apache和PHP,但由于某些原因它们似乎不能一起工作.

Apache安装了httpd24 --enable-rewrite --enable-ssl --with-privileged-ports --with-http2通过Homebrew/apache tap

PHP安装与php56 --with-homebrew-apxs --with-apache --with-homebrew-curl --with-homebrew-openssl通过Homebrew/homebrew-php tap

并且它们都安装正确,我在httpd.conf中加载了libphp5.so; 就像你一样,当我运行sudo httpd -k start/restart我得到这个:

httpd:
Syntax error on line 173 of /usr/local/etc/apache2/2.4/httpd.conf:
Cannot load /usr/local/Cellar/php56/5.6.20/libexec/apache2/libphp5.so into server: 
dlopen(/usr/local/Cellar/php56/5.6.20/libexec/apache2/libphp5.so, 10): 
Symbol not found: _ldap_control_find
Referenced from: /usr/local/Cellar/php56/5.6.20/libexec/apache2/libphp5.so
Expected in: /System/Library/Frameworks/LDAP.framework/Versions/A/LDAP
in /usr/local/Cellar/php56/5.6.20/libexec/apache2/libphp5.so
Run Code Online (Sandbox Code Playgroud)

我不能为我的生活弄清楚什么是错的,有什么帮助吗?没有php lib,Apache工作正常.

Jul*_*ulz 13

我今天通过自制软件升级了php56并且拥有相同的pb.它似乎与ldap支持有关.

在提供修复之前,我建议卸载php56,然后在没有ldap的情况下重新安装

$ brew uninstall php56
$ brew install php56 --without-ldap
Run Code Online (Sandbox Code Playgroud)

简单快捷.


blu*_*ary 7

对于遇到此问题的任何其他人,无法禁用LDAP支持,因为他们正在处理的项目需要它,另一种方法是让Homebrew通过从源代码构建它来重新安装PHP,我在下面也会介绍作为一些技巧,我发现这些技巧多年来一般用于调试与PHP相关的问题并将PHP加载到Web服务器环境中(在本例中为Apache).我希望下面的信息对其他人有用,并为其他人节省了解决这个问题的时间.


对于许多Homebrew软件包,当您只是执行brew install <package>命令时,Homebrew将安装您正在安装的软件的预编译版本(Homebrew社区的哪些成员友好地贡献).在大多数情况下,这很好,因为它节省了大量时间(因为代码已经编译,一些复杂的代码库可能需要数小时才能编译!),并且在大多数情况下,预编译版本就是您想要的.

但是,当预编译版本似乎包含错误或可能与其他已安装的软件冲突时,从源代码安装软件包(或者让Homebrew代表您从源代码重新安装软件包)可能能够解决您遇到的问题.应该注意的是,这里的建议解决方案可能不适用于所有人或所有类似问题 - 结果取决于许多变量,例如错误实际存在的位置 - 例如,如果错误在软件的源代码中,那么安装,然后这个解决方案不太可能有所帮助,但如果该错误是由软件配置或预先包装其他代码的方式引起的,那么它可能是有用的,幸好在这种情况下.

解决问题:通过Homebrew从Source重新安装PHP

通过运行以下命令,我能够在OS X 10.10.5 Yosemite上从Homebrew成功安装PHP 5.6:

brew reinstall php56 --build-from-source

注意特殊的Homebrew --build-from-source标志 - 这告诉Homebrew不要安装您正在安装的软件包的预构建版本,而是从其源代码存储库重新构建软件包.

你实际上可能找到像我一样,我第一次不得不删除PHP 5.6(通过brew uninstall php56),运行上述命令之前(你实际上可以改变reinstall子刚刚install执行后uninstall在语义上是正确的,但reinstall命令工作不管是否包已经安装或未安装).

重新安装PHP后重新安装PHP扩展模块

我还发现有必要重新安装我已经安装的其他PHP模块包(例如OPCache),通过brew reinstall php56-<module>从源代码构建重新安装PHP 5.6之后运行相关的.

您可以通过运行来查看通过Homebrew安装的其他PHP模块包brew list | grep php.简单地重新安装它们应该是安全的,您可以通过运行以下操作轻松完成:

brew list | grep php56 | xargs -I{} brew reinstall {}

如果您希望在重新安装的内容中更具针对性,您应该能够通过查看启动Web服务器的输出,查看Web服务器日志或查看来查看哪些PHP模块无法加载(如果存在任何冲突)在命令行上简单地调用PHP二进制文件的输出(假设你的路径设置正确,指向你刚刚用Homebrew安装的PHP版本,它通常是这样).

有关这些地方的一些注意事项可以在下面找到调试信息:

Apache HTTPD启动调试输出

要查看在OS X上启动Apache的详细输出,您可以运行以下命令:

sudo httpd -k restart -e debug

这是运行的替代方法,sudo apachectl restart它是围绕httpd二进制文件的包装脚本- 该-k restart选项告诉httpd执行哪个函数(在这种情况下重启 - 您可以通过运行查看所有支持的选项man httpd),并且该-e标志允许您设置详细级别 - 默认是有效的沉默.设置-edebug级别提供最高级别的输出,因此如果在加载其中一个已配置的Apache模块时出现问题,您将在运行上述命令的输出中看到它.因此,如果您发现Apache实例未按预期工作,这通常是一个很好的起点.

OS X上的Apache HTTPD错误日志

要查看OS X上的Apache日志,请打开Console.app(可在/Applications/Utilities/文件夹中找到)并展开/var/log/apache2/日志列表侧栏中的文件夹,然后选择该error_log文件.在这里你应该看到Apache加载时的其他输出(sudo httpd -k restart -e debug从控制台运行命令时打开Console.app很好).

如果PHP本身在加载任何模块时遇到问题,您应该error_log在Console.app中看到与此相关的这些错误.

您还可以打开另一个终端/控制台窗口并sudo tail -f /var/log/apache2/error_log作为使用Console.app的替代方法运行.tail -f以有效的瞬时方式使用更新,而Console.app中显示的输出有时可能落后于实际事件,如果您没有看到预期的输出,有时可能需要手动刷新.

PHP启动错误

最后,要查看PHP是否遇到任何错误而不添加Web服务器自身加载过程的复杂性,您可以在命令行上运行PHP,看看PHP是否在那里发出任何错误.

值得注意的是,在大多数系统中,PHP配置为通过命令行运行以及如何配置为在Apache中运行的方式通常是相同的,尤其是关于加载哪些扩展模块,但是如果您的系统配置不同您可能需要结合使用检查Web服务器的错误日志输出以及直接在命令行上运行PHP的输出,以确保已完全解决所有加载错误/冲突.

使用-v标志运行PHP 以使PHP打印其当前构建信息通常是查看正在发生的事情的一种很好的快速方法,并且不会将PHP二进制文件保留为REPL模式(等待用户输入):

php -v

如果您配置的任何PHP模块(扩展)php.ini或其他.ini加载的文件中的文件加载php.ini有问题,您应该看到错误输出到PHP打印的版本信息正上方的控制台.例如,您可能会看到以下内容:

Warning: PHP Startup: sodium: Unable to initialize module
Module compiled with build ID=API20131226,NTS,debug
PHP    compiled with build ID=API20131226,NTS
These options need to match
 in Unknown on line 0

PHP 5.6.20 (cli) (built: Apr 14 2016 14:23:48) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
    with XCache v3.2.0, Copyright (c) 2005-2014, by mOo
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0, Copyright (c) 2002-2016, by Derick Rethans
    with XCache Cacher v3.2.0, Copyright (c) 2005-2014, by mOo
Run Code Online (Sandbox Code Playgroud)

由于构建设置之间存在冲突,上面您可以看到与加载libsodium(sodium)PHP扩展模块相关的错误.在此示例中,为了说明潜在的冲突,PHP之前已使用--with-debug标志安装,而重新安装的版本缺少此设置.另一种选择是从源代码重新安装和重建PHP,同时启用调试选项(brew reinstall php56 --build-from-source --with-debug).

虽然模块冲突的原因可能会有所不同,但您通常应该发现使用Homebrew重新安装任何受影响的PHP扩展模块包(一旦重新安装PHP本身)将解决冲突.在这种情况下,我运行以下命令来重新安装PHP libsodium包:

brew reinstall php56-sodium

一旦模块的安装已经完成,当我重新运行php -v,有关该模块的加载错误不再存在,并且我能够确认libsodium通过检查的输出扩展模块已经成功加载到PHP php -m(它告诉PHP列出所有已加载的模块),然后在这种情况下我使用grep "sodium"(完整的命令php -m | grep "sodium")只显示php -m包含字符串的任何行sodium.

您可以取代你在上面的命令,遇到问题的具体PHP扩展模块,如换sodiumopcache,等

PHP模块扩展未通过Homebrew安装

请注意,如果您在使用Homebrew之外安装了其他PHP扩展模块,例如PHP PECL存储库中的扩展,则在通过Homebrew重新安装PHP后,可能还需要重新安装一个或多个这些附加模块.您应该查阅这些附加模块的安装说明,以确定如何最好地重新安装它们.