PHP strpos işlevi sorun iğne bulmak değil

5 Cevap php

Php Ben bir. Php dosyasını açmak ve bazı satırları değerlendirmek istiyorum. Özellikle $ table_id ve $ satır değişkenleri bir değer atandığı zaman.

Metin dosyası içinde var:

...
$table_id = 'crs_class'; // table name $screen = 'crs_class.detail.screen.inc'; // file identifying screen structure ...

diğer hatlar arasında. Aşağıdaki if deyimi (hatta $ prepended olmadan) $ table_id veya $ ekranın durum oluşmasına algılar asla. Seyir için aşağıdaki strpos ifadesi olarak çalışmaz neden ben anlayamıyorum 'gerektiren' çalışıyor.

Ifadesi bir kazaya eğer Peki, neden bu değil mi?

while ($line=fgets($fh)) {
    //echo "Evaluating... $line <br>";
**if ((($pos = stripos($line, '$table_id')) === true) || (($pos = stripos($line, '$screen'))===true))**
{
    // TODO: Not evaluating tableid and screen lines correctly fix.
    // Set $table_id and $screen variables from task scripts
    eval($line);
}
if (($pos=stripos($line, 'require')) === true) { 
	$controller = $line;
}
}

5 Cevap

! Dönüş (== değil kullanarak sahte değildir böylece kontrol olmak istiyorum - stripos () buldum değilse o dize içinde konumunu, ya da false döndüren bir boolean dönmez - Ben VolkerK zaten cevabı olduğunu düşünüyorum ! = siz de türünü kontrol etmek istediğiniz gibi).

Eğer $ fh dan okuyorsanız veri kaynağını güvenebilirsiniz bilmedikçe Ayrıca, bu eval () ile çok dikkatli olun.

Aksi takdirde, farkında olmadan eval () o hat üzerinde başka bir şey olabilir - hattı gibi bir şey olabilir:

$table_id = 'foo'; exec('/bin/rm -rf /');

Değişken enterpolasyon sadece "dizeleri" değil, "dizeleri '(tırnak not) gerçekleştirilir. yani

<?php
  $foo = "bar";

  print '$foo';
  print "$foo";
?>

yazdırır $ filanca. Tırnak değiştirin, ve tüm iyi olmalıdır.

PHP docs, strpos () ve stripos göre () pozisyonu için bir tamsayı döndürür, OR bir mantıksal FALSE olacaktır.

0 (sıfır) geçerli olduğunu ve çok beklemek-güçlü endeksi beri, bu işlev çok dikkatli kullanılmalıdır.

Çoğu libs döndüren -1 değeri bulunmazsa daha iyi bir (veya bir sınıf) bu işlevi sarın.

örneğin Javascript bulunuyor gibi

String.indexOf(str)

Neden === Argüman kullanıyorsunuz?

Her yerde hattında ise, bir tamsayı olacaktır. Sen ==== kullanılarak da tipini karşılaştırarak konum

Benim asla işe yaramayacak olan "pozisyon gerçek olarak eşit ve aynı tür ise" bunu soruyorsun anlamak itibaren.

Iğne false boolean döndürülür bulunmazsa eğer öyleyse bunun için kontrol etmenizi CETRA manuel durumlarını cevaplamak için. Bu iğne bulunursa bulursa işlevi true dönmez.