我有這樣的問題:這個腳本會檢查鏈接一定名單的PageRank。當我插入〜150個鏈接它完美,但如果我把鏈接大量它讓我看到以下錯誤:PHP致命錯誤:最大的執行時間超過
這是代碼:
<?php
error_reporting(E_ALL & ~E_NOTICE);
function StrToNum($Str, $Check, $Magic)
{
$Int32Unit = 4294967296; // 2^32
$length = strlen($Str);
for ($i = 0; $i < $length; $i++) {
$Check *= $Magic;
if ($Check >= $Int32Unit) {
$Check = ($Check - $Int32Unit * (int) ($Check/$Int32Unit));
$Check = ($Check < -2147483648) ? ($Check + $Int32Unit) : $Check;
}
$Check += ord($Str{$i});
}
return $Check;
}
function CheckHash($Hashnum)
{
$CheckByte = 0;
$Flag = 0;
$HashStr = sprintf('%u', $Hashnum) ;
$length = strlen($HashStr);
for ($i = $length - 1; $i >= 0; $i --) {
$Re = $HashStr{$i};
if (1 === ($Flag % 2)) {
$Re += $Re;
$Re = (int)($Re/10) + ($Re % 10);
}
$CheckByte += $Re;
$Flag ++;
}
$CheckByte %= 10;
if (0 !== $CheckByte) {
$CheckByte = 10 - $CheckByte;
if (1 === ($Flag % 2)) {
if (1 === ($CheckByte % 2)) {
$CheckByte += 9;
}
$CheckByte >>= 1;
}
}
return '7'.$CheckByte.$HashStr;
}
function HashURL($String)
{
$Check1 = StrToNum($String, 0x1505, 0x21);
$Check2 = StrToNum($String, 0, 0x1003F);
$Check1 >>= 2;
$Check1 = (($Check1 >> 4) & 0x3FFFFC0) | ($Check1 & 0x3F);
$Check1 = (($Check1 >> 4) & 0x3FFC00) | ($Check1 & 0x3FF);
$Check1 = (($Check1 >> 4) & 0x3C000) | ($Check1 & 0x3FFF);
$T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2) | ($Check2 & 0xF0F);
$T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000);
return ($T1 | $T2);
}
function getpagerank($url) {
$query="http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=".CheckHash(HashURL($url)). "&features=Rank&q=info:".$url;
$data=file_get_contents($query);
$pos = strpos($data, "Rank_");
if($pos === false){} else{
$pagerank = substr($data, $pos + 9);
return $pagerank;
}
}
if($_POST['urls'])
{
?><table border="1">
<th>URL</th>
<th>Pagerank</th>
<?
$urls=trim($_POST['urls']);
$url=explode("\n",$urls);
foreach($url as $url)
{
if($url)
{
$url=trim($url);
$pagerank=getpagerank($url);
?>
<tr><td><?php echo $url; ?></td><td><?php echo $pagerank; ?></td></tr>
<?
flush();
}
}
?></table><?
}
else
{
?><form action="" method="post">
URLS:<br /><textarea name="urls" cols="50" rows="10">http://www.google.com
http://www.yahootracer.com</textarea><br /><input type="submit" value="Check PR"/>
</form>
<?
}
?>
你們是不是要優化代碼之後添加
set_time_limit(0)
,或者你只是希望它運行,無論長短?如果是後者,則可以在配置中調整超時。 – RonaldBarzell嘗試在腳本的開頭放置'set_time_limit(0);'並查看是否解決了問題。您還可以編輯你的php.ini有同樣的效果:http://php.net/manual/en/info.configuration.php – user1909426
很多關於PHP最大執行時間上做題。檢查實例以下鏈接http://stackoverflow.com/questions/1420249/maximum-execution-time-of-60-seconds-exceeded-error?rq=1。 – brezanac