【发布时间】:2013-05-30 15:05:50
【问题描述】:
我有一个小脚本,它应该获取脚本添加到的当前页面的元标题。问题是,它在几个测试页面上都可以正常工作,但在我的 CMS 中却不行。它在那里循环直到死亡,在我完全重新启动 apache 并关闭脚本之前,我无法访问服务器上的任何页面。
有人可以看看吗?这真是太棒了,因为我用了几个小时的谷歌,当然,我找到了 X 个线程和页面,但从来没有解决这种特殊的循环效果。
<?php
function curPageURL() {
$pageURL = 'http';
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
<?php
if (!isset($_GET['ignore']))
{
$url = curPageURL();
$data = implode("", file("$url?ignore=this"));
preg_match ("/<title>([^`]*?)<\/title>/", $data, $match);
$urltitle = $match[1];
}
?>
<?echo $urltitle;?>
【问题讨论】:
-
“循环至死”是什么意思?您将不得不调试正在发生的事情,我们无法猜测......完成了哪些请求=日志说什么?
-
修改你的代码以包含导致你悲伤的循环,听起来你有一个导致无限循环的错误条件。
-
此外,您永远不会检查您对
file()的调用是否成功,恕我直言,使用基于文件的函数通过 HTTP 检索数据总是一个坏主意。使用cURL。我知道与文件操作相比,这很尴尬,但它更能容忍 HTTP 会话期间发生的奇怪废话,并且可以正确报告特定错误,而不仅仅是返回false。 -
你为什么还要向你所在的页面发出请求?页面不应该已经知道自己的标题吗?