什么改变了我的换行符?

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();