Magento 编译器 - 命令行

问题描述 投票:0回答:3

当我通过命令行单击根目录中“shell”文件夹内的编译器状态时 我的商店,它返回编译器已启用,以便在管理中,但是当我检查 Magento 站点的根文件夹中返回的状态时,状态已禁用!

$/var/www/magento# php shell/compiler.php 状态
编译器状态:禁用
编译状态:已编译
收集的文件数:6764
编译范围数量:4
$/var/www/magento# cd shell/
$/var/www/magento/shell# php编译器.php状态
编译状态:启用
编译状态:已编译
收集的文件数:6764
编译范围数量:4

尽管我尝试通过关闭编译器模式,重新编译,然后重新打开来解决此问题,但我得到了相同的结果!

php magento command-line
3个回答
0
投票

这“按设计工作”(只是设计得很糟糕)。 这是来自

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

由于找不到,因此假定处于禁用状态。


0
投票
编辑

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';

此外,我建议仅使用

APC 或任何其他 OPCode 缓存,因为它可以解决同样的问题,而且不会那么令人头疼。


0
投票
我意识到这是一篇旧帖子,但看起来这个错误仍然存在于 Magento 1.9 中。 如果您希望能够从其他目录检查编译器状态,只需修改此行:

$compilerConfig = '../includes/config.php';

更改为

$compilerConfig = dirname(__FILE__).'/../includes/config.php';
    
© www.soinside.com 2019 - 2024. All rights reserved.