PHP 8.4 dikeluarkan pada bulan November, dan anda serta pasukan anda tidak ragu-ragu telah bekerja keras memahami ciri baharu, penamatan dan perubahan yang mengiringi lelaran terbaru bahasa ini. ini termasuk perubahan pada kata kerja HTTP bukan POST.
Dalam blog ini, saya berjalan melalui latar belakang kata kerja HTTP dalam PHP, menjelaskan mengapa HTTP perubahan kata kerja dalam perkara PHP 8.4. Saya kemudian menyediakan panduan untuk pembangun untuk rujukan apabila melaksanakan perubahan ini dalam kod mereka.
Kata Kerja HTTP dalam PHP: Latar Belakang
PHP dibangunkan dengan mengambil kira web dan pengendalian borang yang disokong daripadanya hari-hari terawal. Pada asalnya dalam HTTP, pada dasarnya hanya terdapat dua kaedah melalui mana penyemak imbas boleh meminta halaman web: melalui GET atau POST. ?Walaupun bentuk HTML masih menyokong kedua-dua kaedah ini, JavaScript mempunyai keupayaan untuk menghantar permintaan HTTP menggunakan mana-mana kaedah HTTP, dan beberapa kit alat (cth. HTMX) malah boleh mengendalikan perkara ini dengan lancar untuk pembangun.
GET and POST HTTP Methods
Permintaan GET menghantar data borang melalui rentetan pertanyaan URL. Ini bermakna bahawa hasil borang boleh ditanda buku, diulang dan juga dicache. Oleh sebab itu, permintaan GET biasanya hanya digunakan untuk tindakan yang meminta keadaan tanpa mengubah keadaan: carian, hasil pengisihan, penapisan hasil, penomboran, dsb.
Jika anda ingin melakukan tindakan yang mungkin membuat perubahan dalam aplikasi — cth., memproses troli beli-belah, menghantar mesej sokongan, memuat naik imej, dsb. — anda akan menggunakan kaedah HTTP POST. Permintaan POST ialah dianggap bukan idempoten, bermakna mereka tidak boleh di-cache dan tidak sepatutnya diulang, kerana ia mempunyai kesan sampingan. Kesan tersebut mungkin bermakna sisipan, perubahan atau pemadaman dalam pangkalan data, operasi sistem fail, permintaan web atau sesuatu yang lain.
Dalam untuk mengautomasikan pengendalian data borang, PHP menyediakan beberapa pembolehubah superglobal yang ia diisi daripada permintaan masuk. $_GET diisi dengan argumen rentetan pertanyaan URL dan boleh diisi daripada sebarang kaedah permintaan. $_POST, walau bagaimanapun, hanya diisi daripada kandungan permintaan POST yang dibuat menggunakan aplikasi jenis kandungan/x-www-form-urlencoded, yang mungkin kelihatan seperti ini:
title=HTTP?Verbs?Changes?in?PHP?8.4&url=https://example.org/blog/php-8.4-http-verbs&author=Just?Some?Guy&tags[0]=php&tags[1]=http
PHP akan ambil itu dan isikan superglobal $_POST supaya ia menjadi seperti berikut:
<?php $_POST = [ 'title' =>?'HTTP?Verbs?Changes?in?PHP?8.4', ????'url'?=>?'https://example.org/blog/php-8.4-http-verbs', ????'author'?=>?'Just?Some?Guy', ????'tags'?=>?['php',?'http'], ];
Fakta bahawa PHP melakukan ini di sebalik tabir untuk anda adalah sebahagian daripada perkara yang menjadikan PHP begitu mudah untuk dipelajari dan dimulakan.
Selain itu, ia juga boleh mengendalikan jenis kandungan multipart/form-data, yang membolehkan penyemak imbas memuat naik fail selain menyediakan data borang. Apabila ia berbuat demikian, ia akan mengisi $_FILES tambahan superglobal, yang menyediakan maklumat mengenai fail yang dimuat naik; pembangun kemudian boleh mengesahkan dan pra-memproses fail tersebut sebelum menyimpan mereka di lokasi tetap.
Kaedah HTTP Lain
Terdapat lebih banyak kaedah HTTP daripada GET dan POST, dan pembangun untuk web selalunya akan mahu memilih kaedah yang berbeza untuk memberikan konteks kepada apa mereka cuba lakukan:
- PUT sering digunakan untuk menunjukkan bahawa data harus menggantikan data sedia ada.
- PATCH sering digunakan untuk menunjukkan bahawa kemas kini separa kepada rekod sedia ada adalah sedang dibuat.
- DELETE digunakan untuk menunjukkan rekod atau kandungan yang diserahkan harus dipadamkan atau ditandakan sebagai dipadamkan.
Walaupun penyemak imbas tidak menyokong ini secara asli (belum!), banyak rangka kerja dan perpustakaan JavaScript melakukannya.
Tetapi ada tangkapan: PHP tidak mengendalikan permintaan ini secara automatik. Dalam sebenarnya, anda perlu mengendalikan penghuraian ini sepenuhnya sendiri, yang mana boleh menjadi sangat bermasalah apabila anda juga mula mengendalikan muat naik fail sebagai serta data borang. (Jangan sekali-kali melancarkan penghurai anda sendiri!)
Perubahan kepada Kata Kerja HTTP Bukan POST
PHP 8.4 memperkenalkan kaedah request_parse_body():
[$_POST,?$_FILES]?=?request_parse_body(?array?$options?=?null);
The
fungsi menghuraikan permintaan masuk dengan cara yang sama seperti yang selalu ada
untuk permintaan POST, tetapi membolehkan anda menentukan pembolehubah ganti kepada
simpan data borang dan muat naik fail dalam (atau tulis ganti superglobal,
jika anda lebih suka). Anda juga boleh mengubah gelagat penghurai melalui hujah $options, dengan lebih lanjut mengenainya di bawah.
Corak biasa mungkin:
<?php if?(in_array($_SERVER['REQUEST_METHOD'],?['PUT',?'PATCH',?'DELETE'],?true))?{ ????[$_POST,?$_FILES]?=?request_parse_body(); }
(Walaupun jika anda sedang menggunakan rangka kerja, harapkan rangka kerja menjaga butiran itu untuk anda.)
Itu secara literal keseluruhan ciri. Fungsi mudah untuk disediakan tingkah laku turnkey yang anda sudah biasa dengan sebagai pembangun PHP. Ia tidak menjadi lebih baik daripada ini!
Kata Kerja HTTP dalam PHP 8.4: Panduan Pembangun
Sekarang bahawa kita telah membincangkan perubahan kepada kata kerja HTTP dalam PHP 8.4, mari lihat beberapa contoh untuk cara anda boleh menggunakan dan menerapkannya kemas kini dalam kod anda.
Jenis Kandungan yang Disokong
Sama seperti permintaan POST, request_parse_body() hanya akan menghuraikan permintaan dengan kandungan berikut jenis:
- application/x-www-form-urlencoded
- multipart/form-data
Dalam kes permohonan/x-www- form-urlencoded, $_FILES-setara tatasusunan (indeks 1 dalam tatasusunan yang dikembalikan) akan kosong. Jika kandungan jenis tidak disokong, fungsi akan membuang InvalidArgumentException.
php://input
PHP membolehkan anda memeriksa kandungan permintaan mentah melalui aliran php://input. Ini ialah strim buffer yang boleh (sehingga PHP 7.4) dibaca beberapa kali. Walau bagaimanapun, apabila menerima multipart/form-data kandungan, PHP menjadi agak merosakkan, atas sebab yang sangat baik: penimbalan fail boleh menyebabkan kandungan fail ditulis ke cakera dua kali, membawa kepada lebih banyak memori, storan dan penggunaan I/O.
Oleh itu, request_parse_body() TIDAK MESTI dipanggil dua kali, kerana ia akan menggunakan php://input secara merosakkan.
$options Parameter
Parameter $options to request_parse_body() membolehkan anda mengubah tingkah lakunya pada masa jalan, bukannya bergantung pada konfigurasi php.ini berkod keras.
- Nyatakan post_max_size untuk saiz kandungan maksimum yang akan cuba dihuraikan.
- Nyatakan max_input_vars untuk mengehadkan bilangan pembolehubah bentuk yang akan cuba dihuraikan. parse.
- Nyatakan upload_max_filesize untuk mengehadkan saiz individu fail yang akan dikendalikannya.
- Nyatakan max_file_uploads untuk mengehadkan bilangan muat naik fail yang akan dikendalikannya.
- Nyatakan max_multipart_body_parts untuk mengehadkan gabungan muat naik fail dan pembolehubah data borang yang akan dihuraikan.
Atas ialah kandungan terperinci Perubahan Kata Kerja HTTP dalam PHP 8.4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Kaedah untuk mendapatkan ID sesi semasa dalam PHP adalah menggunakan fungsi session_id (), tetapi anda mesti menghubungi session_start () untuk berjaya mendapatkannya. 1. Panggil session_start () untuk memulakan sesi; 2. Gunakan session_id () untuk membaca ID Sesi dan mengeluarkan rentetan yang serupa dengan ABC123DEF456GHI789; 3 Jika pulangan kosong, periksa sama ada session_start () hilang, sama ada pengguna mengakses untuk kali pertama, atau sama ada sesi dimusnahkan; 4. ID Sesi boleh digunakan untuk pembalakan, pengesahan keselamatan dan komunikasi silang, tetapi keselamatan perlu diberi perhatian. Pastikan sesi itu diaktifkan dengan betul dan ID boleh diperolehi dengan jayanya.

Untuk mengekstrak substrings dari rentetan php, anda boleh menggunakan fungsi substr (), iaitu substra sintaks (string $ string, int $ start ,? int $ panjang = null), dan jika panjang tidak ditentukan, ia akan dipintas hingga akhir; Apabila memproses aksara berbilang bit seperti Cina, anda harus menggunakan fungsi MB_SUBSTR () untuk mengelakkan kod yang dihiasi; Jika anda perlu memintas rentetan mengikut pemisah tertentu, anda boleh menggunakan Eksploitasi () atau menggabungkan StrPOS () dan Substr () untuk melaksanakannya, seperti mengekstrak sambungan nama fail atau nama domain.

UnittestinginphpinvolvesveryingindividualcodeUnitsLikeFunctionsormethodstocatchbugsearlyandensurerurereliableFactoring.1) setupphpunitviacomposer, createatestdirectory, danconfigureautoloadandphpunit.xml.2soSteSteSteShpunit.xml.2)

Dalam PHP, kaedah yang paling biasa adalah untuk memecah rentetan ke dalam array menggunakan fungsi eksploit (). Fungsi ini membahagikan rentetan ke dalam pelbagai bahagian melalui pembatas yang ditentukan dan mengembalikan array. Sintaks adalah eksploit (pemisah, rentetan, had), di mana pemisah adalah pemisah, rentetan adalah rentetan asal, dan had adalah parameter pilihan untuk mengawal bilangan maksimum segmen. Contohnya $ str = "epal, pisang, oren"; $ arr = meletup (",", $ str); Hasilnya ialah ["Apple", "Bana

Jenis data JavaScript dibahagikan kepada jenis primitif dan jenis rujukan. Jenis primitif termasuk rentetan, nombor, boolean, null, undefined, dan simbol. Nilai -nilai tidak berubah dan salinan disalin apabila memberikan nilai, jadi mereka tidak mempengaruhi satu sama lain; Jenis rujukan seperti objek, tatasusunan dan fungsi menyimpan alamat memori, dan pembolehubah menunjuk objek yang sama akan mempengaruhi satu sama lain. Typeof dan Instanceof boleh digunakan untuk menentukan jenis, tetapi memberi perhatian kepada isu -isu sejarah TypeOfNull. Memahami kedua -dua jenis perbezaan ini dapat membantu menulis kod yang lebih stabil dan boleh dipercayai.

STD :: Chrono digunakan dalam C untuk memproses masa, termasuk mendapatkan masa semasa, mengukur masa pelaksanaan, titik masa operasi dan tempoh, dan masa analisis pemformatan. 1. Gunakan std :: chrono :: system_clock :: sekarang () untuk mendapatkan masa semasa, yang boleh ditukar menjadi rentetan yang boleh dibaca, tetapi jam sistem mungkin tidak membosankan; 2. Gunakan std :: chrono :: steady_clock untuk mengukur masa pelaksanaan untuk memastikan monoton, dan mengubahnya menjadi milisaat, saat dan unit lain melalui duration_cast; 3. Titik masa (time_point) dan tempoh (tempoh) boleh saling beroperasi, tetapi perhatian harus dibayar kepada keserasian unit dan zaman jam (Epoch)

ToAccessenVironmentVariablesInphp, useGetenv () orthe $ _envsuperglobal.1.getenv ('var_name') retrievesaspecificvariable.2. $ _ En V ['var_name'] AccessSvariablesifvariables_orderinphp.iniincludes "e" .setVariablesviacliwithvar = valuePhpscript.php, inapach

Apabila menghadapi masalah yang diketuai ('Lokasi: ...') tidak berfungsi, sebab -sebab dan penyelesaian yang sama adalah seperti berikut: 1. Terdapat output terlebih dahulu, menyebabkan tajuk gagal. Penyelesaiannya adalah untuk memastikan tiada output sebelum lompat, termasuk ruang, HTML atau ECHO; 2. Terdapat output yang berlebihan atau aksara BOM UTF-8 dalam memasukkan atau memerlukan fail. Pengekodan fail hendaklah diperiksa dan disimpan sebagai "UTF-8-BOM-FREE"; 3. Adalah disyorkan untuk menggunakan ob_start () untuk menghidupkan penampan output sebelum melompat, dan bekerjasama dengan ob_end_flush () untuk melambatkan output; 4. Selepas melompat, pastikan untuk menambah keluar untuk mengelakkan pelaksanaan kod berikutnya; 5. Pastikan panggilan fungsi header () adalah sebelum semua output.
