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

PHP动态构造DNS类型变量传入dns_get_record报错,求解决方法

动态获取DNS类型参数导致dns_get_record报错的解决办法

问题出在参数类型不匹配:PHP里的DNS_A这类是预定义常量,对应一个整数值(比如DNS_A的值为1),而你通过拼接得到的$type是字符串"DNS_A",dns_get_record函数需要的是常量对应的整数值,而非字符串形式的常量名,因此直接传变量会报错。

解决方法

方法一:用constant()函数转换字符串为常量值

将拼接后的常量名字符串转为对应的值,同时建议先验证常量是否存在,避免非法参数引发错误:

$typeStr = strtoupper($_GET['type']);
$constantName = "DNS_" . $typeStr;

// 验证常量是否合法,防止恶意输入
if (!defined($constantName)) {
    die("无效的DNS记录类型");
}

$type = constant($constantName);
$array = dns_get_record($domain, $type);

方法二:维护允许的类型映射数组(更安全)

直接定义支持的DNS类型与对应常量的映射表,避免用户传入恶意参数触发未知常量:

// 按需添加你需要支持的DNS类型
$allowedDnsTypes = [
    'A' => DNS_A,
    'AAAA' => DNS_AAAA,
    'MX' => DNS_MX,
    'NS' => DNS_NS,
    'CNAME' => DNS_CNAME
];

$typeStr = strtoupper($_GET['type']);
if (!isset($allowedDnsTypes[$typeStr])) {
    die("无效的DNS记录类型");
}

$type = $allowedDnsTypes[$typeStr];
$array = dns_get_record($domain, $type);

直接传DNS_A能正常运行,是因为PHP会自动将这个常量解析为对应的整数值,而字符串形式的常量名无法被函数识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:30:40