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

file_get_contents触发警告:PHP短信发送接口调用异常求助

排查file_get_contents调用短信接口触发警告的问题

我用以下PHP代码调用http://www.smszone.in的短信发送接口时,file_get_contents触发了警告,请求帮忙排查问题。代码如下:

$url="http://www.smszone.in/sendsms.asp?page=".$page."&username=".$usrnm."&password=".$passw."&number=".$mobile."&message="."Hi ".$admi.' '.implode($msg)." Is issued ..."."\n"."Regards"; 
$homepage = file_get_contents($url); 
if($homepage) { 
    echo "Message Send Compleated..."; 
}else{ 
    echo "Something Went Wrong..."; 
}

触发警告:Warning: file_get_contents( http://www.smszone.in/sendsms.asp?page=SendSmsBulk&username= *******&password=****&number=**********&message=Hi Izza AMGR-8A:...

咱们一步步来排查这个问题,先看几个最可能的原因和对应的解决办法:

1. URL参数未编码导致格式错误

你直接把变量拼接进URL,尤其是message参数里包含空格、换行符(\n)这类特殊字符,服务器根本没法正确解析这些内容,这是最常见的问题。

解决办法是用http_build_query()来自动处理所有参数的URL编码,比手动拼接靠谱多了:

// 先把所有参数整理成数组
$params = [
    'page' => $page,
    'username' => $usrnm,
    'password' => $passw,
    'number' => $mobile,
    'message' => "Hi {$admi} " . implode($msg) . " Is issued ...\nRegards"
];
// 自动生成编码后的URL查询字符串
$url = "http://www.smszone.in/sendsms.asp?" . http_build_query($params);
$homepage = file_get_contents($url);

这样不管参数里有什么特殊字符,都会被转换成服务器能识别的格式。

2. PHP环境禁用了远程URL访问

很多PHP主机默认会关闭allow_url_fopen配置,这会直接导致file_get_contents没法访问远程接口。

你可以先创建一个phpinfo.php文件,内容是<?php phpinfo(); ?>,访问后搜索allow_url_fopen,如果显示Off,就需要修改php.ini:

allow_url_fopen = On

修改后记得重启Web服务器(比如Apache或者Nginx)。要是没权限改配置,那就换用cURL来发起请求,兼容性更好:

$params = [
    'page' => $page,
    'username' => $usrnm,
    'password' => $passw,
    'number' => $mobile,
    'message' => "Hi {$admi} " . implode($msg) . " Is issued ...\nRegards"
];
$url = "http://www.smszone.in/sendsms.asp?" . http_build_query($params);

// 初始化cURL会话
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 如果接口是HTTPS且证书有问题,可以加这行忽略验证(可选)
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$homepage = curl_exec($ch);
curl_close($ch);

if($homepage) { 
    echo "Message Send Completed..."; 
}else{ 
    echo "Something Went Wrong..."; 
}

3. URL里的实体编码和参数正确性问题

注意你代码里用了&amp;,这是HTML里的实体编码,在PHP字符串里直接用&就好,虽然浏览器可能会自动转,但直接写&更稳妥。另外还要确认几个点:

  • page参数的值SendSmsBulk是不是接口要求的正确值?
  • 用户名、密码有没有输错?
  • 手机号格式是否符合接口要求(比如要不要带+号或者国家码)?

4. 服务器网络或防火墙限制

如果你的服务器没法访问http://www.smszone.in,也会触发警告。可以在服务器命令行里用curl测试下连通性:

curl "http://www.smszone.in/sendsms.asp?page=SendSmsBulk&username=你的用户名&password=你的密码&number=测试手机号&message=测试内容"

如果命令行也访问失败,那大概率是服务器防火墙限制了出站请求,得联系主机服务商开放80端口的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:02