Beri +1 pada itu - ketika ragu, var_dump ($ _ SERVER) dan jawabannya sering ada di dalam.
Paul Dixon
10
Apa yang terjadi jika Anda POST ke mypage.php? Var = sesuatu?
nickf
2
Metode ini akan POST, tetapi jika Anda harus menggunakan $ _GET untuk mendapatkan variabel-variabel itu saya tidak yakin.
OIS
24
@NathanLong Dalam pengalaman saya itu tidak benar. Jika Anda POST ke mypage.php? Var = sesuatu maka 'sesuatu' akan masuk $_GET['var'].
David Gallagher
14
$_POSTdan $_GETsayangnya diberi nama. $_GETmengandung variabel dari komponen permintaan URL, terlepas dari metode HTTP. $_POSTakan berisi bidang formulir jika permintaan dikirim sebagai application/x-www-form-urlencoded.
Pj Dietz
223
REST di PHP bisa dilakukan dengan sangat sederhana. Buat http://example.com/test.php (diuraikan di bawah). Gunakan ini untuk panggilan REST, mis . Http://example.com/test.php/testing/123/hello . Ini berfungsi dengan Apache dan Lighttpd di luar kotak, dan tidak ada aturan penulisan ulang yang diperlukan.
Jika Anda ingin API Anda tersedia, tanpa mengutip mesin penginterpretasi apa yang Anda gunakan, tambahkan file .htaccess yang mengandung RewriteEngine di RewriteRule ^ api /(.*)$ api.php / $ 1 Ini mengasumsikan file API Anda disebut api. php Juga, sejak blok kode di atas ditulis, pengembang PHP telah mendepresiasi fungsi pemisahan. itu berfungsi dengan baik jika Anda mengganti split dengan meledak.
JonTheNiceGuy
10
Ada apa dengan @di depan $_SERVER['PATH_INFO']?
Svish
10
@Vish, detail luar biasa yang Anda perhatikan! Itu menghilangkan PHP Notice: Undefined index: PATH_INFOjika PATH_INFO tidak ada $_SERVER. Saya menambahkan ini ke tas trik saya segera! Ini adalah cara untuk mengatakan "Saya tahu mungkin tidak ada entri yang bernama seperti itu dalam array ini, dan saya siap untuk itu, jadi diam dan lakukan apa yang saya katakan kepada Anda". :) Terima kasih teman-teman, baik untuk memposting jawaban ini dan untuk membawa perhatian saya pada karakter tertentu di dalamnya.
inkredibl
16
Saya biasanya menggunakan! Kosong, bukan @. Latihan yang lebih baik?
geilt
8
Sebagai cara yang lebih ringkas menggunakan metode variabel: <?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
SandWyrm
21
Mendeteksi metode HTTP atau yang disebut REQUEST METHODbisa dilakukan dengan menggunakan potongan kode berikut.
$method = $_SERVER['REQUEST_METHOD'];if($method =='POST'){// Method is POST} elseif ($method =='GET'){// Method is GET} elseif ($method =='PUT'){// Method is PUT} elseif ($method =='DELETE'){// Method is DELETE}else{// Method unknown}
Anda juga bisa melakukannya menggunakan switchjika Anda lebih suka ini daripada if-elsepernyataan.
Jika metode selain GETatau POSTdiperlukan dalam formulir HTML, ini sering diselesaikan dengan menggunakan bidang tersembunyi di formulir.
<!-- DELETE method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="DELETE"></form><!-- PUT method --><formaction=''method='POST'><inputtype="hidden"name'_METHOD'value="PUT"></form>
Untuk informasi lebih lanjut mengenai metode HTTP, saya ingin merujuk pada pertanyaan StackOverflow berikut:
Karena ini tentang REST, hanya mendapatkan metode permintaan dari server tidak cukup. Anda juga perlu menerima parameter rute yang tenang. Alasan untuk memisahkan parameter RESTful dan parameter GET / POST / PUT adalah bahwa sumber daya perlu memiliki URL unik untuk identifikasi.
Inilah salah satu cara menerapkan rute RESTful di PHP menggunakan Slim:
Kasus "DELETE" tidak akan pernah terkena karena itu bukan REQUEST_METHOD yang mungkin. REQUEST_METHODs yang valid adalah 'GET', 'HEAD', 'POST', 'PUT'. Baca dokumentasi (ditunjukkan dalam berbagai jawaban di halaman ini) sebelum mengirim jawaban.
Patrick
1
@ Patrick, sebenarnya, kasus "HAPUS" akan mendapatkan hit ketika metode permintaan HAPUS; namun dokumentasi dalam PHP tidak menyebutkannya. Memang, metode apa pun akan tercermin $_SERVER['REQUEST_METHOD'], bahkan yang disesuaikan. Ingat bahwa metode ini hanya string di header permintaan dan itu adalah tugas kami untuk memeriksa kebenarannya.
Ivan De Paz Centeno
1
@Patrick DELETE didefinisikan dalam RFC7231 dan didukung di semua browser utama. tools.ietf.org/html/rfc7231#section-4.3.5 dan $ _SERVER ["REQUEST_METHOD"] hanyalah sebuah string.
Robert Talada
@IvanDePazCenteno Tepat. Jangan pernah mempercayai input pengguna. Jangan pernah mempercayai input pengguna.
Anda dapat membuat di controller $ request = $ this-> getRequest (). Dan kemudian, $ request-> isPost (). Lihat juga $ request-> getMethod ().
Vasiliy Toporov
4
Di core php Anda bisa melakukan ini:
<?php
$method = $_SERVER['REQUEST_METHOD'];switch($method){case'GET'://Here Handle GET Request
echo 'You are using '.$method.' Method';break;case'POST'://Here Handle POST Request
echo 'You are using '.$method.' Method';break;case'PUT'://Here Handle PUT Request
echo 'You are using '.$method.' Method';break;case'PATCH'://Here Handle PATCH Request
echo 'You are using '.$method.' Method';break;case'DELETE'://Here Handle DELETE Request
echo 'You are using '.$method.' Method';break;case'COPY'://Here Handle COPY Request
echo 'You are using '.$method.' Method';break;case'OPTIONS'://Here Handle OPTIONS Request
echo 'You are using '.$method.' Method';break;case'LINK'://Here Handle LINK Request
echo 'You are using '.$method.' Method';break;case'UNLINK'://Here Handle UNLINK Request
echo 'You are using '.$method.' Method';break;case'PURGE'://Here Handle PURGE Request
echo 'You are using '.$method.' Method';break;case'LOCK'://Here Handle LOCK Request
echo 'You are using '.$method.' Method';break;case'UNLOCK'://Here Handle UNLOCK Request
echo 'You are using '.$method.' Method';break;case'PROPFIND'://Here Handle PROPFIND Request
echo 'You are using '.$method.' Method';break;case'VIEW'://Here Handle VIEW Request
echo 'You are using '.$method.' Method';break;Default:
echo 'You are using '.$method.' Method';break;}?>
Penting juga untuk dicatat, bahwa PHP akan mengisi semua $_GETparameter bahkan ketika Anda mengirim permintaan yang tepat dari jenis lainnya.
Metode di balasan atas adalah sepenuhnya benar, namun jika Anda ingin additionaly cek untuk GETparameter sambil menangani POST, DELETE, PUT, dll permintaan, Anda perlu memeriksa ukuran $_GETarray yang.
PATCH
?$_SERVER['REQUEST_METHOD'] === 'PATCH'
Jawaban:
Dengan menggunakan
Contoh
Untuk detail lebih lanjut silakan lihat dokumentasi untuk variabel $ _SERVER .
sumber
$_GET['var']
.$_POST
dan$_GET
sayangnya diberi nama.$_GET
mengandung variabel dari komponen permintaan URL, terlepas dari metode HTTP.$_POST
akan berisi bidang formulir jika permintaan dikirim sebagaiapplication/x-www-form-urlencoded
.REST di PHP bisa dilakukan dengan sangat sederhana. Buat http://example.com/test.php (diuraikan di bawah). Gunakan ini untuk panggilan REST, mis . Http://example.com/test.php/testing/123/hello . Ini berfungsi dengan Apache dan Lighttpd di luar kotak, dan tidak ada aturan penulisan ulang yang diperlukan.
sumber
@
di depan$_SERVER['PATH_INFO']
?PHP Notice: Undefined index: PATH_INFO
jika PATH_INFO tidak ada$_SERVER
. Saya menambahkan ini ke tas trik saya segera! Ini adalah cara untuk mengatakan "Saya tahu mungkin tidak ada entri yang bernama seperti itu dalam array ini, dan saya siap untuk itu, jadi diam dan lakukan apa yang saya katakan kepada Anda". :) Terima kasih teman-teman, baik untuk memposting jawaban ini dan untuk membawa perhatian saya pada karakter tertentu di dalamnya.<?php $request = explode("/", substr(@$_SERVER['PATH_INFO'], 1)); $rest = 'rest_'.strtolower($_SERVER['REQUEST_METHOD']); if (function_exists($rest)) call_user_func($rest, $request); ?>
Mendeteksi metode HTTP atau yang disebut
REQUEST METHOD
bisa dilakukan dengan menggunakan potongan kode berikut.Anda juga bisa melakukannya menggunakan
switch
jika Anda lebih suka ini daripadaif-else
pernyataan.Jika metode selain
GET
atauPOST
diperlukan dalam formulir HTML, ini sering diselesaikan dengan menggunakan bidang tersembunyi di formulir.Untuk informasi lebih lanjut mengenai metode HTTP, saya ingin merujuk pada pertanyaan StackOverflow berikut:
PUT dan DELETE protokol HTTP dan penggunaannya dalam PHP
sumber
Kami juga dapat menggunakan input_filter untuk mendeteksi metode permintaan sambil juga menyediakan keamanan melalui sanitasi input.
sumber
Karena ini tentang REST, hanya mendapatkan metode permintaan dari server tidak cukup. Anda juga perlu menerima parameter rute yang tenang. Alasan untuk memisahkan parameter RESTful dan parameter GET / POST / PUT adalah bahwa sumber daya perlu memiliki URL unik untuk identifikasi.
Inilah salah satu cara menerapkan rute RESTful di PHP menggunakan Slim:
https://github.com/codeguy/Slim
Dan konfigurasikan server sesuai.
Berikut contoh lain menggunakan AltoRouter:
https://github.com/dannyvankooten/AltoRouter
sumber
Anda bisa menggunakan
getenv
fungsi dan tidak harus bekerja dengan$_SERVER
variabel:Info lebih lanjut:
http://php.net/manual/en/function.getenv.php
sumber
Contoh:
sumber
$_SERVER['REQUEST_METHOD']
, bahkan yang disesuaikan. Ingat bahwa metode ini hanya string di header permintaan dan itu adalah tugas kami untuk memeriksa kebenarannya.Dengan cara ini Anda juga bisa mencapainya di zend framework 2 juga. Terima kasih.
sumber
Di core php Anda bisa melakukan ini:
sumber
Penting juga untuk dicatat, bahwa PHP akan mengisi semua
$_GET
parameter bahkan ketika Anda mengirim permintaan yang tepat dari jenis lainnya.Metode di balasan atas adalah sepenuhnya benar, namun jika Anda ingin additionaly cek untuk
GET
parameter sambil menanganiPOST
,DELETE
,PUT
, dll permintaan, Anda perlu memeriksa ukuran$_GET
array yang.sumber
Ketika suatu metode diminta, ia akan memiliki
array
. Jadi cukup periksacount()
.3v4l.org/U51TE
sumber
Saya menggunakan kode ini. Itu harus bekerja.
Kode di atas ini akan bekerja dengan
REST calls
dan juga akan bekerja denganhtml form
sumber
Anda bisa mendapatkan data string kueri apa pun
www.example.com?id=2&name=r
Anda harus mendapatkan data menggunakan
$_GET['id']
atau$_REQUEST['id']
.Mengirim data berarti formulir
<form action='' method='POST'>
yang harus Anda gunakan$_POST
atau$_REQUEST
.sumber