什么改变我的换行符?

时间:2015-01-18 02:39:30

标签: php windows shell line-endings

我试图在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"

发生了什么事?我怎样才能获得逐字数据?

2 个答案:

答案 0 :(得分:2)

file_get_contents()将为您提供逐字数据,二进制安全。避免使用特定于操作系统的内容,例如您使用的type

尝试使用其他方法而不是反引号,例如passthru

ob_start();
passthru("git command blah blah");
$var = ob_get_clean();
echo strlen($var);

答案 1 :(得分:0)

我找到的解决方法是:

ob_start();
passthru('type d:\\temp');
$data = ob_get_clean();