为什么PHP中print_r($_SERVER)不传第二参数时仅返回1?
问题原因说明
这是print_r函数的原生设计导致的,属于完全合理的技术行为:
- PHP官方定义的
print_r函数签名为:print_r(mixed $value, bool $return = false) - 当第二个参数
$return保持默认值false时,函数会直接把变量的格式化内容输出到PHP输出缓冲区,返回值固定为布尔值true - 当
$return设为true时,函数不会直接输出内容,而是将格式化结果作为字符串返回。
你最初的代码直接将print_r($d)、print_r($_SERVER)的返回值拼接为邮件正文,相当于把两个布尔值true拼接成字符串。在PHP的类型转换规则中,布尔值true转换为字符串后就是"1",因此最终邮件内容就是"1\n\n\n1",和你收到的结果完全匹配。
认知纠正
不存在“仅echo场景需要传第二个参数”的规则:只要你需要把print_r的格式化结果作为字符串使用(无论是传入mail作为邮件正文、存入变量、写入日志文件等),都必须将第二个参数设为true,否则你只能拿到代表执行成功的布尔返回值。
你修改后的代码是符合语法要求的,后续触发规则后就能收到包含完整$d和$_SERVER内容的邮件。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

