Amaran PHP: tidak boleh menukar tatasusunan kepada rentetan
P粉101708623
2023-08-15 22:27:37
<p>Saya mempunyai kod ini dalam fail saya: </p>
<pre class="brush:php;toolbar:false;">if (is_array($_REQUEST))
$cepl=implode(' ', $_REQUEST);</pre>
<p>Setiap beberapa hari saya mendapat amaran berikut dalam log php:
Amaran PHP: Menukar tatasusunan kepada rentetan</p> dalam /file.php, baris 76
<p>Barisan 76 ialah: $cepl=implode(' ', $_REQUEST);</p>
<p>Saya tidak dapat mengetahui apa yang menyebabkan amaran ini? ! </p>
Takrifan fungsi
implode
adalah sangat kasar bersamaan dengan kod berikut (ini hanyalah contoh, tidak diuji):$pieceAsString = (string)$piece;
- Untuk menggabungkan elemen tatasusunan,setiap elemen mesti ditukar kepada rentetan satu demi satu.
$pieceAsString = (string)$piece;
- 为了组合数组的元素,implode
Sekarang fikirkan jika kelihatan seperti ini:Pada satu ketika dalam gelung kami, kami akan mempunyai
$pieces
dan cuba tukarkannya kepada rentetan - oops!Jadi sebab amaran muncul adalah kerana di dalam
$piece = ['two-a', 'two-b']
arrayanda, terdapat tatasusunan lain. Beberapa cara ini boleh berlaku:
Boleh tulis terus. Sebagai contoh, seseorang boleh menulis$_REQUEST
$_REQUEST['example'] = ['a', 'b'];
$_REQUEST
可以直接写入。例如,有人可以写入$_REQUEST['example'] = ['a', 'b'];
mengenal notasi tertentu/your-page.php?example[]=a&example[]=b
dan['a', 'b']
./your-page.php?example[]=a&example[]=b
,$_REQUEST
将自动填充为['a', 'b']
Ini membawa peringatan yang sangat penting:sebarang andaian tentang kandungan dalam , kerana
$_REQUEST
input adalah di bawah kawalan pengguna, dan pengguna mungkin bukan rakan anda.