PHP değişken veri kaybetmek

3 Cevap php

PHP bir değişken veri kaybetme ile ilgili bir sorun yaşıyorum. İşte bu temelde bir ikili dosya içerdiğinden değişken veri biraz, ama tamamen bu bilgiler bulunuyor kaybetmek için bu neden olup olmadığını merak ediyorum.

E-posta ekleri ile başa çıkmak için kullanılan benim kodundan bir pasajı bakıyor:

var_dump($data);  
if (array_key_exists('filename', $params) || array_key_exists('name', $params)) {  
    var_dump($data);  
 ...
}

İlk var_dump dosyanın istenen çıkış verir:

"string(283155) "
--Apple-Mail-5-930065543 ... etc

İkinci bir çıkış verirken:

string(0) ""
...
string(0) ""

Herhangi bir fikir bu neden oluyor? Onlar gerçekten büyük eğer PHP sadece değişkenlerin veri damla mı? (Ben daha önce bu sorunu vardı hiç gibi ben öyle düşünmemiştim)

Eğer öyleyse, herhangi bir geçici çözüm?

Teşekkürler!

Edit: Bu tablolar arasında eksik kod olduğundan söz de değer. Ben de sadece kısa bir dize ile denedim ve ben var_dump aramalar için doğru çıkış alıyorum

3 Cevap

Hayır, PHP kesinlikle keyfi değişkenleri silme değil. Bu davranışa neden olabilecek bazı nedenler:

  • Sen değişkeni $data için iki çağrı arasında başka bir şey için kullanıyor var_dump()
  • $data küresel varsa o başka bir işlev tarafından değiştirilmiş olabilir.
  • Başka var_dump() Eğer bir baskı $data olduğunu düşünüyorum, ama aslında başka bir değişken yazdırır
  • $data olan bir reference (=& tarafından atanan) ve başvurulan değişken değiştirilebilir.

Biri gibi kokuyor:

  1. Bunu kapsamı dışında $ verileri kullanabilirsiniz. Örneğin küresel ama bir işlev () blok kullanabilirsiniz. Bu durumda size fonksiyon bloğunda bu küresel erişimi bildirmeniz gerekir: $ verileri globabl.
  2. Sen başvuruları kullanabilirsiniz. Muhtemelen sıradan değişken tartışmayacağım bu dönüştürmek istediğiniz, ancak referans semantik varsayar kodu buna göre sabit olduğunu dikkatli olmak gerekir. (PHP kılavuzu okunmaya değer, referans bir bölüm vardır.)

Olası nedenler:

  • Eğer düşünce komut bir dizi olarak atamak gerekiyordu başarısız - - $params bir dizi değil yani if ifade false giderir. Emin E_ALL & E_NOTICE içerir yapmak ve 'değil, dizinin' hataları günlüğüne göstermek görmek için hata raporlama seviyesini kontrol edin. Ayrıca think, ikinci {[(3 yapım, daha sonra tekrar sizin komut aşağı (tüm dizi değerlerini boçaltmak sonra) var_dump() $ veri arayarak ya da diğer bazı değişken üzerinde olan )]} denir ediliyor.
  • $params is bir dizi, ancak bu tuşların ne bunun içinde var, bu yüzden if ifade false giderir. Ayrıca yapım, daha sonra tekrar sizin komut aşağı $data (tüm dizi değerlerini boçaltmak sonra) ya da diğer bazı değişken üzerinde var_dump() aradığınız think İkinci var_dump() denir ediliyor.
  • PHP inşa resmi yapı değildir ve var_dump() referans değişkeni alır ve anahtarları koruyarak tüm dizi değerlerini boşaltmak için ilave işlevsellik içerir. Ya da belki de if() kapsamını değiştirmek yapar. Bu yüzden en iyi resmi yapı ama bir şey kullanmak değil, bir katma değer özelliği gibi görünmüyor.
  • Doğru davranışı açıklayan olmayan veya bunu açıklamak yardımcı olacağını çizgiler arasındaki kodu hariç var. Siz virgül ve $ param bilinen tuşlarının listesini eksik, bu yüzden bu gerçek, tam kod değildir varsaymak güvenlidir.