İnsan tarafından okunabilen bir formatta çok seviyeli bir dizinin çıktısı (bir günlüğe) nasıl alınır?


94

Bir drupal sitesi üzerinde çalışıyorum ve hata ayıklama sırasında, her zaman uzun, iç içe dizileri okumak zorunda kalıyorum. Sonuç olarak, hayatımın büyük bir kısmını ok, dönüş ve sekme tuşlarını kullanarak 1000'den fazla karakter dizisini iç içe, okunabilir bir biçime bölmek için harcadım.

Drupal geliştiriciler için, çok adımlı # ahah / # ajax formlarıyla çalıştığım için devel'in dsm () işlevini kullanamıyorum ve dizileri ekrana değil, yalnızca hata günlüğüne çıkarabiliyorum.

Görsel örnek:

Kötü:

array ('form_wrapper' => array ('#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' = > '', 'ad' => array ('#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' = > false, '#description' => NULL, '#attributes' => array ('placeholder' => 'Email',), '#post' => array ('form_wrapper' => array ('name' => '', 'geç' => '',),
...

İyi:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

Düzenleme : Üzgünüm, "ekrana çıktı verilmez" ile drupal'ın sistem mesajlarını kastetmiştim, burada dizileri tıklanabilir, iç içe bir biçimde (devel.module kullanarak) çıktılamak mümkün.


1
<? php echo '<pre>' .print_r ($ dizi, 1). '</pre>'; ?>
Rufinus

Yanıtlar:


210

Apache hata günlüğüne bir hata kaydetmeniz gerekiyorsa, şunu deneyebilirsiniz:

error_log( print_r($multidimensionalarray, TRUE) );

3
Görünüşe göre print_r(küçük harf). print_RGerçekten de çalışıyor mu ?
evanrmurphy

teşekkürler @AkhilrajNS bana eklenen sorguyu veya bu günlük mesajının üzerinde yürütülen herhangi bir sorguyu nasıl gönderebilirim hakkında daha fazla bilgi verir misiniz?
ankit suthar

@ankitsuthar SQL Sorgusunu mu demek istediniz?
Akhilraj NS

Evet Ama CI'daki son sorgu işlevinden aldım. Aslında, eklenen veya düzenlenen, silinen bir veriyi kaydetmek istiyorum.
ankit suthar

Bu dum. Bu, yeni satır karakterlerini \ngerçek yeni satırlar yerine değişmez olarak verir .
Otheus

22

http://php.net/manual/en/function.print-r.php Bu işlev çıktıyı formatlamak için kullanılabilir,

$output = print_r($array,1);

$outputbir dize değişkenidir, diğer tüm dizeler gibi günlüğe kaydedilebilir. Saf php'de kullanabilirsiniztrigger_error

Örn. trigger_error($output);

http://php.net/manual/en/function.trigger-error.php

html olarak da biçimlendirmeniz gerekiyorsa, <pre>etiketi kullanabilirsiniz


1
Soruyu okuyun - OP'nin bunu günlük çıktısı için yapması gerekir - ekran çıktısı değil.
Matt

@Matt cevabı okudu,if you need to format it also in html
code-jaff

@Fivell, deniyorum. Çıktının günlük dosyasına gönderilebileceğini açıklamak için cevabınızı netleştirirseniz, -1'imi kaldırırım.
Matt

1
@Fivell, trigger_errormesajları maksimum 1024 uzunluğa veya benzer bir şeye sınırlayan küçük bir sorun var . Biraz daha uzun yapmak var_exports/ print_rdizeler kesilir. Basit yapılar için kullanışlıdır.
Mihai Stancu

7

Basit şeyler:

Kullanılması print_r, var_dumpya var_exportoldukça güzel değil HTML modunda veya bir şeyi sarmak eğer @Joel Larson söylediği gibi görünüm kaynaklı modunda sonucu bakarsak yapmalı <pre>etiketi.

print_r okunabilirlik açısından en iyisidir, ancak boş / yanlış değerler yazdırmaz.

var_dump değer türlerini ve uzunlukları ve boş / yanlış değerleri kontrol etmek için en iyisidir.

var_exportbenzerdir, var_dumpancak dampingli dizgiyi elde etmek için kullanılabilir.

Bunlardan herhangi biri tarafından döndürülen biçim, kaynak kodda doğru şekilde girintilidir var_exportve dökümü yapılan dizeyi döndürmek için kullanılabildiğinden günlük kaydı için kullanılabilir.

Gelişmiş şeyler:

PHP için xdebug eklentisini kullanın, bu var_dump, ham döküm formatı olarak değil HTML formatlı dizeler olarak yazdırır ve ayrıca formatlama için kullanmak istediğiniz özel bir işlevi sağlamanıza izin verir.


2
Cevabı oku, var_exportbir dize döndürmenizi sağlar.
Mihai Stancu

2

Drupal Devel modülü günlük dosyaları biçimlendirilmiş diziler ve nesneleri yazdırabilirsiniz olanlar dahil diğer yararlı özelliği var. En kılavuzuna bakın http://ratatosk.net/drupal/tutorials/debugging-drupal.html

gg ()

Herhangi bir değişkeni sitenin temp dizinindeki "drupal_debug.txt" adlı bir dosyaya kaydeder. Bu işlevin tüm çıktıları günlük dosyasına eklenir ve kodunuzu değiştirirken bir değişkenin içeriğinin nasıl değiştiğini görmenizi kolaylaştırır.

Mac OS X kullanıyorsanız, günlük dosyasının içeriğini izlemek için Günlük Konsolunu kullanabilirsiniz.

Bir Linux çeşidi kullanıyorsanız, dosyaya kaydedilen verileri izlemek için "tail -f drupal_debug.txt" komutunu kullanabilirsiniz.


1

Bu sana yardım edecek

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

DÜZENLE

kullanmak echo '<pre>';işe yaramaz, ancak var_export($var);beklediğiniz şeyi yapacaktır.


1
@Matt Bu parametre TRUE olarak ayarlandığında, print_r () bilgiyi yazdırmak yerine döndürür.
code-jaff

0

Bir ön etiket içinde var_dump () kullanabilmelisiniz. Aksi takdirde, dump_r.php gibi bir kitaplık kullanmayı deneyebilirsiniz: https://github.com/leeoniya/dump_r.php

Benim çözümüm yanlış. OP, bir günlük dosyasında saklamak için boşluklarla biçimlendirilmiş bir çözüm arıyordu.

Bir çözüm var_dump ile çıktı arabelleğini kullanmak, ardından günlük dosyasında biçimlendirmek için boşluk içeren tüm sekmeleri str_replace () kullanmak olabilir.


Soruyu okuyun - OP'nin bunu günlük çıktısı için yapması gerekir - ekran çıktısı değil.
Matt

Soruyu okudum. Son küçük yorumu kaçırdım. Bilmeme izin verdiğin için teşekkürler. Bu çözüm o zaman işe yaramayacak.
Joel Larson

0

Merak ediyorum neden kimse bir dizide hata ayıklamayı tercih ettiğim yöntemi kullanmıyor veya önermiyor:

error_log(json_encode($array));

Tarayıcımın yanında, tailsunucum konsolda oturum açıyorum, örn.

tail -f /var/log/apache2/error.log
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.