PHP 包括留下不可见的字符足迹
PHP include leaving invisible character footprint
我正在使用 PHP 在我的专用服务器上设置游戏服务器,我遇到了 运行 这个问题。我有一个脚本,我 运行 将游戏状态设为 JSON。
为了节省带宽和处理时间,我决定在更新脚本上,我想在更新服务器后直接运行这个相同的脚本,所以我只包含它:
include "{$_SERVER["DOCUMENT_ROOT"]}/game/get/get_session_info.php";
这确实有效,但问题是此 include 语句在该脚本的输出之前插入了一个不可见的字符,使其无法解析为 JSON。
我知道它来自包含,因为对于我在脚本中放入的每个包含,都会插入这些不可见字符之一。
如果我运行那个脚本直接从它的URL,长度是8014;如果我 运行 它来自我的更新脚本,长度是 8015.
如何防止 PHP 插入那个额外的字符,或者 运行 脚本和 return 它的结果不同,这样就不会发生这种情况?
注:
- 更新脚本不回显任何东西
get_session_info.php
中唯一的回显是echo trim(json_encode($game));
这是更新脚本中字符串的开头:
{"state":2,"players":4,"loc1":"15,25,35",
并且在十六进制中:
feff7b227374617465223a322c22706c6179657273223a342c226c6f6331223a2231352c32352c3335222c
来自 get_session_info.php
的相同字符串:
{"state":2,"players":4,"loc1":"15,25,35",
并且在十六进制中:
7b227374617465223a322c22706c6179657273223a342c226c6f6331223a2231352c32352c3335222c
它似乎为每个包含插入 feff
(除了包含我的 mysqli_connect,实际上...)。
生成不可见字符的不是包含,很可能是您要包含的文件。检查该文件中 PHP 范围外的空格。
我正在使用 PHP 在我的专用服务器上设置游戏服务器,我遇到了 运行 这个问题。我有一个脚本,我 运行 将游戏状态设为 JSON。
为了节省带宽和处理时间,我决定在更新脚本上,我想在更新服务器后直接运行这个相同的脚本,所以我只包含它:
include "{$_SERVER["DOCUMENT_ROOT"]}/game/get/get_session_info.php";
这确实有效,但问题是此 include 语句在该脚本的输出之前插入了一个不可见的字符,使其无法解析为 JSON。
我知道它来自包含,因为对于我在脚本中放入的每个包含,都会插入这些不可见字符之一。
如果我运行那个脚本直接从它的URL,长度是8014;如果我 运行 它来自我的更新脚本,长度是 8015.
如何防止 PHP 插入那个额外的字符,或者 运行 脚本和 return 它的结果不同,这样就不会发生这种情况?
注:
- 更新脚本不回显任何东西
get_session_info.php
中唯一的回显是echo trim(json_encode($game));
这是更新脚本中字符串的开头:
{"state":2,"players":4,"loc1":"15,25,35",
并且在十六进制中:
feff7b227374617465223a322c22706c6179657273223a342c226c6f6331223a2231352c32352c3335222c
来自 get_session_info.php
的相同字符串:
{"state":2,"players":4,"loc1":"15,25,35",
并且在十六进制中:
7b227374617465223a322c22706c6179657273223a342c226c6f6331223a2231352c32352c3335222c
它似乎为每个包含插入 feff
(除了包含我的 mysqli_connect,实际上...)。
生成不可见字符的不是包含,很可能是您要包含的文件。检查该文件中 PHP 范围外的空格。