PHP警告:不能將陣列轉換為字串
P粉101708623
2023-08-15 22:27:37
<p>我在我的文件中有這段程式碼:</p>
<pre class="brush:php;toolbar:false;">if (is_array($_REQUEST))
$cepl=implode(' ', $_REQUEST);</pre>
<p>每隔幾天我在php日誌中收到以下警告:
PHP 警告:在 /file.php 的第76行,將陣列轉換為字串</p>
<p>第76行是:$cepl=implode(' ', $_REQUEST);</p>
<p>我找不出是什麼原因導致了這個警告? ! </p>
函數
implode
的定義與下面的程式碼(這只是一個範例,未經測試)非常粗略地等效:關鍵點在於這一行程式碼:
$pieceAsString = (string)$piece;
- 為了組合陣列的元素,implode
必須將每個元素逐一轉換為字串。現在考慮一下如果
$pieces
看起來像這樣:在我們的循環中的某個時刻,我們將有
$piece = ['two-a', 'two-b']
,並嘗試將其轉換為字串 - 糟糕!因此,警告出現的原因是因為在你的
$_REQUEST
陣列中,存在其他陣列。這可能發生的幾種方式:$_REQUEST
可以直接寫入。例如,有人可以寫入$_REQUEST['example'] = ['a', 'b'];
/your-page.php?example[]=a&example[]=b
,$_REQUEST
將自動填入為['a', 'b ']
。這帶來了一個非常重要的提醒:永遠不要相信使用者輸入! 對於
$_REQUEST
中的內容做任何假設都非常危險,因為該輸入在用戶的控制之下,而用戶可能並非你的朋友。