什么改变了我的换行符?
What is changing my line breaks?
我正尝试在 Windows 上使用 PHP 从命令行工具读取一些二进制数据。最初该工具是 git show,但我也可以使用 type 重现该问题(以确保没有 Git autocrlf 正在发生)。
我不确定发生了什么,但行尾似乎在某个地方被转换了。观察...
在命令行上:
# dir temp
18.01.2015 03:24 1.362 temp
在PHP中:
$data = `type d:\temp`;
echo strlen($data); // outputs "1302"
echo strlen(str_replace("\n", "\r\n", $data)); // outputs "1362"
echo strlen(file_get_contents('d:\temp')); // outputs "1362"
这是怎么回事?如何获取逐字数据?
file_get_contents()
将为您提供二进制安全的逐字数据。避免使用 OS-特定的东西,例如您使用的 type
。
尝试使用其他方法代替反引号,例如 passthru
:
ob_start();
passthru("git command blah blah");
$var = ob_get_clean();
echo strlen($var);
我找到的解决方法是:
ob_start();
passthru('type d:\temp');
$data = ob_get_clean();
我正尝试在 Windows 上使用 PHP 从命令行工具读取一些二进制数据。最初该工具是 git show,但我也可以使用 type 重现该问题(以确保没有 Git autocrlf 正在发生)。
我不确定发生了什么,但行尾似乎在某个地方被转换了。观察...
在命令行上:
# dir temp
18.01.2015 03:24 1.362 temp
在PHP中:
$data = `type d:\temp`;
echo strlen($data); // outputs "1302"
echo strlen(str_replace("\n", "\r\n", $data)); // outputs "1362"
echo strlen(file_get_contents('d:\temp')); // outputs "1362"
这是怎么回事?如何获取逐字数据?
file_get_contents()
将为您提供二进制安全的逐字数据。避免使用 OS-特定的东西,例如您使用的 type
。
尝试使用其他方法代替反引号,例如 passthru
:
ob_start();
passthru("git command blah blah");
$var = ob_get_clean();
echo strlen($var);
我找到的解决方法是:
ob_start();
passthru('type d:\temp');
$data = ob_get_clean();