2010-04-06 9 views
3

J'ai un binaire que je veux convertir en chaîne base64 standard compatible MIME. Je pensais que je pourrais utiliser la méthode php://filter pour filtrer le flux, mais je suis accroché sur la façon de définir le paramètre "longueur de ligne". Il existe d'autres méthodes qui permettraient d'atteindre des résultats similaires, mais je suis en train de déterminer si:Ajout d'un paramètre de filtre au filtre de flux lors de l'utilisation du filtre php: //

  1. S'il est même possible/permis de définir les paramètres des filtres de flux en utilisant la méthode de style URI.

  2. Comment cela est fait, si c'est possible.

Voici les pièces du puzzle que j'ai jusqu'à présent:

De toute évidence, je pourrais arrêter d'essayer d'être de fantaisie et simplement aller avec:

$binary = "path/to/binary.file"; 
$mime = file_get_contents($binary); 
$mime = base64_encode($mime); 
$mime = chunk_split($mime); 

Ou, je peux utiliser la méthode php://filter sans le paramètre line-length et le diviser par la suite:

$binary = "path/to/binary.file"; 
$mime = file_get_contents("php://filter/read=convert.base64-encode/resource=$binary"); 
$mime = chunk_split($mime); 

Ou, je peux utiliser fopen combiné avec stream_filter_append et ne pas utiliser l'URL de style du tout (comme indiqué dans le manuel 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); 

donc de ce qui précède donnent le même résultat, mais aucun d'entre eux sont ce que j'espérais, qui était d'ajouter le paramètre line-length dans la même URL pour le flux. Quelque chose comme peut-être:

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

Je suppose que le problème est que le paramètre doit être passé comme un tableau lorsque stream_filter_append est utilisé.

Est-ce que quelqu'un sait si ce que je veux peut être fait?

Répondre

2
  1. S'il est même possible/a permis de définir les paramètres des filtres de flux en utilisant la méthode de style URI.

Malheureusement, actuellement, il est impossible de fournir quoi que ce soit autre que le nom du filtre (dans votre cas convert.base64-encode) pour les php://filter URL.

J'irais avec votre approche stream_filter_append, en remplaçant stream_get_contents par fread(...).

  1. Voir la current source qui utilise explicitement NULL pour le paramètre filterparams-php_stream_filter_create. Il ne serait pas trop de travail pour implémenter la lecture des arguments du style que vous avez suggéré.
  2. Je ne suis pas un programmeur C.
+0

Wow. Juste ce que j'avais besoin de savoir.Je ne suis pas non plus un programmeur C, mais dans mon cas je n'aurais même pas su quoi chercher ou lire, donc tu es plus proche que moi. Remercier! – Anthony

+0

De rien. :) – salathe