PHP base64 kodlama / kod çözme için yanıp

4 Cevap php

Ben base64 kodlamak için bir JPG AS3 kullanarak ve Javascript geçmek ediyorum. PHP bu base64 kodlanmış dize geçmek ve PHP kodunu çözmek için AJAX kullanmak çalışılıyor. (Ben Flash'a geri gönderebilir ve Flash onu çözmek ve PHP gönderebilir biliyorum, ama çözme ucunda Flash için ihtiyacını ortadan kaldırmak için çalışıyorum).

PHP bir base64 olarak kodlanmış bir nesne olarak değerlendirir gibi AS3 en encodeToBase64String() fonksiyonu ve ve PHP'nin base64_decode() fonksiyonu, aynı algoritma kullanır yok gibi görünüyor, ama doğru çıktı o görünmüyor.

Bu sorunu düzeltmek için bir yolu var mı?

Note: Please no posts about not needing Javascript. Javascript is a necessary step for reasons not detailed here.

4 Cevap

Sorun neden olabilir ne emin değil. Ben AS3 gelen bir çok kez php ve sorunlar çalıştırmak değil base64 kodlu verileri ilettik.

Ben genellikle olsa, Hurlant's Base64 :: encodeByteArray () AS3 tarafında kullanabilirsiniz.

Edit

Böyle bir şey bu sorunu hata ayıklama yardımcı olabilir:

        var buffer:ByteArray = new ByteArray();
        for(var i:int = 0; i < 256; i++) {
            buffer[i] = i;
        }

        var str:String = Base64.encodeByteArray(buffer); // this is com.hurlant.util.Base64
        // post your data to your php (directly or through JS)

Php test kodu:

$str = $_REQUEST['str'];

$decoded = base64_decode($str);
file_put_contents("test.txt",$decoded);

AS tarafında, mümkün olan her bayt değerini kodlar bir dize gönderiyor. Php bunu çözecektir ve bir dosyaya yazmak. Eğer bir hex editör ile oluşturulan dosyayı açarsanız Şimdi, 0-255 tüm numaraları görmek gerekir (veya 0x00 ... 0xff). Bu durumda değilse, bu sorunlara neden ne hakkında bazı ipuçları verebilir.

PS: Ben sadece giderme basitleştirmek için doğrudan PHP AS göndermek istiyorum. Belki JS (base64 güvenli olmalıdır beri olası değil) bir şekilde veri ile karıştırıyor; ama sadece sorunun olası kaynağı atmak.

Muhtemelen farklı bit haritası - bir kaç seçenek var. En iyi seçenek, kendinize bazı ekstra işi kaydetmek, flaş ve php için karşılıklı benzer bir kodlama yöntemi bulmak olacaktır. Bu başarısız, diğer dilde flash / php 'nin ya base 64 kodlaması çoğaltmak gerekir.

Eğer javascript kullanarak konum beri, ayrıca phpjs içine bakmalı ve onların base64_encode yöntemini kullanamazsınız eğer görmek ve daha sonra ajax dize geçmek.

Base64 kodlama MIME RFC (http://www.faqs.org/rfcs/rfc2045.html) bir parçasıdır, bu yüzden php ve flash versiyonu farklı davranması gerekir.

Php fonksiyonları ile sorunlarınız olduğunda her zaman PHP sorularınızı (http://ch2.php.net/base64_decode) içinde bazı yorumlar okumalısınız. Ben iki kişi sadece üst yorumları okuyarak benzer sorunlar için sorun (ve çözümleri) sahip bulundu.

Deşifre edilecek dize büyük olduğunda base64_decode hakkında () konulardır ilk yorum (http://ch2.php.net/manual/en/function.base64-decode.php # 92980), (> 5k) ile başlayın . Önerilen çözüm böyle bir şey kullanmak için:

<?php
$decoded = "";
for ($i=0; $i < ceil(strlen($encoded)/256); $i++)
   $decoded = $decoded . base64_decode(substr($encoded,$i*256,256));
?> 

Ben daha iyi bir alternatif farkında değilim, üzgünüm.

I passed base64 encoded string from php to flash and back many times using this class on flash side com.dynamicflash.util.Base64 (You may download SWC and link it to to your project)

on php side: standart library functions base64_encode and base64_decode

Hatasız Tüm veriler süreci