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

WordPress functions.php中file_get_contents()获取远程数据失效

WordPress子主题中file_get_contents()拉取外部HTTPS资源失效排查方案

常见故障原因

按出现概率从高到低排序:

  • 服务器PHP配置关闭了allow_url_fopen选项。绝大多数商用主机默认会关闭该配置降低安全风险,仅开启状态下file_get_contents()才能发起外部网络请求。可通过phpinfo()函数查看该配置项的实际值,为Off时该函数无法请求外部地址。
  • 服务器缺少HTTPS请求所需的CA证书包,或证书包过期。你请求的三个地址均为HTTPS协议,PHP发起SSL连接时会校验目标站点证书有效性,本地无合法CA证书时请求会直接拦截返回false。
  • 站点安全插件、服务器WAF、目标站点反爬策略拦截请求。file_get_contents()默认发起的请求UA为PHP版本标识,很容易被防火墙或反爬规则标记拦截。
  • 代码未做异常捕获,请求失败时file_get_contents()返回false,直接传入json_decode()会得到null值,后续foreach循环会触发报错,而WordPress默认开启错误静默,导致看不到具体报错信息只看到功能失效。

最优修复方案

WordPress内核已经封装了兼容性极强的HTTP请求类WP_Http,不要在WordPress环境下直接使用原生file_get_contents()或手写cURL请求,内核方法会自动兼容不同主机环境、处理SSL校验、跳转、超时等逻辑,直接替换原有拉取逻辑即可:

<?php
// 拉取保险公司列表
$bizt_a = [];
$bizt_resp = wp_remote_get("https://karteritesed.hu/biztositok.json", [
    'timeout' => 10,
    'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
]);
if (!is_wp_error($bizt_resp) && wp_remote_retrieve_response_code($bizt_resp) === 200) {
    $bizt_raw = wp_remote_retrieve_body($bizt_resp);
    $bizt_a = json_decode($bizt_raw, true) ?: [];
}
$bizt_lista = "";
foreach ($bizt_a as $bizt) {
    $bizt_lista .= "<option value=\"" . esc_attr($bizt) . "\">" . esc_html($bizt) . "</option>";
}

// 拉取来源渠道列表
$hhr_a = [];
$hhr_resp = wp_remote_get("https://karteritesed.hu/hol_hallott_rolunk.json", [
    'timeout' => 10,
    'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
]);
if (!is_wp_error($hhr_resp) && wp_remote_retrieve_response_code($hhr_resp) === 200) {
    $hhr_raw = wp_remote_retrieve_body($hhr_resp);
    $hhr_a = json_decode($hhr_raw, true) ?: [];
}
$hhr_lista = "";
foreach ($hhr_a as $hhr) {
    $hhr_lista .= "<option value=\"" . esc_attr($hhr) . "\">" . esc_html($hhr) . "</option>";
}

// 拉取维修地点列表
$jh_a = [];
$jh_resp = wp_remote_get("https://karteritesed.hu/javitas_helye.json", [
    'timeout' => 10,
    'user-agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
]);
if (!is_wp_error($jh_resp) && wp_remote_retrieve_response_code($jh_resp) === 200) {
    $jh_raw = wp_remote_retrieve_body($jh_resp);
    $jh_a = json_decode($jh_raw, true) ?: [];
}
$jh_lista = "";
foreach ($jh_a as $jh) {
    $jh_lista .= "<option value=\"" . esc_attr($jh) . "\">" . esc_html($jh) . "</option>";
}

if ($_POST) {
    $api_user = "";
    $api_key = "";
    $public_key = "";
    $user = "insurance";

    $array = array(
        "user" => $user,
        "public_key" => $public_key,
        "sikeres_url" => '',
        "sikertelen_url" => '',
        "v_nev" => isset($_POST['v_nev']) ? sanitize_text_field($_POST['v_nev']) : '',
        "u_nev" => isset($_POST['u_nev']) ? sanitize_text_field($_POST['u_nev']) : '',
        "email" => isset($_POST['email']) ? sanitize_email($_POST['email']) : '',
        "elso_uzembehelyezes" => isset($_POST['elso_uzembehelyezes']) ? sanitize_text_field($_POST['elso_uzembehelyezes']) : '',
        "karesemeny_idopont" => isset($_POST['karesemeny_idopont']) ? sanitize_text_field($_POST['karesemeny_idopont']) : '',
        "forgalmi_ertek" => isset($_POST['forgalmi_ertek']) ? floatval($_POST['forgalmi_ertek']) : 0,
        "munkadij" => isset($_POST['munkadij']) ? floatval($_POST['munkadij']) : 0,
        "anyagkoltseg" => isset($_POST['anyagkoltseg']) ? floatval($_POST['anyagkoltseg']) : 0,
        "rendszam" => isset($_POST['rendszam']) ? sanitize_text_field($_POST['rendszam']) : '',
        "alvazszam" => isset($_POST['alvazszam']) ? sanitize_text_field($_POST['alvazszam']) : '',
        "futott_km" => isset($_POST['futott_km']) ? intval($_POST['futott_km']) : 0,
        "biztosito" => isset($_POST['biztosito']) ? sanitize_text_field($_POST['biztosito']) : '',
        "hol_hallott_rolunk" => isset($_POST['hol_hallott_rolunk']) ? sanitize_text_field($_POST['hol_hallott_rolunk']) : '',
        "javitas_helye" => isset($_POST['javitas_helye']) ? sanitize_text_field($_POST['javitas_helye']) : '',
    );
    // 后续业务逻辑自行补充
}

优化建议

  • 三个JSON文件内容更新频率极低的话,直接把文件下载到子主题本地目录读取,不要每次页面加载都发起外部请求,既可以提升页面加载速度,也能避免外部站点故障、网络波动导致功能失效。
  • 开发阶段可开启WordPress调试模式,直接查看具体报错信息,不要用@符号压制错误,会提高排查成本。
  • 输出HTML选项时必须用esc_attr()、esc_html()做转义,符合WordPress开发安全规范,避免XSS漏洞。
  • 非必要不要强行修改php.ini开启allow_url_fopen,会提升站点被攻击的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:54:33