我是PHP的新手,並與我知道我在PHP中建立一個腳本,但一段時間後它崩潰。我在5-6個不同的Linux操作系統,debian,ubuntu,redhat,fedora等上測試過它。只有在Fedora上不會崩潰,但在工作3-4小時後,他會停下來,不要給我任何錯誤。這個過程仍然是開放的,他不會崩潰,只是停止工作,但這隻對Fedora。PHP我的履帶崩潰後一段時間分段錯誤錯誤
這裏是我的腳本代碼:
<?
ini_set('max_execution_time', 0);
include_once('simple_html_dom.php');
$file = fopen("t.txt", "r");
while(!feof($file)) {
$line = fgets($file);
$line = trim($line);
$line = crawler($line);
}
fclose($file);
function crawler($line) {
$site = $line;
// Check target.
$agent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; pt-pt) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27";
$ch=curl_init();
curl_setopt ($ch, CURLOPT_URL,$line);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch,CURLOPT_VERBOSE,false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if($httpcode>=200 && $httpcode<=300) {
$check2 = $html = @file_get_html($site);
if($check2 === false) {
return $line;
} else {
foreach($html->find('a') as $element) {
$checkurl = parse_url($element->href);
$checkline = parse_url($line);
if(isset($checkurl['scheme'], $checkurl['host'])) {
if($checkurl['host'] !== $checkline['host']) {
$split = str_split($checkurl['host']);
$replacethis = ".";
$replacewith = "dot";
for($i=0;$i<count($split);$i++) {
if($split[$i] == $replacethis) {
$split[$i] = $replacewith;
}
}
chdir('C:\xampp\htdocs\_test\db');
foreach($split as $element2) {
if(!chdir($element2)) { mkdir($element2); chdir($element2); };
}
$save = fopen('results.txt', 'a'); $txt = "$line,$element->innertext\n"; fwrite($save,$txt); fclose($save);
}
}
}
}
}
}
?>
所以我的劇本從爬在我指定t.txt的目標,但只傳出反向所有的反向鏈接......然後他就擴展目錄和保存信息。
這裏是我得到的錯誤:
Allowed memory size of 16777216 bytes exhausted (tried to allocate 24 bytes)
Segmentation fault (core dumped)
這冥冥中似乎是一個錯誤..什麼是錯的......任何IDEEA?謝謝。
好...謝謝...就像我說我是新手,我不知道如何優化代碼...顯然是地方..有些事情是錯誤的...我會審查你說的每一步:)再次感謝。 – 2014-08-29 23:17:42