我有一个二进制文件,我想转换为标准的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
结合使用,根本不使用网址格式(如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中添加line-length
参数。有点像:
$mime = file_get_contents("php://filter/read=convert.base64-encode:line-length=76/resource=$binary");
我想问题是当使用stream_filter_append
时,参数必须作为数组传递。
所以有人知道我能做什么吗?
答案 0 :(得分:2)
- 如果甚至可以/允许使用URI样式方法为流过滤器设置参数。
醇>
不幸的是,目前, 1 不可能为这些convert.base64-encode
网址提供除过滤器名称之外的任何内容(在您的情况下为php://filter
)。
我会采用stream_filter_append
方式,用stream_get_contents
代替fread(...)
。
NULL
明确使用filterparams
php_stream_filter_create
参数{{1}}。它不会 2 过多的工作来实现你所建议风格的论证阅读。