代码之家  ›  专栏  ›  技术社区  ›  Anthony

使用php://filter时向流过滤器添加过滤器参数

  •  3
  • Anthony  · 技术社区  · 15 年前

    我有一个二进制文件,我想转换成标准的符合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://过滤器 没有的方法 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);
    

    所以上面所有的结果都是一样的,但没有一个是我所希望的,那就是增加 线条长度 流的同一URL中的参数。可能是这样的:

    $mime = file_get_contents("php://filter/read=convert.base64-encode:line-length=76/resource=$binary");
    

    我想问题是当 流过滤器附加 使用。

    那么有人知道我想要的能不能实现吗?

    1 回复  |  直到 15 年前
        1
  •  2
  •   salathe    15 年前
    1. 如果甚至可以/允许使用uri样式方法为流过滤器设置参数。

    不幸的是,目前这是不可能的 提供除过滤器名称以外的任何内容(在您的情况下 convert.base64-encode )对于那些 php://filter 网址。

    我会和你一起去 stream_filter_append 接近,替换 stream_get_contents 对于 fread(...) .

    1. 查看 current source 它明确地使用 NULL 对于 filterparams 参数 php_stream_filter_create . 不会的。 做太多的工作来实现对您建议的样式的参数的读取。
    2. 我不是C程序员。