Bu kodu çalıştırdığınızda:
<?php
if (preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
$page = realpath("includes/$_GET[p].php");
if ($page) {
include $page;
}
}
?>
Ben bu hatayı alıyorum:
Notice: Undefined index: on line 3 index.php p
Hata iletisi, dizi öğe tuşu p
ile olduğunu söylüyor. Eğer bir değişken (ya da dizi öğe) var olmadığını garanti edemez, önce isset
fonksiyonu a> ile kontrol etmelisiniz:
if (isset($_GET['p']) && preg_match('/^[a-z0-9]+$/', $_GET['p'])) {
$page = realpath("includes/$_GET[p].php");
if ($page) {
include $page;
}
}
Ne Bamya endeksi dizide ayarlanır olmadığını kontrol için dedi.
Ayrıca parsing an array index in a string Eğer dizi etrafında parantez kullanmak gerekir ve bu bir dize ise tek tırnak ile endeksi kaçmak gerekir için.
$page = realpath("includes/{$_GET['p']}.php");
Ancak kullanıcı tarafından önerilen dosyaları da dahil olmak üzere, en güvenli yolu, bir dizi dosyaları aramak ve orada varsa sadece onları dahil etmektir.
Bir dizi anahtarı ... var olup olmadığını kontrol etmek için array_key_exists() içine bak. Ama senin durumunda ben kullanıcı girişi ile çalışma uzman fonksiyonların filter sınıf almak öneririz.