Добавление параметра фильтра в потоковый фильтр при использовании фильтра php: // - PullRequest
3 голосов
/ 06 апреля 2010

У меня есть двоичный файл, который я хочу преобразовать в стандартную MIME-совместимую строку base64. Я думал, что мог бы использовать метод php://filter для фильтрации потока, но я зацикливался на том, как установить параметр "line-length". Существуют и другие методы, которые позволяют достичь аналогичных результатов, но я пытаюсь выяснить, если:

  1. Если даже возможно / разрешено устанавливать параметры для потоковых фильтров, используя метод в стиле URI.

  2. Как это сделать, если это возможно.

Вот кусочки головоломки, которую я до сих пор получил:

Очевидно, я мог бы перестать пытаться быть модным и просто пойти с:

$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.

Так кто-нибудь знает, можно ли выполнить то, что я хочу?

1 Ответ

2 голосов
/ 06 апреля 2010
  1. Если даже возможно / разрешено устанавливать параметры для потоковых фильтров, используя метод в стиле URI.

К сожалению, в настоящее время 1 невозможно предоставить что-либо кроме имени фильтра (в вашем случае convert.base64-encode) для этих php://filter URL.

Я бы пошел с вашим stream_filter_append подходом, заменив stream_get_contents на fread(...).

  1. См. источник тока , который явно использует NULL для параметра filterparams для php_stream_filter_create. 2 не будет слишком большой работой, чтобы реализовать чтение аргументов в стиле, который вы предложили.
  2. Я не программист на Си.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...