我正在使用curl从远程页面中检索源代码,然后使用echo $html
在我的页面中回显它,但这会回显整个远程页面。我要做的是预防一些部分
从我的页面中回显(远程页面中的广告和其他一些部分)远程页面代码几乎就是那样
<IFRAME FRAMEBORDER=0 MARGINWIDTH=0 MARGINHEIGHT=0 SCROLLING=NO WIDTH=728 HEIGHT=90 SRC="http://creative.xtendmedia.com/proxy/matomymediaproxy.html?ad_type=ad&ad_size=728x90§ion=2650714"></IFRAME>
<script type="text/javascript" src="http://www.youradexchange.com/script/java.php?option=rotateur&rotateur=83132"></script>
<script language="JavaScript"> var zflag_nid="1723"; var zflag_cid="18"; var zflag_sid="0"; var zflag_width="1"; var zflag_height="1"; var zflag_sz="15"; </script>
<script language="JavaScript" src="http://c1.zxxds.net/jsc/c1/fo.js"></script>
我目前使用preg_match_all('#(<iframe.*myspecificword.*/iframe>)#i', $html, $matches);
var_dump($matches);
但它没有效果,因为每次都有不同的特定词语。
是否还有其他更好的方法,只要我想要显示的代码部分始终是第59行?怎么能只回显这条线?
答案 0 :(得分:0)
你需要类似于Python Beautiful Soup的东西,但是对于PHP,比如this。无论如何,它可能是在引擎盖下使用正则表达式,所以它可能不会比你的解决方案更快。当然,它更清洁。
编辑:我不鼓励这样做,但是如果你知道你的脚本将总是文件的第59行和仅一行,那么逐行读取它,丢弃前58个,就像这样:$stream = fopen('http://php.net/manual/en/function.fopen.php', 'r');
if (!$stream) {
// Report error
}
for ($i = 0; $i < 58; $i++) {
fgets($stream);
}
// Here is line 59
$myline = fgets($stream);
echo $myline;
您可能需要使用以下内容扩展已识别的行终止符列表:
ini_set('auto_detect_line_endings',true);
相反,如果页面是一个字符串,那么使用explode()
在行终止符处断开它,然后选择返回数组的第59个元素。