我试图在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"
发生了什么事?我怎样才能获得逐字数据?
答案 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();