在某些情况下,我们在magento后台刷新索引,但是网站会提示错误或者直接宕掉。这种情况经常会在网站中产品数量很大而且服务器资源有限的情况下发生。我们在这个时候可以尝试使用shell命令行来刷新网站索引。 在magento中,根目录下有一个“shell”文件夹,在这里面,你会看到“indexer.php”文件(注意:是indexer.php而不是index.php),这个文件就是我们用来刷新索引的脚本。下面,我们就来看看怎样使用“indexer.php”脚本来干净利落地刷新网站索引。 首先,我们先登录我们的服务器shell面板,然后进入magento的根目录下的shell文件夹。


ls
access-logs etc perl5 public_ftp ssl www
cd public_html/shell ls abstract.php compiler.php indexer.php log.php

第一步我们来执行“php -f indexer.php help”获得indexer.php脚本的帮助提示。 下面我们会看到命令的反馈。


php -f indexer.php help
Usage:  php -f indexer.php -- [options]

  --status             Show Indexer(s) Status
  --mode               Show Indexer(s) Index Mode
  --mode-realtime      Set index mode type "Update on Save"
  --mode-manual        Set index mode type "Manual Update"
  --reindex            Reindex Data
  info                          Show allowed indexers
  reindexall                    Reindex Data by all indexers
  help                          This help

       Comma separated indexer codes or value "all" for all indexers

上面的提示中可以看出,我们可以通过执行reindexall来刷新所有索引,但是我并不建议大家这样做,因为这样很可能会造成数据库服务器的超载,reindexall会一次性执行7条索引,这样会导致数据库的某些表被锁。 这里我建议大家在执行刷新索引的时候一条一条执行,这样会降低数据库的负载,同时也会降低消耗的时间。在magento中,一共有7条索引数据,我们可以用php -f indexer.php info来获取这7条索引的信息。


php -f indexer.php info
catalog_product_attribute Product Attributes catalog_product_price Product Prices catalog_url Catalog URL Rewrites catalog_category_product Category Products catalogsearch_fulltext Catalog Search Index cataloginventory_stock Stock Status tag_summary Tag Aggregation Data

如果你想刷新“catalog_url” 这条索引,那么就需要执行下面这条命令:


php -f indexer.php -- -reindex catalog_url
Catalog URL Rewrites index was rebuilt successfully in 00:00:11

总的来说,我还是建议大家用命令行的方式来刷新网站的索引,因为这种方式来刷新索引并不会导致网站的web服务器的资源消耗,也不会对服务器资源造成太大的影响。这也是我们使用shell来刷新索引的原因之一。

注:我之前遇到过一次php内存报错信息。 “Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 88 bytes)“. 在这,我们只需要来将php的内存提升一下就可以了。将php的内存修改为‘memory_limit’, ‘128M’即可,如果需要,可以提升为更大。