2011-05-31 25 views
10

Bir dosyanın içeriğini almak için bir PHP proxy kullanıyorum. PHP'de her türlü soruyu yazmak zorunda kalmadan güçlü jQuery seçeneklerini kullanarak bu dosyada arama yapmak istiyorum. İşte benim PHP kodu:PHP json_encode boyut limiti?

$page = file_get_contents(filter_var($_POST[url], FILTER_SANITIZE_URL)); 
die(json_encode($page)); 

yüklenen sayfa belgenin tamamını okuyacak çok büyük PHP girerse, ancak json_encoding yalnızca dosyanın ilk bölümünü değil, tüm dosyayı verecektir. Json geçirilen verilerde boyut sınırı hakkında bir şey bulamıyorum, ama görünüşe göre bir tane var.

soru: Aktarılan dosyanın yalnızca bir kısmını önlemek için bir geçici çözüm var mı?

Diğer etki alanlarından dosya almam gerekiyor, bu nedenle jQuery'deki bir dosyanın içeriğinin okunması gerçekten bir seçenek değil.

+0

bu

$json = json_encode($data); if ($json) echo $json; else echo json_last_error_msg(); 

PHP dokümanlar gibi json kontrol edebilirsiniz. "Json_encode" ile dönüştürülebilen verilerin boyutu yalnızca kullanılabilir bellekle sınırlıdır. – zerkms

+0

Bize oluşturulan ve tarayıcıya gönderilen JSON'un son işaretlerini verebilir misiniz? – Tadeck

+0

Sadece bir zaman sınırına ulaşmadığınızdan emin misiniz (varsayılan 30 saniye)? Set_time_limit (0) 'ı deneyin. – Halcyon

cevap

7

'da keyfi sınırlar yok gibi görünüyorlar, json_encode ile açıklayamayacakları sorunlara çalışan başkalarına yardımcı olmak için. Json hata msg işlevi hakkında bilmek yardımcı olduğunu buldum.

json_last_error_msg(); 

Benzer bir sorunla karşılaşıyordum ancak dosya boyutuyla ilgili değildi. Veritabanında utf-8'i yanlış biçimlendirdim. Sen soru net değil burada json_last_error_msg

10

PHP 5.3: 7 (akım) ext/json/json.c
PHP ext/json/json.c

JSON seri veri boyutu için yerleşik bir kısıtlama yoktur. Yine de dizeler için değil. Bu yüzden, PHP'nin bellek limitine ya da başka bir şeye girdiğinizi varsayardım. Bir dizgeyi tutarlı bir şekilde yazmak, yalnızca birkaç çıkış ve dış çift tırnak işareti ekler. Dahili olarak bu biraz bellek iki katına çıkar (geçici dize birleştirme ve utf8_to_utf16 dönüştürme/kontrol), böylece zaten 8MB bir dize ile 32MB php bellek sınırına koştu. Fakat bunun dışında, json.c

+2

boyutu 8Mb'den daha küçüktü. Olayları JSON olarak içe aktarmadığım için bunu (yalnızca bir çözüm) çözdüm. Bu, PHP bellek limiti değil, aksi halde JSON – patrick

+0

@ patrick'i dolaşarak problemi çözemedim, bunun nasıl düzeltilebileceğine değinirdi ve (geçici çözüm) burada ziyaret edeceğiniz diğerlerine yardım etmek için. – fidev

+0

Yukarıda belirttiğim gibi: 'kodlama' ile ilgili detaylandırma yapmak için – patrick