Я пытаюсь прочитать некоторые двоичные данные из инструмента командной строки с PHP в Windows. Первоначально инструмент был git-шоу, но я также могу воспроизвести проблему с типом (чтобы убедиться, что 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()
доставит вам стенографические данные, двоичный сейф. Избегайте специфических для ОС вещей, например type
вы использовали.
Попробуйте использовать другие методы вместо backticks, например 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();