我正在使用Codeigniter制作的网站应用程序。我想从API密钥中获取数据并将其保存到数据库中。我有一个基本代码,但它不起作用。我需要哪些文件?我是新手,在这项任务上遇到了很多困难。
控制器:
getTestBed().get(YourService)
型号:
public function ee_cron_job(){
$decode_data = $this->Campaign_model->get_ee_api();
$this->db->query($query);
foreach ($decode_data->result() as $current) {
$data = array(
'ee_name' => $current['Name'],
'ee_clicked' => $current['Clickedcount'],
'ee_open' => $current['Openedcount'] ,
'ee_recipient' => $current['Recipientcount'],
'ee_sent' => $current['Sentcount'],
'ee_failed' => $current['Failedcount'],
'ee_unsubscribe' => $current['Unsubscribedcount'],
'ee_dateedded' => $current['Dateadded'],
'ee_lastactive' => $current['Lastactivity']
);
$this->db->query($query);
$this->Campaign_model->add($data);
$this->db->update('ee_campaigns');
}
}
首先,错误是: 致命错误:允许的内存大小为134217728字节耗尽(尝试分配5085070 比我添加了ini_set('memory_limit','1024M');并发生第二个错误: 致命错误:超过最长执行时间120秒。
我该怎么做才能让它发挥作用?
答案 0 :(得分:1)
嗯,你把你的模型放在一个永无止境的循环中。
public function get_ee_api() {
$response = Requests::get("https://api.elasticemail.com/v2/campaign/list?apikey=*", array());
//$this->get_ee_api(); take this line off. The function is calling it self over and over.
return json_decode($response->body, true);
}
这应该会让你摆脱执行时间问题,并希望你也能解决内存问题。
如果您需要遵循MVC模式,则需要停止在控制器中执行数据库操作。 获取模型以执行查询并将结果传递回控制器。 循环结果,我也没有在控制器中看到查询变量。
- 尝试使用curl
public function get_ee_api() {
$response = $this->get_web_page("https://api.elasticemail.com/v2/campaign/list?apikey=*");
$resArr = array();
$resArr = json_decode($response);
echo "<pre>"; print_r($resArr); echo "</pre>";
//return json_decode($resArr); remove comments if you get proper output
}
private function get_web_page($url) {
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
CURLOPT_ENCODING => "", // handle compressed
CURLOPT_USERAGENT => "test", // name of client
CURLOPT_AUTOREFERER => true, // set referrer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // time-out on connect
CURLOPT_TIMEOUT => 120, // time-out on response
);
$ch = curl_init($url);
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
curl_close($ch);
return $content;
}