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
が次のようになったかどうかを考えてみましょう:は
each を実行する必要があります。要素を 1 つずつ文字列に変換します。
次に、$pcsリーリー
があり、それを文字列に変換しようとします。おっと!ループのある時点で、
$piece = ['two-a', 'two-b']警告が表示される理由は、
配列内に他の配列があるためです。これが起こる可能性はいくつかあります:
は直接記述できます。たとえば、$_REQUEST
$_REQUEST['example'] = ['a', 'b'];-
にアクセスすると、- $_REQUEST が ['a として自動的に入力されます。 '、'b ']
これは非常に重要な注意事項です: $_REQUEST
の内容についてと書くことができます。
PHP は、配列を表す入力内の特定の表記法を認識します。たとえば、誰かが URL
/your-page.php?example[]=a&example[]=b。
ユーザー入力を決して信用しないでください。
何らかの仮定を行うことは非常に危険です。入力はユーザーの制御下にあり、ユーザーはあなたの友達ではないかもしれません。