当我通过命令行单击根目录中“shell”文件夹内的编译器状态时 我的商店,它返回编译器已启用,以便在管理中,但是当我检查 Magento 站点的根文件夹中返回的状态时,状态已禁用!
$/var/www/magento# php shell/compiler.php 状态 编译器状态:禁用 编译状态:已编译 收集的文件数:6764 编译范围数量:4 $/var/www/magento# cd shell/ $/var/www/magento/shell# php编译器.php状态 编译状态:启用 编译状态:已编译 收集的文件数:6764 编译范围数量:4
尽管我尝试通过关闭编译器模式,重新编译,然后重新打开来解决此问题,但我得到了相同的结果!
这“按设计工作”(只是设计得很糟糕)。 这是来自
compiler.php
的一段代码,用于确定状态。
$compilerConfig = '../includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
$status = defined('COMPILER_INCLUDE_PATH') ? 'Enabled' : 'Disabl ed';
关键线是
$compilerConfig = '../includes/config.php';
。 该路径从当前目录向上上一个目录以找到config.php
。 PHP shell 脚本的工作目录是它调用的,而不是它所在的目录。所以你说
$/var/www/magento# php shell/compiler.php state
该脚本在
中查找文件
/var/www/magento/../includes/config.php
或
/var/www/includes/config.php
由于找不到,因此假定处于禁用状态。
includes/config.php
并注释掉两行
define
。 这就是 Magento 启用/禁用编译器所做的全部工作。
http://svn.magentocommerce.com/source/branches/1.7/includes/config.php
代码片段来自shell/compiler.php
$compiler = $this->_getCompiler();
$compilerConfig = '../includes/config.php';
if (file_exists($compilerConfig)) {
include $compilerConfig;
}
$status = defined('COMPILER_INCLUDE_PATH') ? 'Enabled' : 'Disabled';
此外,我建议仅使用
$compilerConfig = '../includes/config.php';
更改为
$compilerConfig = dirname(__FILE__).'/../includes/config.php';