You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用get_file_html()报错,是否需CURL获取远程网页?

关于simple_html_dom远程网页解析的问题解答

首先,咱们来拆解你遇到的问题:

为什么get_file_html()会报错?

你看到的Uncaught Error: Call to undefined function get_file_html(),核心原因大概率是你的PHP环境禁用了allow_url_fopen选项。get_file_html()是simple_html_dom提供的快捷函数,它底层依赖PHP的file_get_contents()来获取远程内容——当allow_url_fopen被关闭时,这个函数不仅没法正常获取远程页面,甚至会触发“函数未定义”的错误(部分版本的simple_html_dom会在这种环境下不加载该函数)。

另外,你代码里先new simple_html_dom()再赋值get_file_html()的返回值,其实是多余的操作,但这不是报错的直接原因。

解析远程文件必须用CURL吗?

不是必须,但CURL是更可靠的选择。原因有两个:

  • CURL不受allow_url_fopen配置的限制,绝大多数服务器都支持;
  • CURL支持更多请求配置(比如跟随跳转、设置请求头、超时时间等),能应对各种反爬或网络问题,稳定性远高于file_get_contents()。

如果非要用simple_html_dom自带的方法,你可以尝试开启allow_url_fopen(修改php.ini里的对应选项),但这在生产环境中存在安全风险,不推荐。

修正后的代码示例

推荐用CURL获取内容后,再交给simple_html_dom解析,这是最稳妥的写法:

<?php
include "simple_html_dom.php";

// 用CURL获取远程页面内容
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://in.tradingview.com/symbols/NSE-TCS/");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 自动跟随页面跳转
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将内容返回给变量,不直接输出
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"); // 设置浏览器UA,避免被反爬
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 临时跳过SSL验证(生产环境建议配置证书)
$response = curl_exec($ch);
curl_close($ch);

// 初始化simple_html_dom并加载内容
$html = new simple_html_dom();
$html->load($response); // 注意用load()方法加载字符串内容,代替get_file_html()

// 遍历输出所有a标签的链接和文本
foreach($html->find('a') as $element) {
    echo $element->href . " -> " . $element->plaintext . '<br>';
}

// 记得清理资源,避免内存泄漏
$html->clear();
?>

额外提示

  • 如果你想排查allow_url_fopen的状态,可以创建一个phpinfo.php文件,内容为<?php phpinfo(); ?>,访问后查找该选项的状态;
  • 生产环境中,建议关闭CURLOPT_SSL_VERIFYPEER并配置有效的SSL证书,避免安全隐患;
  • 有些网站会限制频繁请求,记得合理设置请求间隔,避免被封禁IP。

内容的提问来源于stack exchange,提问作者Stupid_Intern

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:03:33