Küçük yeniden yazma optimizasyon PHP büyük?

3 Cevap php

Ben URI en küçük harfe için BÜYÜK HARF herhangi bir biçimde yönlendirmek için bu PHP kodu kullanıyorum. Üç istisnası vardır: URI "AdminPanel" veya "arama" ya içeriyorsa hiçbir yönlendirme zaten küçük ise hiçbir yönlendirme var da, orada

Eğer PHP işlevini geliştirmek için herhangi bir şekilde görüyor musunuz?

$trailed = $_SERVER['REQUEST_URI'];
$pos1 = strpos($trailed,"adminpanel");
$pos2 = strpos($trailed,"search");
if ($pos1 === false && $pos2 === false && strlen($trailed) !== strlen(preg_replace('/[A-Z]/', '',     $trailed))) {
    $trailed = strtolower($trailed);
    header('HTTP/1.1 301 Moved Permanently'); 
    header('Location: http://'. $_SERVER["SERVER_NAME"] . $trailed);
    exit;
}

3 Cevap

$trailed = $_SERVER['REQUEST_URI'];
if (!strpos($trailed,"admin") && !strpos($trailed,"search") && preg_match('/[[:upper:]]/', $trailed)) {
  $trailed = strtolower($trailed);
  header('HTTP/1.1 301 Moved Permanently'); 
  header('Location: http://'. $_SERVER["SERVER_NAME"] . $trailed);
  exit;
}

Kombine bir yaklaşımla alarak bu kodu ilk olandan yaklaşık 140% daha hızlı. Sadece bir iç strpos ve preg_match yerine dize uzunluğu karşılaştırılması deyimi eğer.

Üzgünüm son sürümünde yol cevaplar kadar oy henüz üne sahip ve :) Yardımlarınız için çok teşekkür ederim yok

Ben bu bir tanım karışık durumda olan durumda yönlendirmek için başarısız olacağını düşünüyorum. Bu amaçlanmaktadır? Ayrıca, hat 4 eğer ifadesinin üçüncü fıkrasında bir düzenli ifade kullanarak daha az ayrıntılı olması ($ izledi) dize izledi $ karşılaştırma ve strtolower kullanıyor olabilir?

Bunun yerine özgün dize ve preg_replace sonucunu karşılaştırarak dizesinde bir üst harf varsa () siz, preg_match () testi izin verebilir.

if ( preg_match('/[[:upper:]]/', $_SERVER['REQUEST_URI']) ) {
  if ( false===stripos($trailed, 'adminpanel') && false===stripos($trailed, 'search') {
    // strotolower
    // ...
  }
}

(Bu artık ama bir yan not olarak ilgili olmayabilir: pcre bazı unicode desteğine sahip Yerine. [: Upper:] Eğer unicode harf seçimi için test \ p {Lu} kullanmak istiyorum [(0)] {see })