PHP警告:不能將陣列轉換為字串
P粉101708623
P粉101708623 2023-08-15 22:27:37
0
1
482
<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>
P粉101708623
P粉101708623

全部回覆(1)
P粉449281068

函數implode的定義與下面的程式碼(這只是一個範例,未經測試)非常粗略地等效:

function not_really_implode($glue, $pieces) {
   $result = '';
   $first = true;
   foreach ( $pieces as $piece ) {
      if ( ! $first ) {
          $result .= $glue;
      }
      $pieceAsString = (string)$piece;
      $result .= $pieceAsString;
      $first = false;
   }
   return $result;
}

關鍵點在於這一行程式碼:$pieceAsString = (string)$piece; - 為了組合陣列的元素,implode必須將每個元素逐一轉換為字串。

現在考慮一下如果$pieces看起來像這樣:

$pieces = [
   'one',
   ['two-a', 'two-b'],
   'three',
];

在我們的循環中的某個時刻,我們將有$piece = ['two-a', 'two-b'],並嘗試將其轉換為字串 - 糟糕!

因此,警告出現的原因是因為在你的$_REQUEST陣列中,存在其他陣列。這可能發生的幾種方式:

  1. $_REQUEST可以直接寫入。例如,有人可以寫入$_REQUEST['example'] = ['a', 'b'];
  2. PHP會辨識輸入中的某些表示法來表示陣列。例如,有人可以訪問URL/your-page.php?example[]=a&example[]=b$_REQUEST將自動填入為['a', 'b ']

這帶來了一個非常重要的提醒:永遠不要相信使用者輸入! 對於$_REQUEST中的內容做任何假設都非常危險,因為該輸入在用戶的控制之下,而用戶可能並非你的朋友。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板