Menggunakan PHP "Awas: pembolehubah tidak ditentukan", "Awas: indeks tidak ditentukan", "Amaran: kunci tatasusunan tidak ditentukan" dan "Awas: tidak ditentukan offset"
P粉851401475
2023-08-23 11:45:50
<p>Saya sedang menjalankan skrip PHP dan terus menerima ralat seperti ini: </p>
<blockquote>
<p>Notis: Pembolehubah tidak ditentukan: my_variable_name dalam C:wampwwwmypathindex.php pada baris 10</p>
<p>Nota: Indeks tidak ditentukan: my_index C:wampwwwmypathindex.php baris 11</p>
<p>Amaran: Kunci tatasusunan 'my_index' tidak ditakrifkan dalam C:wampwwwmypathindex.php pada baris 11</p>
</blockquote>
<p>Barisan 10 dan 11 kelihatan seperti ini: </p>
<pre class="brush:php;toolbar:false;">echo "Nilai pembolehubah saya ialah: " $my_variable_name;
echo "Nilai indeks saya ialah: " $my_array["my_index"];</pre>
<p>Apakah maksud mesej ralat ini? </p>
<p>Mengapa ia muncul secara tiba-tiba? Saya telah menggunakan skrip ini selama bertahun-tahun dan tidak pernah mengalami sebarang masalah. </p>
<p>Bagaimana untuk membetulkannya? </p>
<hr />
<blockquote>
<p><sub><strong>Ini adalah soalan rujukan umum</strong> supaya orang ramai boleh memautkan kepada soalan pendua tanpa perlu menerangkan soalan itu berulang kali. Saya rasa ini perlu kerana kebanyakan jawapan dunia sebenar kepada soalan ini adalah sangat spesifik. </sub></p>
<p><sub>Perbincangan meta berkaitan:</sub></p>
<ul>
<li><sub>Apakah yang perlu saya lakukan mengenai soalan pendua? </sub></li>
<li><sub>Adakah "soalan rujukan" masuk akal? </sub></li>
</ul>
</blockquote><p><br /></p>
Cuba ini
Atau, sebagai penyelesaian cepat dan kotor:
Nota tentang sesi:
Apabila menggunakan sesi, anda perlu meletakkan
session_start();
dalam semua fail yang menggunakan sesi.http://php.net/manual/en/features.sessions .php
Mesej ralat ini bertujuan untuk membantu Pengaturcara PHP mencari kesilapan atau kesilapan semasa mengakses pembolehubah (atau elemen tatasusunan) yang tidak wujud. Jadi pengaturcara yang baik:
Notis/Amaran: Pembolehubah tidak ditentukan
Walaupun PHP tidak memerlukan pengisytiharan berubah-ubah, ia mengesyorkannya untuk mengelakkan beberapa lubang keselamatan atau pepijat di mana orang lupa untuk memberikan nilai kepada pembolehubah yang digunakan kemudian dalam skrip. PHP mengeluarkan ralat tahap
E_WARNING
apabila pembolehubah tidak diisytiharkan.Amaran ini membantu pengaturcara mengesan nama pembolehubah yang salah eja atau jenis ralat yang serupa (seperti memberikan nilai kepada pembolehubah dalam keadaan yang menilai kepada palsu ). Selain itu, mungkin terdapat masalah lain dengan pembolehubah yang tidak dimulakan. Seperti yang dinyatakan dalam manual PHP ,
Ini bermakna pembolehubah mungkin mendapat nilai daripada fail yang disertakan dan nilai itu akan digunakan dan bukannya
null
yang dijangkakan untuk mengakses pembolehubah yang tidak dimulakan, yang mungkin membawa kepada keputusan yang tidak dapat diramalkan. Untuk mengelakkan ini, adalah lebih baik untuk memulakan semua pembolehubah dalam fail PHP sebelum digunakan.Kaedah menangani masalah:
Syor: Isytihar setiap pembolehubah sebelum menggunakannya. Dengan cara itu anda hanya akan melihat ralat ini jika anda benar-benar membuat kesilapan cuba menggunakan pembolehubah yang tidak wujud - itulah sebabnya mesej ralat ini wujud.
Kes khas apabila pembolehubah ditakrifkan tetapi tidak kelihatan dalam fungsi. Fungsi dalam PHP mempunyai skop pembolehubah mereka sendiri, jika anda perlu menggunakan pembolehubah luaran dalam fungsi, nilainya mesti diluluskan sebagai parameter fungsi:
Sekat ralat menggunakan operator penyatuan null. Tetapi ingat, dengan cara ini PHP tidak akan dapat memberitahu anda bahawa anda menggunakan nama pembolehubah yang salah.
Untuk versi PHP yang lebih lama (
Sila ambil perhatian bahawa ia pada asasnya masih merupakan penindasan ralat, walaupun hanya untuk ralat tertentu. Oleh itu, ia mungkin menghalang PHP daripada membantu anda dengan menandakan pembolehubah seragam.
Gunakan @operator untuk menyekat ralat. Meninggalkan sini atas sebab sejarah, tetapi serius, ini tidak sepatutnya berlaku.
Nota: Sangat disyorkan untuk hanya melaksanakan perkara 1.
Nota: indeks tidak ditentukan/offset tidak ditentukan/amaran: kunci tatasusunan tidak ditentukan
Notis/amaran ini berlaku apabila anda (atau PHP) cuba mengakses indeks tatasusunan yang tidak ditentukan.
Tatasusunan dalaman
Sikap harus betul-betul sama apabila berurusan dengan tatasusunan dalaman yang ditakrifkan dalam kod: hanya mulakan semua kekunci sebelum digunakan. Dengan cara ini, pepijat akan melakukan tugas yang dimaksudkan: memberitahu pengaturcara tentang ralat dalam kod mereka. Jadi kaedahnya adalah sama:
Disyorkan: Isytiharkan elemen tatasusunan anda:
Satu kes khas ialah apabila sesetengah fungsi mengembalikan tatasusunan atau nilai lain (cth.
null
或false
). Kemudian anda mesti melakukan ujian sebelum cuba mengakses elemen tatasusunan, sepertiTatasusunan luaran
Untuk tatasusunan luaran (seperti
$_POST
/$_GET
/$_SESSION
atau input JSON), keadaannya agak berbeza, kerana pengaturcara tidak mempunyai kawalan ke atas kandungan tatasusunan tersebut. Oleh itu, adalah munasabah untuk memeriksa sama ada kunci tertentu wujud atau menetapkan nilai lalai kepada kunci yang hilang.Apabila skrip PHP mengandungi borang HTML, adalah wajar bahawa tiada kandungan borang apabila ia mula dimuatkan. Jadi skrip sedemikian harus menyemak sama ada borang telah dihantar
Sesetengah elemen borang HTML (seperti kotak pilihan) tidak akan dihantar ke pelayan jika ia dinyahtandai. Dalam kes ini, terdapat sebab untuk menggunakan operator penggabungan nol untuk menetapkan nilai lalai
Elemen atau kuki STRING QUERY pilihan hendaklah dikendalikan dengan cara yang sama
Tetapi tugasan harus dilakukan pada awal skrip. Sahkan semua input, berikannya kepada pembolehubah setempat dan gunakannya sepanjang kod anda. Oleh itu, setiap pembolehubah yang anda akses akan wujud dengan sengaja.
Berkaitan: