Nasıl bir PHP eval döngü oluşturmak mı?

5 Cevap php

Ben kullanıyorum kodu:

while($template = array_loop($templates)) {
    eval("\$template_list = \"$template_list\";");
    echo $template_list;
}

Bu başarıyla Orada kaç şablonları tespit görünüyor, ama sadece onlar hepsi için aynı adını gösterir:

Adı: LayoutName: LayoutName: LayoutName: LayoutName: LayoutName: LayoutName: Düzen

Her şablonun adını görüntüler böylece bunu nasıl yapabilirim? (Not: echo sadece bir test işlevi olan, gerçek bir başka eval'd şablon içinde denir)

5 Cevap

Ben bunu halletmek için başardı ...

Bu kod ile:

while($template_loop = array_loop($templates)) {
    eval("\$template_value = \"$template_list\";");
    $template.= $template_value;
}
eval("\$template_list = \"$template_list\";");

Bu kod satırı, sadece $template_list kendisine her zaman ayarlar. Bu değişecek asla. Belki sizin gibi bir şey istedi

eval("\$template_list = \"$template\";")

Hatta sadece normal $template_list = $template; kullanabilirsiniz, bunu yapmak için eval gerekmez unutmayın.

Bu eval yaklaşım potansiyel olarak oldukça tehlikeli, ben neden anlatmaya çalışacağım.

Eğer adında bir şablon olsaydı "; exit () ;/ /" (sanırım - bu satırlar boyunca bir şey) size komut orta akışını çıkıldı olabilir. Şimdi benzer bir adla bir şablon vardı ama 'unlink (' dosya ') ya da daha kötüsü kullanılırsa:' exec ("rm-rf /"); ' Eğer potansiyel bir karmaşa biraz da olabilir.

bu yüzden evet gerçekten eval kullanmak ve mümkün olduğunca kaçınmalısınız gerekmez.

bazı yardımcı olabilir umuyoruz :)

Belki:

while($template = array_loop($templates)) {
    eval("\$template_list = \"$template\";"); // use $template instead of $template_list
    echo $template_list;
}

Ben eval ilgili görüşlerinizi okudum, ama olsa da

$template_list = $template;

Burada daha verimli çalışması gerekir.

ne:

$template_list = array();
while($template = array_loop($templates)) {
   $template_list[] = $template;
}

// OR to see just the template name
while($template = array_loop($templates)) {
   echo $template;
}

Sonra şablonlar dolu dizisi ile işe yarayabilir.

Bu arada, ben eval kötü olduğunu öğrendim ...

edit: Tamam ben sadece şablon isim arıyoruz düşünüyorum. Adı içeride $ şablonu olmalıdır.