西部数码主机 | 阿里云主机| 虚拟主机 | 服务器 | 返回乐道官网
当前位置: 主页 > php教程 > OpenCart教程 >

解决OpenCart后台Dashboard首页打开很慢的问题

时间:2016-01-29 23:19来源:未知 作者:好模板 点击:
OpenCart 后台(Dashboard)首页打开很慢,大约9秒,其他任何页面都很快。 首先开启mysql的慢查询记录,因为后台首页有一个图表统计,以及订单和用户的等统计数据。可是结果他说并没有
OpenCart 后台(Dashboard)首页打开很慢,大约9秒,其他任何页面都很快。
首先开启mysql的慢查询记录,因为后台首页有一个图表统计,以及订单和用户的等统计数据。可是结果他说并没有查询超过2秒的记录。看来不是mysql查询的问题。
然后我又让他用firebug看一下,哪个http请求的时间线最长,本来以为有外部请求的原因,结果发现就是route=common/home&token= 返回的一个ajax超时状态。于是我就去查看了admin/controller/common/home.php 的源码,也没有发现有什么外部的请求。
于是我就一个个查看ControllerCommonHome 中index方法中所有的$this->load->model,后来发现下面这段代码:
 
if ($this->config->get('config_currency_auto')) {
            $this->load->model('localisation/currency');

            $this->model_localisation_currency->updateCurrencies();
        }
 
 
去admin/model/localisation/current.php看了一下源代码,果然里面有一段curl请求外部链接的代码:
public function updateCurrencies($force = false) {
		if (extension_loaded('curl')) {
			$data = array();

			if ($force) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
			} else {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
			}

			foreach ($query->rows as $result) {
				$data[] = $this->config->get('config_currency') . $result['code'] . '=X';
			}

			$curl = curl_init();
			//就是这里了,看到木有
			curl_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv');
			curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

			$content = curl_exec($curl);

			curl_close($curl);

			$lines = explode("\n", trim($content));

			foreach ($lines as $line) {
				$currency = utf8_substr($line, 4, 3);
				$value = utf8_substr($line, 11, 6);

				if ((float)$value) {
					$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
				}
			}

			$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($this->config->get('config_currency')) . "'");

			$this->cache->delete('currency');
		}
	}

看到了吧,它用curl抓取了yahoo的关于汇率的数据,结合这2段代码可以看出,其实它的功能就是打开这个页面的时候自动更新数据库中汇率数据。
到此问题找到原因了,那么解决的方法总结一下:
 
服务器PHP是否支持CURL扩展
服务器空间是否允许访问外部链接
可以关闭自动更新汇率(Dashboard>System>Setting>Your Store>edit>local>Auto Update Currency 选择No)
(责任编辑:好模板)
顶一下
(0)
0%
踩一下
(1)
100%
------分隔线----------------------------
栏目列表
热点内容