我遇到上述错误的问题。我确信我在之前的主题中尝试了一些方法,但没有解决。
我正在解决与curl和simple_dom_html相关的算法。我使用了很多递归函数和foreach来重复初始化simple_dom_html。想象一下上述所有步骤在一天或更长时间内运行。但是当你运行它突然停止并且没有显示任何错误消息。我试着检查php_errors_log并发现:
- PHP致命错误:行内(1148,1451,1396,......)的simple_html_dom.php内存不足(分配1,843,920,896)(试图分配24个字节)
我不怀疑我的代码有问题,因为我试图以有限的方式运行,它的成功。示例:我有大约10000页,它运行大约5%!然后,它不再运行。我尝试了很多方法:
- $domHtml->clear(), unset($domHtml), $domHtml = ''
ini_set('memory_limit', - 1); ini_set('max_execution_time', - 1); ini_set('max_input_time', - 1);
以下是我的示例代码:
/**
* Create new Curl
* @return
*/
private function initCurl($url = null)
{
$ch = curl_init();
$this->autoSetOpt($ch, $url);
return $ch;
}
/**
* Auto set Option. This is demo
* @return
*/
private function autoSetOpt($ch, $url = null)
{
curl_setopt($ch, CURLOPT_URL, trim($url));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_ENCODING, "gzip,deflate");
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->timeout);
curl_setopt($ch, CURLOPT_TIMEOUT , 20);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
}
/**
* Execute curl function
* @return
*/
private function exec_curl($ch)
{
return curl_exec($ch);
}
/**
* Close Curl
* @return
*/
public function close($ch)
{
curl_close($ch);
}
public function scanTrackInList($arrTracks = array(), $arrLink = array(), $type = 'song')
{
if (empty($arrLink[0])) {
$link = $arrLink[1];
} else {
$link = $arrLink[0];
}
$ch = $this->initCurl($link);
$domHtml = str_get_html($this->exec_curl($ch));
$this->close($ch);
unset($ch);
if ($domHtml) {
if (count($domHtml->find('html',0)) > 0) {
if ($type == 'song') {
$index = '.list-item h3.txt-primary a';
} else {
$index = '.album-item h3.title-item a';
}
foreach($domHtml->find($index) as $element) {
if ($this->detectZingMp3Url($element->href)) {
$arrOb = $this->getObjectTrack($element->href);
if ($arrOb) {
$arrDetail = array();
if ($arrOb[0]->type == 'mp3') {
$arrDetail = $this->getDetailSong($element->href);
} elseif ($arrOb[0]->type == 'video') {
$arrDetail = $this->getDetailSong($element->href);
}
if (!$arrOb || !$arrDetail) {
return $this->scanTrackInList($link, $arrLink, $count);
}
$arrTracks[] = array_merge($arrOb, $arrDetail);
}
}
}
$domHtml->clear();
unset($domHtml);
array_splice($arrLink,0,1);
} else {
$domHtml->clear();
unset($domHtml);
return $this->scanTrackInList($arrTracks, $arrLink, $type, $count);
}
} else {
return $this->scanTrackInList($link, $arrLink, $count);
}
if (count($arrLink) > 0) {
return $this->scanTrackInList($arrTracks,$arrLink, $type, $count + 1);
}
return $arrTracks;
}
使用:
$ arrTracks:我的结果
$ arrLink:网址集将会运行。
$ type:不关心它。只需输入歌曲或视频。
这只是一小步。我有2-3次。而且运行时不可预测。可能需要几天时间。
请帮帮我!告诉我你是否有任何解决方案。谢谢大家!