Apache 不会加载 Zend Guard Loader
Posted
技术标签:
【中文标题】Apache 不会加载 Zend Guard Loader【英文标题】:Apache won't load Zend Guard Loader 【发布时间】:2015-11-11 04:44:07 【问题描述】:我正在使用具有以下设置的 Ubuntu 15.04 - 64 位:
阿帕奇
服务器版本:Apache/2.4.10 (Ubuntu), 服务器搭建:2015年7月24日17:25:18
PHP
php 5.6.4-4ubuntu6.2 (cli)(构建时间:2015 年 7 月 2 日 15:29:28)版权所有, (c) 1997-2014 PHP Group Zend Engine v2.6.0,版权所有 (c), 1998-2014 Zend Technologies 与 Zend OPcache v7.0.4-dev,版权所有, (c) 1999-2014,由 Zend Technologies 提供
我的 php.ini(最后 5 行)
; Local Variables:
; tab-width: 4
; End
zend.loader=1
zend_extension="/var/www/extensions/ZendGuardLoader_56.so"
是的,ZendGuardLoader 不会被加载(“php -v”中没有提到,“phpinfo()”中也没有提到)。 线程安全被禁用!如果您需要其他选择,请告诉我。
到目前为止我所尝试的:
删除了“zend.loader=1”选项, 尝试使用“zend_loader.enabled = 1”而不是“zend.loader” 包含 ZendGuardLoader 的旧版本(5.5 而不是 5.6) 将所有者和组从两个文件更改为我的帐户(而不是 www-data) 将权限更改为 777、775、755也很高兴知道:
我的 Apache 错误日志也是“干净的”。如果我重命名 .so 文件,我的 Apache 会记录该异常。但在当前设置下,该文件是可读的.. 不要误会我的意思,但我希望出现类似“ZendGuardLoader 无法加载,因为”的消息..
更新1
几个小时后,我很害怕!我已经安装了 vagrant incl。 “Debian 7.8”也是如此,开始一切等等。在我的盒子上,我安装了 PHP (5.4) 和 Apache,将 www 文件夹创建到相同的目的地,并下载了 5.4 ZendGuard Loader。在我的盒子设置中,我做了同样的事情,就像在我的主系统上一样 -> php.ini,最后一个条目:“zend_extension=/vagrant/ZendGuardLoader.so”
文件存在,也可读,等等。在创建一个新的“info.php”(“phpinfo()”)之后,它仍然没有 ZendGuardLoader 扩展。命令 php -v 说的基本相同,与主系统相同(版本差异..)。
php -v的解决方案
好吧,伙计们,我的想法坏了——但它还没有解决!我告诉过你,通过检查 php -v 输出是非常默认的(没有 ZendGuardLoader)。但是(!):php -v 由命令行(cli)执行 - 所以我在 php5\cli\php.ini 中添加了“zend_extension” -> 就像一个魅力!
PHP 5.4.41-0+deb7u1 (cli)(构建时间:2015 年 5 月 22 日 12:49:18) 版权所有 (c) 1997-2014 PHP 集团 Zend Engine v2.4.0,版权所有 (c) 1998-2014 Zend Technologies Zend Guard Loader v3.3,版权所有 (c) 1998-2013,由 Zend Technologies 提供
这就是我想要的。所以我使用命令行调用了 phpinfo 文件 - 并将输出保存到一个单独的文件中。正如我所看到的,ZendGuardLoader 也被提供了!
但是仍然存在 Apache 问题。 zend_extension 行在 apache2\php.ini 和 cli\php.ini 之间完全匹配。
所以这不是权限问题,因为 CLI 没有问题。我认为,apache 坏了,因为它不会加载那个不那么特别的扩展..
新的一天 - 新的想法
好的,伙计们,昨天我们明白了为什么它不能在 CLI 上运行,但这不是主要问题。所以我已经在 CLI 和 apache 上集成了 ioncube。 CLI 就像一个魅力。 Apache 也不会加载 ioncube。那么这个 apache.. 有什么问题呢?
我试图通过在 php5\apache2\conf.d\ 目录中创建一个新文件来引发一些错误。新文件包含与我的 php5\apache2\php.ini 相同的“zend_extension=/vagrant/ZendGuardLoader.so”sn-p - 所以 apache2 会尝试加载 .so 两次,并引发预期的错误:
PHP 致命错误:[Zend Guard Loader] 扩展“Zend Guard Loader”无法在 Unknown on line 0 中加载两次
Apache 尝试加载这两个扩展。所以我可能是对的,如果我要说,apache2 加载扩展,如果它只有一个!但似乎 apache 无法与扩展一起使用。记住——php cli ("php -v" / "php -m" ) 可以!
【问题讨论】:
【参考方案1】:对于所有想知道解决方案的人:
在调试 Apache 一段时间后,我发现每个 apache2\php.ini 的包含对我来说无法正常工作。所以我在 apache2\conf.d\ 中创建了一个新文件 - 并删除了 apache2\php.ini 中的条目。
重新加载 apache2 后没有任何变化,但 phpinfo() 说,扩展已加载。我再次重新加载 - 最后!一切正常。我不确定,我或 apache2 会发生什么。
完全是古玩:重新启动 VM 后,我必须重新加载 apache2 两次。但在这个过程之后,一切都很完美。所以伙计们..
TL;DR;
在 apache2\conf.d\ 中创建新文件并使用相同的“zend_extension=/path” 重启 apache2 两次。 利润【讨论】:
以上是关于Apache 不会加载 Zend Guard Loader的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Zend Guard 加载器识别 PHP 文件是不是已编码
如何在 Xampp 上安装 Zend Guard Loader
PHP5.3PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
PHP:使用Zend对源码加密Zend Guard安装以及Zend Guard Run-time support missing的解决方法
SELinux对Zend Guard Loader有影响,必须关闭SELinux,Zend Guard Loader 才能正常