Manakah dari kode ini yang lebih cepat?
$temp = $_REQUEST['s'];
atau
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Manakah dari kode ini yang lebih cepat?
$temp = $_REQUEST['s'];
atau
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Jawaban:
$_REQUEST, secara default, berisi konten $_GET, $_POSTdan $_COOKIE.
Tapi itu hanya default, yang tergantung pada variables_order; dan tidak yakin Anda ingin bekerja dengan cookie.
Jika saya harus memilih, saya mungkin tidak akan menggunakan $_REQUEST, dan saya akan memilih $_GETatau $_POST- tergantung pada apa yang harus dilakukan aplikasi saya (yaitu satu atau yang lain, tetapi tidak keduanya) : secara umum:
$_GETketika seseorang meminta data dari aplikasi Anda.$_POSTketika seseorang mendorong (memasukkan atau memperbarui; atau menghapus) data ke aplikasi Anda.Either way, tidak akan ada banyak perbedaan tentang pertunjukan: perbedaan akan diabaikan, dibandingkan dengan apa yang akan dilakukan skrip Anda yang lain.
DAPATKAN vs. POST
1) Baik GET dan POST membuat array (mis. Array (key => value, key2 => value2, key3 => value3, ...)). Array ini menampung pasangan kunci / nilai, di mana kunci adalah nama kontrol formulir dan nilai adalah input data dari pengguna.
2) GET dan POST diperlakukan sebagai $ _GET dan $ _POST. Ini adalah superglobals, yang berarti mereka selalu dapat diakses, terlepas dari ruang lingkup - dan Anda dapat mengaksesnya dari fungsi, kelas atau file apa pun tanpa harus melakukan sesuatu yang istimewa.
3) $ _GET adalah array variabel yang diteruskan ke skrip saat ini melalui parameter URL.
4) $ _POST adalah array variabel yang diteruskan ke skrip saat ini melalui metode HTTP POST.
Kapan harus menggunakan GET?
Informasi yang dikirim dari formulir dengan metode GET dapat dilihat oleh semua orang (semua nama dan nilai variabel ditampilkan dalam URL). GET juga memiliki batasan jumlah informasi yang akan dikirim. Batasannya sekitar 2000 karakter. Namun, karena variabel ditampilkan di URL, dimungkinkan untuk menandai halaman tersebut. Ini dapat bermanfaat dalam beberapa kasus.
GET dapat digunakan untuk mengirim data yang tidak sensitif.
Catatan: JANGAN PERNAH digunakan untuk mengirim kata sandi atau informasi sensitif lainnya!
Kapan menggunakan POST?
Informasi yang dikirim dari formulir dengan metode POST tidak terlihat oleh orang lain (semua nama / nilai tertanam di dalam tubuh permintaan HTTP) dan tidak memiliki batasan pada jumlah informasi yang akan dikirim.
Selain itu POST mendukung fungsionalitas tingkat lanjut seperti dukungan untuk input biner multi-bagian saat mengunggah file ke server.
Namun, karena variabel tidak ditampilkan dalam URL, tidak mungkin untuk mem-bookmark halaman.
$ _GET mengambil variabel dari querystring, atau URL Anda.>
$ _POST mengambil variabel dari metode POST, seperti formulir (umumnya).
$ _REQUEST adalah penggabungan $ _GET dan $ _POST di mana $ _POST menimpa $ _GET. Baik untuk menggunakan $ _REQUEST pada formulir referensi diri untuk validasi.
GETdari string kueri, POSTdari pengiriman formulir).
Saya sarankan menggunakan $_POSTdan $_GETsecara eksplisit.
Menggunakan $ _REQUEST seharusnya tidak perlu dengan desain situs yang tepat, dan itu datang dengan beberapa kelemahan seperti membuat Anda terbuka untuk CSRF/XSSserangan yang lebih mudah dan kekonyolan lainnya yang berasal dari menyimpan data dalam URL.
Perbedaan kecepatan harus minimal.
Gunakan PERMINTAAN. Tidak ada yang peduli tentang kecepatan operasi yang begitu sederhana, dan itu kode yang jauh lebih bersih.
$_REQUESTkesimpulan yang salah. Lihat jawaban saya.
Jangan khawatir. Tetapi Anda masih harus menggunakan solusi kedua (ditambah pemeriksaan tambahan untuk tidak ada variabel-variabel yang ada), karena ada masalah keamanan dengan $_REQUEST(karena $_GETdan $_POSTbukan satu-satunya sumber untuk array itu).
Ada posting tentang masalah dengan $_REQUESTkemarin, saya percaya. Biarkan aku menemukannya.
EDIT : Oh well, bukan posting secara langsung, tapi ini dia: http://kuza55.blogspot.com/2006/03/request-variable-fixation.html
if (isset($_GET['s'])) {
$temp = $_GET['s'];
}
else {
$temp = $_POST['s'];
}
Gunakan itu karena lebih aman dan tidak akan membuat perbedaan kecepatan yang terlihat
$_REQUESTtetapi masih memungkinkan skrip yang sama untuk diakses dengan cara baik (dalam kasus saya, skrip yang sama digunakan dengan 'tindakan' yang berbeda dan beberapa kali $ _GET akan baik-baik saja, tetapi di lain waktu saya membutuhkan $ _POST untuk menyembunyikan / mengamankan data).
Ada masalah keamanan tertentu yang terlibat karena seorang peretas dapat menetapkan cookie yang akan menimpa nilai $ _POST atau $ _GET. Jika Anda menangani data sensitif, saya tidak akan merekomendasikan menggunakan $ _REQUEST. - Xandor
Anda tidak dapat digunakan sebagai $_GETalternatif$_POST pada beberapa kasus.
Kapan ??
GETjuga memiliki batasan jumlah informasi yang akan dikirim. Batasannya sekitar 2000 karakter.
Hal lain ada beberapa kasus ketika Anda tidak dapat mengambil data menggunakan $_POST
Kapan ?
Untuk Layanan Istirahat
`GET` - Provides a read only access to a resource.
`PUT` - Used to create a new resource.
tidak ada yang salah untuk digunakan $_REQUEST.
Tetapi cara untuk melakukannya adalah dengan memeriksa $ _SERVER ['REQUEST_METHOD'] secara eksplisit, tidak bergantung pada $ _POST yang kosong untuk GET.
$_SERVER['REQUEST_METHOD']untuk memeriksa apakah skrip akan dipanggil dengan salah satunya. Tetapi untuk mengatakan tidak ada yang salah dengan $_REQUESTitu tidak 100% benar. Ada masalah keamanan tertentu yang terlibat karena seorang peretas dapat menetapkan cookie yang akan menimpa nilai $ _POST atau $ _GET. Jika Anda menangani data sensitif, saya tidak akan merekomendasikan menggunakan $_REQUEST.
$ _GET mengambil variabel dari querystring, atau URL Anda.>
$ _POST mengambil variabel dari metode POST, seperti formulir (umumnya).
$ _REQUEST adalah penggabungan $ _GET dan $ _POST di mana $ _POST menimpa $ _GET. Baik untuk menggunakan $ _REQUEST pada formulir referensi diri untuk validasi.
request_orderdan mungkin mengandung nilai cookie juga, itulah sebabnya itu bukan fitur yang sangat andal atau berguna.
Saya akan menggunakan metode kedua karena lebih eksplisit. Kalau tidak, Anda tidak tahu dari mana variabel itu berasal.
Mengapa Anda perlu memeriksa GET dan POST? Tentunya menggunakan satu atau yang lain hanya lebih masuk akal.
GEThanya digunakan untuk satu item (misalnya memindahkannya) dan POSTuntuk beberapa item ( formulir dengan kotak centang ...).
Saya hanya pernah menggunakan _GET atau _POST. Saya lebih suka memiliki kontrol.
Apa yang saya tidak suka tentang salah satu fragmen kode dalam OP adalah bahwa mereka membuang informasi yang menggunakan metode HTTP. Dan informasi itu penting untuk sanitasi input.
Misalnya, jika skrip menerima data dari formulir yang akan dimasukkan ke dalam DB maka formulir sebaiknya menggunakan POST ( gunakan GET hanya untuk tindakan idempoten ). Tetapi jika skrip menerima input data melalui metode GET maka harus (biasanya) ditolak. Bagi saya, situasi seperti itu mungkin menuntut penulisan pelanggaran keamanan ke log kesalahan karena itu pertanda seseorang sedang mencoba sesuatu.
Dengan salah satu fragmen kode dalam OP, sanitasi ini tidak akan mungkin.
$_POSTadalah untuk mencegah crawler mesin pencari melakukan sesuatu seperti ini: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Saya akan menggunakan $_POST, dan $_GETkarena berbeda dari $_REQUESTkonten mereka tidak dipengaruhi oleh variables_order.
Kapan menggunakan $_POSTdan $_GETtergantung pada jenis operasi apa yang sedang dijalankan. Operasi yang mengubah data yang ditangani dari server harus dilakukan melalui permintaan POST, sedangkan operasi lain harus dilakukan melalui permintaan GET. Untuk membuat contoh, operasi yang menghapus akun pengguna tidak boleh langsung dieksekusi setelah pengguna mengklik tautan, saat melihat gambar dapat dilakukan melalui tautan.
Saya menggunakan ini,
$request = (count($_REQUEST) > 1)?$_REQUEST:$_GET;
pernyataan tersebut memvalidasi jika $ _REQUEST memiliki lebih dari satu parameter (parameter pertama dalam $ _REQUEST akan menjadi permintaan uri yang dapat digunakan saat dibutuhkan, beberapa paket PHP tidak akan mengembalikan $ _GET jadi periksa apakah lebih dari 1 bernilai $ _GET, By default, itu akan menjadi $ _POST.
Anda terlalu dini mengoptimalkan. Juga, Anda harus benar-benar memikirkan apakah GET harus digunakan untuk hal-hal yang Anda POST, karena alasan keamanan.
Ini jelek dan saya tidak akan merekomendasikan itu sebagai solusi akhir ketika mendorong kode langsung, tetapi sementara membangun fungsi istirahat, kadang-kadang berguna untuk memiliki parameter grabber 'catch-all':
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;
}
Seseorang yang kreatif mungkin bahkan dapat menambahkannya untuk menangani parameter baris perintah atau apa pun yang berasal dari IDE Anda. Setelah Anda memutuskan apa fungsi istirahat yang diberikan lakukan, Anda dapat memilih satu yang sesuai untuk panggilan yang diberikan untuk memastikan Anda mendapatkan apa yang Anda butuhkan untuk versi penyebaran. Ini mengasumsikan 'REQUEST_METHOD' diatur.
!isset($_REQUEST['s']).