【发布时间】:2010-12-23 17:58:31
【问题描述】:
获取 URL 标题的 php 脚本有问题。当我手动运行它时它可以工作,但当我通过 cron 运行它时就不行。
谷歌搜索了一个小脚本来获取 URL 的标题:
function getTitle($url) {
$fh = fopen($url, "r");
$str = fread($fh, 7500);
fclose($fh);
$str2 = strtolower($str);
$start = strpos($str2, "<title>")+7;
$len = strpos($str2, "</title>") - $start;
if ($start == 7)
return $url;
return substr($str, $start, $len);
}
然后我运行下面的代码,在文本中查找 url,并打印带有标题的 url:
$data = mysql_query('SELECT * FROM msgs ORDER BY id DESC LIMIT 100');
while ($rad = mysql_fetch_array($data)) {
preg_match_all($pattern, $rad["text"], $a);
$count = count($a[1]);
for ($row = 0; $row < $count ; $row++) {
echo 'URL:'.$a[1]["$row"].'<BR>';
echo 'TITLE:'.getTitle($a[1]["$row"]).'<BR><BR>';
}
}
以上代码位于 url.php 中。当我通过浏览器手动运行它时,它可以正常工作并打印带有正确标题的 url。但是,当我作为计划的 cron 作业运行时(每分钟一次),它会写入 url 和 url,即 getTitle 似乎总是将“$start == 7”解释为 true。
这可能与时间有关吗? fopen 和 fread 需要很多时间吗?如果是这样,我该如何解决这个问题。
我见过一个典型的 cron 问题是 env。变量,但我不明白这会如何影响这一点?
欢迎任何帮助或想法!
【问题讨论】:
-
对了,为什么不用“DOM”解析器呢?
-
能否将您的 crontab 中的行包含在内?