Bu kodlardan hangisi daha hızlı olacak?
$temp = $_REQUEST['s'];
veya
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Bu kodlardan hangisi daha hızlı olacak?
$temp = $_REQUEST['s'];
veya
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Yanıtlar:
$_REQUEST
Varsayılan olarak, içeriğini içerir $_GET
, $_POST
ve $_COOKIE
.
Ama bu sadece bir varsayılan, hangi bağlıdır variables_order
; ve çerezlerle çalışmak istediğinizden emin değilim.
Eğer seçmek zorunda kalsaydım, muhtemelen kullanmazdım $_REQUEST
ve seçerdim $_GET
ya da $_POST
- başvurumun ne yapması gerektiğine bağlı olarak (yani biri ya da diğeri, ama ikisi de değil) : genel olarak konuşursak:
$_GET
birisi veri talep olduğunda gelen uygulamanıza.$_POST
birisi bastırıyor zaman (veya silme ekleme veya güncelleme) verileri için uygulamanıza.Her iki durumda da, performanslar hakkında fazla bir fark olmayacak: fark, senaryonuzun geri kalanıyla ne yapacağına kıyasla ihmal edilebilir.
POST'a karşılık GET
1) Hem GET hem de POST bir dizi oluşturur (örneğin dizi (anahtar => değer, anahtar2 => değer2, anahtar3 => değer3, ...)). Bu dizi anahtar / değer çiftlerini içerir; burada anahtarlar, form denetimlerinin adlarıdır ve değerler, kullanıcıdan gelen girdi verileridir.
2) Hem GET hem de POST, $ _GET ve $ _POST olarak değerlendirilir. Bunlar süper küreseller, yani kapsamdan bağımsız olarak her zaman erişilebilir oldukları anlamına gelir ve özel bir şey yapmadan herhangi bir işlev, sınıf veya dosyadan bunlara erişebilirsiniz.
3) $ _GET, geçerli komut dosyasına URL parametreleri aracılığıyla iletilen bir değişkenler dizisidir.
4) $ _POST, geçerli komut dosyasına HTTP POST yöntemi aracılığıyla iletilen bir değişkenler dizisidir.
GET ne zaman kullanılır?
GET yöntemiyle bir formdan gönderilen bilgiler herkes tarafından görülebilir (tüm değişken adları ve değerler URL'de görüntülenir). GET'in gönderilecek bilgi miktarı konusunda da sınırları vardır. Sınırlama yaklaşık 2000 karakterdir. Ancak, değişkenler URL'de görüntülendiğinden sayfaya yer işareti koymak mümkündür. Bu, bazı durumlarda yararlı olabilir.
GET, hassas olmayan verileri göndermek için kullanılabilir.
Not: GET ASLA şifre veya diğer hassas bilgileri göndermek için kullanılmamalıdır!
POST ne zaman kullanılır?
POST yöntemiyle bir formdan gönderilen bilgiler başkaları tarafından görülemez (tüm adlar / değerler HTTP isteğinin gövdesine gömülür) ve gönderilecek bilgi miktarı üzerinde herhangi bir sınırlama yoktur.
Ayrıca POST, dosyaları sunucuya yüklerken çok parçalı ikili giriş desteği gibi gelişmiş işlevleri destekler.
Ancak, değişkenler URL'de gösterilmediğinden sayfaya yer imi koymak mümkün değildir.
$ _GET değişkenleri sorgu dizesinden veya URL'nizden alır.
$ _POST (genellikle) formlar gibi POST yönteminden değişkenleri alır.
$ _REQUEST, $ _GET ve $ _POST birleşimidir; burada $ _POST $ _GET'i geçersiz kılar. Doğrulamalar için kendini yenileyen formlarda $ _REQUEST kullanmak güzel.
GET
sorgu dizesinden, POST
form gönderilmesinden).
Ben kullanarak öneririm $_POST
ve $_GET
açıkça.
Yine de $ _REQUEST kullanmak, uygun site tasarımı için gereksiz olmalı CSRF/XSS
ve URL'de veri depolamaktan kaynaklanan daha kolay saldırılara ve diğer sinsiliğe açık bırakmak gibi bazı olumsuzluklarla birlikte geliyor.
Hız farkı her iki şekilde de minimum olmalıdır.
REQUEST kullanın. Kimse böyle basit bir operasyonun hızını umursamıyor ve daha temiz bir kod.
$_REQUEST
yanlış bir sonuçtur. Cevabımı gör.
Endişelenme. Ancak yine de ikinci çözümü kullanmalısınız (artı bu değişkenlerin hiçbiri için ekstra bir kontrol), çünkü güvenlik sorunları var $_REQUEST
(çünkü bu dizi için tek kaynak değildir $_GET
ve $_POST
değildir).
$_REQUEST
Dünün sorunları hakkında bir yazı vardı , sanırım. Onu bulmama izin ver.
EDIT : Oh, doğrudan bir yazı değil, ama yine de burada: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Bunu kullanın çünkü daha güvenli ve fark edilir bir hız farkı yaratmaz
$_REQUEST
ancak yine de aynı komut dosyasına her iki şekilde de erişilmesine izin verir (benim durumumda, aynı komut dosyası farklı 'eylemler' ile kullanılır ve bazen $ _GET iyi olur, ancak diğer zamanlarda $ Verileri gizlemek / güvenliğini sağlamak için _POST).
Bir bilgisayar korsanı, $ _POST veya $ _GET değerini geçersiz kılacak bir çerez ayarlayabileceğinden, bazı güvenlik endişeleri söz konusudur. Hassas verileri işlerseniz, $ _REQUEST kullanmanızı önermem. - Xandor
bazı durumlarda $_GET
alternatif olarak kullanılamazsınız $_POST
.
Ne zaman ??
GET
ayrıca gönderilecek bilgi miktarı konusunda da sınırlar vardır. Sınırlama yaklaşık 2000 karakterdir.
Başka bir şey kullanarak bir veri alamazsınız birkaç durum vardır $_POST
Ne zaman ?
Dinlenme Servisi için
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
kullanılacak yanlış bir şey yok $_REQUEST
.
Ancak bunu yapmanın yolu $ _SERVER ['REQUEST_METHOD'] 'i açıkça kontrol etmektir, $ _POST'un bir GET için boş olmasına güvenmemek.
$_SERVER['REQUEST_METHOD']
Senaryonun herhangi biriyle çağrılıp çağrılmayacağını kontrol etmek için iyi bir tavsiye Ama hiçbir şeyin yanlış olduğunu söylemek $_REQUEST
% 100 doğru değildir. Bilgisayar korsanı, $ _POST veya $ _GET değerini geçersiz kılacak bir çerez ayarlayabileceğinden, bazı güvenlik endişeleri söz konusudur. Hassas verileri işlerseniz, kullanmanızı önermem $_REQUEST
.
$ _GET değişkenleri sorgu dizesinden veya URL'nizden alır.
$ _POST (genellikle) formlar gibi POST yönteminden değişkenleri alır.
$ _REQUEST, $ _GET ve $ _POST birleşimidir; burada $ _POST $ _GET'i geçersiz kılar. Doğrulamalar için kendini yenileyen formlarda $ _REQUEST kullanmak güzel.
request_order
, çerez değerlerine bağlıdır ve bu çerez değerlerini de içerebilir, bu yüzden çok güvenilir veya kullanışlı bir özellik değildir.
Daha açık olduğu için ikinci yöntemi kullanırdım. Aksi takdirde değişkenlerin nereden geldiğini bilmiyorsunuz.
Neden yine de GET ve POST'u kontrol etmeniz gerekiyor? Elbette birini ya da diğerini kullanmak daha mantıklı.
GET
sadece bir öğe için (örneğin taşıyarak) ve POST
birden fazla (onay kutuları olan bir form ...) için kullanıldım.
Sadece _GET veya _POST kullanıyorum. Kontrol etmeyi tercih ederim.
Ben OP her iki kod parçası hakkında sevmiyorum onlar HTTP yöntemi kullanılan bilgi atmak olduğunu. Ve bu bilgi girdi temizliği için önemlidir.
Örneğin, bir komut dosyası DB'ye girilecek bir formdan veri kabul ederse, formun POST'u kullanması daha iyi olur ( yalnızca idempotent eylemler için GET kullanın ). Ancak komut dosyası GET yöntemi aracılığıyla giriş verilerini alırsa (normalde) reddedilmelidir. Benim için böyle bir durum, hata günlüğüne güvenlik ihlali yazmayı gerektirebilir, çünkü bu, birinin üzerinde bir şeyler denediğinin bir işaretidir.
OP'deki her iki kod parçasında da bu sterilizasyon mümkün olmazdı.
$_POST
böyle bir şey yapmaktan arama motoru tarayıcılarının önlenmesidir: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Kullanırım $_POST
, $_GET
çünkü $_REQUEST
içeriklerinden farklı olarak etkilenmez variables_order
.
Ne zaman kullanılır $_POST
ve $_GET
ne tür bir işlem yürütüldüğüne bağlıdır. Sunucudan işlenen verileri değiştiren bir işlem bir POST talebi yoluyla, diğer işlemler ise bir GET talebi yoluyla yapılmalıdır. Bir örnek vermek gerekirse, kullanıcı bir bağlantıyı tıklattıktan sonra bir kullanıcı hesabını silen bir işlem doğrudan yürütülmemelidir.
Bunu kullanıyorum,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
$ _REQUEST'in birden fazla parametresi olup olmadığını doğrular ($ _REQUEST içindeki ilk parametre gerektiğinde kullanılabilecek istek uri olacaktır, bazı PHP paketleri $ _GET döndürmez, bu yüzden 1'den fazla _GET, varsayılan olarak $ _POST olacaktır.
Zamanından önce optimizasyon yapıyorsunuz. Ayrıca, GET'in POST-ing olduğunuz şeyler için kullanılıp kullanılmayacağını, güvenlik nedeniyle gerçekten düşünmeniz gerekir.
Çirkin ve kodu canlı yayınlarken son bir çözüm olarak tavsiye etmem, ancak dinlenme işlevleri oluştururken, bazen 'tümünü yakala' parametre kavrayıcıya sahip olmak kullanışlı:
public static function parseParams() {
$params = array();
switch($_SERVER['REQUEST_METHOD']) {
case "PUT":
case "DELETE":
parse_str(file_get_contents('php://input'), $params);
$GLOBALS["_{$_SERVER['REQUEST_METHOD']}"] = $params;
break;
case "GET":
$params = $_GET;
break;
case "POST":
$params = $_POST;
break;
default:
$params = $_REQUEST;
break;
}
return $params;
}
Bir reklam öğesi muhtemelen komut satırı parametrelerini veya IDE'nizden gelenleri işlemek için ekleyebilir. Belirli bir dinlenme işlevinin ne yaptığına karar verdiğinizde, konuşlandırma sürümü için ihtiyacınız olanı aldığınızdan emin olmak için söz konusu çağrı için uygun olanı seçebilirsiniz. Bu, 'REQUEST_METHOD' öğesinin ayarlandığını varsayar.
!isset($_REQUEST['s'])
.