PHP中两个变量相加结果恒为0,该如何解决?
解决两个变量相加结果始终为0的问题
嘿,我来帮你搞定这个问题!你的代码里相加结果一直是0,大概率是因为file_get_contents获取到的内容不是有效的数字类型,或者请求直接失败了——PHP在把非数字字符串(比如空内容、HTML错误页、带空格的文本)转换成数值时,会默认得到0,两个0加起来自然还是0。下面是具体的排查和解决步骤:
第一步:先确认获取到的内容到底是什么
先别急着相加,把$s1和$s2的原始内容打印出来,看看是不是你预期的纯数字:
<?php $s1 = file_get_contents('https://www.reyfm.de/get/1/s1.php'); $s2 = file_get_contents('https://www.reyfm.de/get/1/s2.php'); // 先输出原始内容,排查问题 header('Content-Type:text/plain'); echo "s1的内容是: '$s1'\n"; echo "s2的内容是: '$s2'\n"; $sum = $s1 + $s2; echo "相加结果: $sum\n"; ?>
如果输出的s1/s2是空字符串、包含换行/空格,或者是类似<html>...</html>的错误页面,那这就是问题根源了。
第二步:安全处理获取到的内容,确保是有效数字
我们可以封装一个小函数,来处理请求失败、内容非数字的情况,保证参与计算的都是有效数值:
<?php // 封装安全获取数字的函数 function getValidNumber($url) { // 尝试获取远程内容 $content = file_get_contents($url); // 如果请求失败(比如网络问题、URL无效),返回默认值0 if ($content === false) { return 0; } // 去除内容里的空白字符(空格、换行、制表符都算) $cleanContent = trim($content); // 验证是否是有效数字,是则转成数值类型,否则返回0 return is_numeric($cleanContent) ? (float)$cleanContent : 0; } // 用安全函数获取数值 $s1 = getValidNumber('https://www.reyfm.de/get/1/s1.php'); $s2 = getValidNumber('https://www.reyfm.de/get/1/s2.php'); // 现在相加就没问题啦 $sum = $s1 + $s2; header('Content-Type:text/plain'); print($sum); ?>
这个函数帮你处理了三种常见问题:
- 远程请求失败(比如服务器宕机、网络不通)
- 获取到的内容带空白字符(比如接口返回数字但多了个换行)
- 获取到的内容根本不是数字(比如接口返回错误提示)
额外排查:检查PHP的远程访问权限
如果上面的代码还是获取不到内容,可能是你的PHP环境禁用了远程URL访问——看看php.ini里的allow_url_fopen是不是设为Off了。你可以加一段代码检查:
// 先检查allow_url_fopen是否开启 if (!ini_get('allow_url_fopen')) { die("错误:PHP的allow_url_fopen未开启,无法远程获取内容"); }
如果确实是这个问题,你需要修改php.ini把allow_url_fopen = On,或者联系你的主机服务商帮忙开启。
内容的提问来源于stack exchange,提问作者Nitro
相关产品推荐
相关产品推荐

