У меня есть двоичный файл, который я хочу преобразовать в стандартную MIME-совместимую строку base64. Я думал, что мог бы использовать метод php://filter
для фильтрации потока, но я зацикливался на том, как установить параметр "line-length". Существуют и другие методы, которые позволяют достичь аналогичных результатов, но я пытаюсь выяснить, если:
Если даже возможно / разрешено устанавливать параметры для потоковых фильтров, используя метод в стиле URI.
Как это сделать, если это возможно.
Вот кусочки головоломки, которую я до сих пор получил:
Очевидно, я мог бы перестать пытаться быть модным и просто пойти с:
$binary = "path/to/binary.file";
$mime = file_get_contents($binary);
$mime = base64_encode($mime);
$mime = chunk_split($mime);
Или я могу использовать метод php://filter
без параметра line-length
и разделить его потом:
$binary = "path/to/binary.file";
$mime = file_get_contents("php://filter/read=convert.base64-encode/resource=$binary");
$mime = chunk_split($mime);
Или я могу использовать fopen
в сочетании с stream_filter_append
и вообще не использовать стиль URL (как описано в руководстве Conversion Filters ):
$binary = "path/to/binary.file";
$param = array('line-length' => 76, 'line-break-chars' => "\r\n");
$fp = fopen($binary, 'r');
stream_filter_append($fp, 'convert.base64-encode',null, $param);
$mime = fread($fp, filesize($binary));
fclose($fp);
Таким образом, все вышеперечисленное дает тот же результат, но я не ожидал ни одного из них - добавить параметр line-length
в тот же URL-адрес для потока. Что-то вроде:
$mime = file_get_contents("php://filter/read=convert.base64-encode:line-length=76/resource=$binary");
Я предполагаю, что проблема в том, что параметр должен быть передан в виде массива при использовании stream_filter_append
.
Так кто-нибудь знает, можно ли выполнить то, что я хочу?