2010-07-25 6 views
3

Ceci est le synopsis: le code PHP est un interpréteur de commandes donné à la manière d'un terminal, donc sous forme de chaîne. Fondamentalement, PHP reçoit un argument de chaîne, l'interprète en fonction d'une expression régulière donnée, puis l'exécute. Ici, le code reçoit une chaîne similaire àConversion binaire en chaîne puis retour au binaire

ftp>fput -file(contents-of-file) 

Dans ce cas, le code ftp fput une chaîne à un serveur donné. Fonctionne bien lorsque le fichier est ASCII. Maintenant, si le fichier est binaire (c'est-à-dire une image), la regex va boguer et même si je ne veux pas encoder le contenu binaire du fichier afin qu'il puisse entrer dans la chaîne de commande. Je dois ensuite pouvoir le décoder du côté de l'interprète. J'ai essayé base64 encoder/décoder, hex2bin bin2hex, pack décompresser, mais le fichier ftp finit toujours par ne pas être lisible par le navigateur. Le fichier généré, lors de la tentative d'ouverture sur Linux, génère une erreur comme

Fatal error reading PNG image file: PNG file corrupted by ASCII-conversion 

Toutes les suggestions ou demandes de clarification de bienvenue, des

Merci

+0

Vous devez être plus précis. Donnez un exemple d'un fichier que vous voulez envoyer, la commande que vous avez utilisée, et comment elle a fini. – Artefacto

Répondre

4

Cette erreur spécifique se produit grâce à smartness au nom de la Développeurs PNG. Ils ont inclus un retour chariot et un retour à la ligne dans l'en-tête PNG standard, juste pour attraper ce problème. Il semble que le CRLF attendu soit en train d'être traduit en LF.

Pouvez-vous nous montrer les expressions rationnelles que vous utilisez? Cela ne devrait pas se produire à moins que vous convertissiez expressément \r en \n (ou de le jeter) à un moment donné.

+0

Tout de suite, Charles. Les images avec d'autres extensions vont en douceur. Et quand je compare les binaires de l'original png avec celui produit, je peux repérer le \ r \ n au début du fichier. Je ne classifie pas cette question pour le moment parce que je travaille toujours sur l'expression régulière pour me débarrasser du CRLF. – fabjoa