Foreach () kukla adı dizi adı ile eşleşen zaman PHP $ _SESSION iç içe array kaybolur

3 Cevap

(Teşekkür ederim): Birisi şu PHP 5.2.13 ile bir hata olduğunu teyit misiniz

<?php
    session_start();
    if (!is_array($_SESSION["breadcrumb"]["trail"]))
    {
        $_SESSION["breadcrumb"]["trail"][] = "trail";
    } 
    foreach ($_SESSION["breadcrumb"]["trail"] as $breadcrumb)
    {
        echo $breadcrumb;
    }
?>

Yukarıdaki PHP script çalıştırmak 3. kez çöküyor. Foreach () döngü döngü içinde kullanılan iç değişken iç içe $ _SESSION dizi adı ile eşleşen çünkü iç içe $ _SESSION dizi mendil bir (yanlış) bir yan etkisi var gibi görünüyor. Sadece farklı giderir sorun şey iç foreach adını () değişken değişiyor.

Not: açık oturum değişkenleri Script 3 kez çalıştırmadan önce.

Yine, "$ the_breadcrumb" için "$ kırıntı" değiştirerek sorunu giderir. Ama foreach () döngüsü hiçbir yan etkisi bulunmamaktadır. Not: $ kırıntıdaki kapsamı ["kırıntı"], hiçbir çarpışma olmalıdır $ _SESSION kapsam olarak aynı olmadığı.

Dizisinde print_r () yapıyor (doğru) ikinci kez nüfuslu (doğru), ilk kez boşaltın ve yanlışlıkla üçüncü kez ("Array ([kırıntı] => iz)" olarak belirtilen diziyi gösterir unutmayın İç içe array) sildi olmuştur.

The error in the PHP error log from the 3rd run: PHP Fatal error: Cannot use string offset as an array on line 5

Sadece PHP 5.2.13 - Sorun PHP 5.3 üzerinde bir sorun değildir. Ben PHP sitesi (php.net) üzerine PHP changelog bu konuyla ilgili herhangi bir not bulamadı ve benim canlı sitede 5.2.13 kullanmanız gerekir, bu yüzden kimse onaylamak olabilir umuduyla buraya post ediyorum. Ben de php.net üzerinde bir hata raporu gönderdiniz.

Thanks, Dan Nissenbaum

Expected result:

5. satırda yok PHP 5.2.13 crash.

Actual result:

5. satırdaki PHP 5.2.13 çöker.

3 Cevap

Çözüldü. notJim register_globals php.ini ayar çekiyor. Açık olarak kurulmuştur. Beklendiği gibi, kapsamını ayırmak Off çevirin. Not: register_globals (en az kadar geri olarak) PHP 5.3 itibariyle önerilmemektedir - muhtemelen daha geri.

Evet bu bir kesinlikle bir hata olduğunu. Ben hem düzgün çalışması için almak için benim oturum değişkenleri farklı bir şey benim foreach tablolarında değişken adları değişti. Bu sorun, php sürüm 5.3.0 oluşmaz.

Ben 5.2.6 kullanabilir ve eserleri, hiçbir hata selamlıyorum.