2010-04-06 219 views
3

我有一个二进制文件,我想要转换为符合标准MIME的base64字符串。我以为我可以使用php://filter方法来过滤流,但我越来越挂断如何设置“行长”参数。有迹象表明,将达到类似的效果等方法,但我试图找出是否:在使用php时添加过滤器参数到流过滤器://过滤器

  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); 

或者,我可以使用fopenstream_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中添加line-length参数。可能的东西喜欢:

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

我想象中的问题是,参数有当使用stream_filter_append传递作为数组。

所以有人知道我是否想要做什么?

回答

2
  1. 如果甚至可以/允许使用URI风格的方法为流过滤器设置参数。

不幸的是,目前,它是不可能提供比过滤器名称之外的任何(你的情况convert.base64-encode)对于那些php://filter网址。

我会用你的stream_filter_append方法去代替stream_get_contents代替fread(...)

  1. 见其中明确使用NULLfilterparams参数php_stream_filter_createcurrent source。它不会太多的工作来实现你所建议的风格的参数的阅读。
  2. 我不是C程序员。
+0

哇。正是我需要知道的。我也不是C程序员,但在我的情况下,我甚至不知道要查找什么或阅读它,所以你比我更接近。谢谢! – Anthony 2010-04-06 11:35:39

+0

不客气。 :) – salathe 2010-04-06 13:06:44