0

当我尝试在我的 Xampp 服务器 1.7.1 上运行 CMS ( MyPortal 2 ) 时收到此错误消息:

Incompatible file format: The encoded file has format major ID 65540, whereas the Optimizer expects 2 in C:\xampp\htdocs\mp2.32-5.3\index.php on line 0

我假设源项目是用 Zend Guard 编码的。使用 Notepad++ 打开文件显示第一行:

Zend 2004072203 65540 24625 95846

我知道我使用的是正确的 php,因为它在网站上说,要求是 php 5.2.1 或更新版本。Xampp 1.7.1 附带了 php 5.2.9 和 zend 优化器 3.3.3,正如您在此屏幕截图中所见,我从 phpinfo 获取。

我还确保在 php.ini 文件中将zend_loader设置为 1。服务器截图php.ini 文件截图上的 phpinfo

我也尝试过不同的 Xampp 版本:1.7.1;1.7;1.6.8;1.6.6 -> 所有这些都有 Zend 优化器 3.3.3 或 3.3.0 但不同的 php 版本。错误是一样的。我也尝试过使用 Zend 优化器版本 2.2.x 的 Xampp 版本 1.5.0。我只得到了完全相同的结果,而不是Optimizer在第 0 行的 C:\xampp.... 中期望 2,它是一个不同于 0 的数字。

我也尝试切换到 Wamp。我得到了完全相同的错误。

但是,我没有尝试安装 Zend Guard Loader,因为 Xampp 和 Wamp 都使用带线程安全的 php,而 Zend Guard Loader 要求 php 是 nts。

我在 Windows 10 上运行 Xampp。

任何帮助将不胜感激。

4

1 回答 1

0

我解决了,如果有人感兴趣的话。

简而言之,我尝试在 Xampp 上安装的 CMS 是使用 Zend Guard 5.5 使用 php 5.3 NTS编码的。


关于xamppzendphp的极客信息:

Zend Optimizer 是 Zend Guard Loader 的前身。Zend Optimizer 的最后一个版本支持 php 5.2。Php 5.3 及更高版本不再支持 zend 优化器,您应该安装 Zend Guard Loader。Xampp v 1.7.1 是支持 Zend Optimizer (v3.3.3) 的最后一个版本,因为它具有 php 5.2.9。另一方面,Xampp v 1.7.2 使用的是 php 5.3.0,而且,您猜对了,它没有附带 zend opzimiter。

另外,有趣的事实:xampp 附带的 php 是线程安全的,而如果要安装 zend 保护加载程序,则必须安装 php 非线程安全 (nts)。

我是怎么做到的:

首先,我尝试使用 Xampp v. 1.7.1,因为它具有 Zend 优化器 3.3.3,并预装了 php 5.2。我试图运行它,但它产生了上面标题中写的错误。所以从上面的错误中,你无法真正知道,你需要什么样的 zend loader。经过密集的谷歌搜索后,我意识到我需要 Zend Guard Loader 来测试不同版本的 cms。所以,我决定尝试安装php nts。有一个关于如何在 xampp 上安装不同 php 版本的分步教程。我从这个 PHP 存档下载了 php 5.5 nts并按照我之前提到的教程进行操作。我还备份了已经安装的 php 文件夹,以防万一……你知道的。复制 xampp 文件夹中的新 php 文件夹并将名称更改为“php”,以便 xampp 正确解释它。我在 apache 文件夹中还做了一些其他的事情(我添加了FastCGI mod_fcgid 模块并配置了 httpd-xampp.conf 文件),如教程中所述。然后,在设置好 php 并使用 phpinfo 对其进行测试后,我从这里下载了用于 php 5.5 的 zend guard loader 7.0.0:zend guard loader。我启动了 xampp,它显示了相同的错误,但略有不同:

Incompatible file format: The encoded file has format major ID 4, whereas the Loader expects 6

这是一个进步,因为它告诉我它需要 Zend 编码器 ID 为 4 的 Zend Guard Loader。它显示 6,因为我已经为 php 5.5 安装了 Zend Guard Loader 7.0.0,它的 Zend 编码器 ID 为 6。有一张显示 php 支持哪个 zend Guard 加载器和编码器 ID(请注意,在表中 Zend Encoder ID 4 需要 Zend Guard 版本 5.5 而不是版本 6)。从这里开始很简单。CMS 想要 zend 保护加载器 5.5,它支持 zend 编码器 ID 4 并使用 php 5.3。我下载了 php 5.3,下载了 Zend Guard loader 5.5,这让它工作了!


我使用的其他有用链接:

于 2021-01-26T00:03:40.323 回答