当前位置: 当前位置:首页 > 时尚 > php如何当前页面显示其他网页正文

php如何当前页面显示其他网页

作者:休闲 来源:热点 浏览: 【大 中 小】 发布时间:2026-10-17 06:19:16 评论数:

PHP里想“当前页面直接显示另一个网页”,当前最粗暴的页面页办法就是 `readfile()`。比如你写个聚合页,显示想把新浪首页塞进来,其网一行 `readfile('https://www.sina.com.cn')` 就完事。当前但这玩意儿有个坑——对方服务器返回的页面页HTTP头(比如`Content-Type`)会原样透传,如果对方页面是显示`gb2312`编码而你自己的页面是`UTF-8`,那满屏乱码能让你怀疑人生。其网

更常见的当前做法是 `file_get_contents()` 配合 `echo` 输出。我去年做个内部工具,页面页需要把公司老系统的显示报表直接嵌到新框架里,就是其网这么干的。但注意,当前`file_get_contents` 默认走PHP的页面页HTTP包装器,遇到对方返回`404`或者连接超时,显示它会直接抛警告,整个页面白屏。你得先 `@` 抑制错误,再判断返回值是不是`false`,不然用户看到的就是半截页面加一行红字警告。

还有个进阶玩法是cURL。为什么用cURL?因为你能控制超时时间、设置User-Agent、带Cookie。比如你要抓一个需要登录的页面,cURL可以帮你先POST用户名密码拿Session,再GET目标页面。但cURL返回的是完整HTML字符串,你得自己处理相对链接——页面里的`src="/img/a.png"`如果直接输出,浏览器会去请求你当前域名下的`/img/a.png`,结果全是404。这时候得用正则或者DOMDocument把链接替换成绝对地址,麻烦是麻烦,但能救命。

以上都是“服务端拉取”。但如果你要显示的是别人网站,而且对方禁止了跨域或者有反爬机制,服务端拉取经常拿到一堆验证码页。这时候换个思路——用iframe。HTML的iframe天生就是干这个的,`` 扔到你的PHP页面里,浏览器会直接去请求那个地址,完全绕过PHP的限制。但iframe有个烦人的问题:对方网站如果设置了`X-Frame-Options: DENY`,你页面里就只显示一个空白框。比如Google搜索页就禁止被iframe嵌入,你硬嵌上去,Chrome控制台会告诉你“拒绝连接”。

实际干活的时候,我见过不少新手混用这两种方式。去年帮朋友改个导航站,他先用`file_get_contents`抓了百度首页,然后用正则把``里的内容抠出来,再拼到自己页面里。结果百度那边改了个CSS类名,他的正则直接匹配失败,整个导航站首页变空白。后来我给他改成iframe,反而简单了——不管百度怎么改版,iframe显示的都是最新内容。

但如果你要显示的是自己服务器上的另一个PHP文件,那根本不用HTTP请求。直接`include`或者`require`就行,这样还能共享变量和Session。比如你有个`header.php`,想在每个页面顶部显示它,`include 'header.php';` 就完事,效率比cURL高十倍不止。不过注意,include的文件里如果有`exit`或者`die`,会直接终止当前脚本,别问我怎么知道的。

最后说个偏门但实用的:如果你只是想显示某个网页的局部内容,别整页拉下来。用`DOMDocument`加载HTML,`getElementById`找到那个`

`,再`saveHTML`输出。我做过一个天气插件,就是抓中国天气网的城市页面,只提取`
`里的温度数字,页面加载速度从2秒降到0.3秒。这招对付那些结构稳定的老网站特别好使,但对方一改版就崩,所以代码里得加个`try-catch`,崩了就显示缓存。

一句话总结:静态内容用`file_get_contents`,需要登录或超时控制用cURL,对方是别人家的站用iframe,自己人之间的页面用include。别迷信单一方案,我见过太多人死磕cURL去抓一个iframe就能搞定的页面,纯粹是给自己找罪受。