Heim  >  Fragen und Antworten  >  Hauptteil

PHP-Warnung: Array kann nicht in String konvertiert werden

<p>Ich habe diesen Code in meiner Datei: </p> <pre class="brush:php;toolbar:false;">if (is_array($_REQUEST)) $cepl=implode('', $_REQUEST);</pre> <p>Alle paar Tage erhalte ich die folgende Warnung im PHP-Protokoll: PHP-Warnung: Array wird in string</p> in /file.php, Zeile 76, konvertiert <p>Zeile 76 lautet: $cepl=implode(' ', $_REQUEST);</p> <p>Ich kann nicht herausfinden, was diese Warnung verursacht? ! </p>
P粉101708623P粉101708623402 Tage vor387

Antworte allen(1)Ich werde antworten

  • P粉449281068

    P粉4492810682023-08-16 17:52:28

    函数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中的内容做任何假设都非常危险,因为该输入在用户的控制之下,而用户可能并非你的朋友。

    Antwort
    0
  • StornierenAntwort