örneğin, bir sonuç olarak dikkate alınmalıdır bazı değişkenleri saklayan bir dize var I: Ben eval eğer güvensiz olduğunu anlıyoruzeval() yerine ne kullanabilirim?
$foo = eval("return ".RUN_THIS.";");
: o zaman -uated eval()
define('RUN_THIS', '\$something.",".$somethingElse');
hangisi Değerlendirilen dize kullanıcı girişinden. Ancak, örneğin, herşeyi facebook'un HipHop'u çalıştırmaktan vazgeçtim, ki bu da bunu desteklemiyordu().
Görünüşe göre call_user_func()
kullanabilirim - bu etkin olarak eval()
ile aynı sonucu mu? eval()
ne zaman güvenli olduğu nasıl kabul edilir, eğer durum böyleyse?
Düzeltme: Açıklamalara yanıt olarak, aslında amacın ne olduğunu açıkça belirlemedim. Sabit, daha sonra kodun, konfigürasyon sabitlerine erişimi olan bir sınıfın içinde olması veya prosedürel kodun, verilen değişkenler dizisini değerlendirmek için kullanabilmesi için önceden tanımlanır. Değerlendirilmesi gereken değişkenler duruma bağlı olarak değişebilir (tamamen farklı isimler, sıralama, biçimlendirme) fakat aynı amaçla aynı şekilde yürütülür, bu yüzden şu anda sabit olarak ayarlanmış değişkenler dizisine sahibim. yol. Teknik olarak, eval()
sabitleri tanımlayan config.php olduğu sürece güvensiz değildir, ancak sorunun noktası bu değildi.
Değişkenleri neden bu şekilde sakladığınızı açıklayabilirseniz yardımcı olur mu? – Cfreak
Evet, bu biraz tasarım kusuru gibi geliyor. Kodda daha sonraki bir noktada ayrıştırılan daha soyut bir "RUN_THIS" (gerçek kod içermeyen) tanımlayamaz mısınız? –
Yapamayacağınız bir neden var: '$ foo =" \ $ bir şey, $ bir şeyElse "; –