所以我一直在我的网站上工作,我想在每次从bash.org加载页面时添加一个随机引用,我 Kinda 让它工作但我在想关于使用“preg_replace”而不是“array_splice”来摆脱页面的页眉和页脚。随着我目前使用它的代码摆脱只是标题,我无法弄清楚如何摆脱页脚。请帮助!
我目前的代码
<html>
<head>
<title>Chris's Website</title>
<link href="lesson_3_css.css" type"text/css" rel="stylesheet"/>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css"> body, a, a:hover {cursor: url(http://q3ait.org/~bogauschc/WorkInProgress/test/proxy/cur116.cur), progress; scrollbar-3dlight-color:#FFFFFF; scrollbar-arrow-color:#FFFFFF; scrollbar-base-color:#FF9900; scrollbar-darkshadow-color:#333333; scrollbar-face-color:#FF9900; scrollbar-highlight-color:#FFFFFF; scrollbar-shadow-color:#000000;}
body {
background-image: url(Speaker%20Fire.png);
}
.title div {
color: #F00;
}
</style>
<script language="JavaScript">
function clock(){
var time = new Date()
var hour = time.getHours()
var minute = time.getMinutes()
var second = time.getSeconds()
var ampm = " PM "
if (hour < 12){
ampm = " AM "
}
if (hour > 12){
hour -= 12
}
if (hour < 10){
hour = " " + hour
}
if (minute < 10){
min = "0" + minute
}
if (second < 10){
second = "0" + second
}
document.clockForm.clockBtn.value = hour + ":" + minute + ":" + second + ampm
setTimeout("clock()", 1000)
}
window.onload=clock;
</script>
</head>
<body>
<div class="title">
<div align="center">
<p> </p>
<td align="left"><form name="clockForm">
<input type="button" name="clockBtn" value=" " />
</form>
<a><img src="http://www.reliablecounter.com/count.php?page=bogauschc.no-ip.org&digit=style/plain/4/&reloads=0" border="2"></a>
</br>
</div>
</div>
<div class="nav">
<p><a href="http://q3ait.org/~bogauschc/html">HTML files</a></p>
<p><a href="http://turntable.fm/mayor_bees_room">My Turntable</a></p>
<p><a href="http://q3ait.org">Q3AIT</a></p>
<p><a href="http://www.chathamcentralschools.com/hs/">Chatham High</a></p>
<p><a href="http://q3ait.org/~bogauschc/WorkInProgress">Work In Progress</a></p>
<p><a href="games.html">Games</a></p>
<p><a href="webcams.html">Webcams</a></p>
</div>
<div class="main" align="center">
</br>
<p>Im Chris and I Can Do Things!</p>
<p> </p>
<?php
if(!$_GET['n']) {
$num = rand(1,400);
$open = fopen("http://bash.org/?".$num, "r");
$line = file("http://bash.org/?".$num);
array_splice($line, 0, 83);
array_splice($line, 89, 200);
foreach ($line as $line_num => $line) {
echo $line;
}
}
?>
<p> </p>
<iframe src="//www.facebook.com/plugins/likebox.php?href=https%3A%2F%2Fwww.facebook.com%2Fpages%2FChriss-Website%2F218161641601802&width=292&height=62&colorscheme=light&show_faces=false&border_color&stream=false&header=true" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:292px; height:62px;allowTransparency="true"></iframe>
<p> </p>
<script language="JavaScript">
VIH_BackColor = "palegreen";
VIH_ForeColor = "navy";
VIH_FontPix = "16";
VIH_DisplayFormat = "You are visiting from:<br>IP Address: %%IP%%<br>Host: %%HOST%%";
VIH_DisplayOnPage = "yes";
</script>
<script language="JavaScript" src="http://www.hashemian.com/js/visitorIP.js.php"></script>
<p><a href="IndexOf.html">Index Of Files For This Page</a></p>
</div>
</body>
</html>
这是一个bash引用http://bash.org/?47的示例 我的网站是http://q3ait.org/~bogauschc/
这就是整个index.php,如果你能帮助摆脱页眉和页脚,那将非常感激!
- 克里斯
答案 0 :(得分:2)
@ceejayoz是对的,它会让你的页面运行速度变慢,就像那样抓住bash.org。如果你真的想要引用,你最好分别抓取他们的页面并缓存一堆结果。
要解析页面,而不是依赖偏移量和行号,最好使用PHP Simple HTML DOM Parser之类的工具从文件中提取相应的内容。它将使处理从页面中提取数据变得更加容易,并且如果他们改变页面布局,也可以更容易地更新脚本。
答案 1 :(得分:2)
首先要做的事情 - 这是一个不好的方法。正如ceejay在评论中指出的那样,飞行中异常糟糕。但是 -
$data = file_get_contents('http://whatever-bash-url-is.php');
preg_match_all ("/<p class=\"qt\">([^`]*?)<\/p>/", $data, $matches);
print_r($matches);
那应该只是给你qt类中的内容,这似乎是你想要的。
执行此操作的正确方法 - 除了要求他们允许使用他们的内容,因为他们似乎不提供API或RSS订阅源 - 将在后端运行此操作并存储您获得的每个独特报价您自己的数据库,并在页面加载而不是远程URL上提供服务。您可以在以合理间隔运行的cron上执行此操作,或者只编写脚本并自行运行。
再次 - 糟糕的主意,因为你不拥有内容。这基本上是盗窃。
**这也在考虑你说你可以改变代码,如果他们改变他们的dom。解析器会更好**
preg_match_all()http://php.net/manual/en/function.preg-match-all.php args:模式,主题,匹配
pattern是你打算用来交叉引用下一个arg的正则表达式: subject是在这种情况下从file_get_contents返回的内容。它也可以是任何字符串。 matches是您将结果分配给的变量。它可以是你想要的任何东西,所以
preg_match_all("\d+", 'long string containing 2 expected digits to match this 1 pattern', $results);
应该产生这样的数组:
$results = [
[0] => 2,
[1] => 1
];
因为字符串中的数字2和1是唯一匹配我提供的\ d +(仅数字)正则表达式模式的东西。
正则表达式可能看起来很恐怖,但不要气馁。基本的谷歌搜索通常可以帮助您找到所需的模式。或者你可以问这里。
顺便说一句,您也可以使用preg_match(),因为您只需要查找一个结果。我只是不知道他们是否有一个包含很多结果的页面,所以我选择了preg_match_all()。
为了避免空结果,你可以在那里抛出一个条件:
foreach($matches AS $m)
{
if($m)
{
//process only if there is something here
}
}
请注意,上面的示例适用于preg_match。我相信Preg_match_all将返回一个多维数组。用户基本的调试工具,如print_r,可根据您的需要进行调整。 此外,我假设您在不是由用户启动的后端脚本上运行此示例时使用此示例。如果你想要一个动态选项,你应该查看ajaxing这个请求,然后创建一个递归函数,如果没有结果,将重新调用bash站点。