国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

PHP警告:不能將陣列轉(zhuǎn)換為字串
P粉101708623
P粉101708623 2023-08-15 22:27:37
0
1
631
<p>我在我的文件中有這段程式碼:</p> <pre class="brush:php;toolbar:false;">if (is_array($_REQUEST)) $cepl=implode(' ', $_REQUEST);</pre> <p>每隔幾天我在php日誌中收到以下警告: PHP 警告:在 /file.php 的第76行,將陣列轉(zhuǎn)換為字串</p> <p>第76行是:$cepl=implode(' ', $_REQUEST);</p> <p>我找不出是什麼原因?qū)е铝诉@個警告? ! </p>
P粉101708623
P粉101708623

全部回覆(1)
P粉449281068

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

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;
}

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

現(xiàn)在考慮一下如果$pieces看起來像這樣:

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

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

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

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

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

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板