2017-11-22 13 views
0

私は、MySQLを使用してデータベースからいくつかの情報を抽出しています。結果をAjax関数に送信し、その結果をWebページに表示します。この特定のケースで「ヘッダーが既に送信されました」原因

 $views = $connection->execute("SELECT profilePic FROM users"); 
     foreach($views as $views) 
     { 
      echo "<tr><td><img src='".$views['profilePic']."' /></td></tr>"; 
     } 

"ヘッダが既に送信された" という警告があるため、コードのこの部分の表示されます:解析されたときに

<img src='".$views['profilePic']."' /> 

次のようになります。

ここ

は私のPHPコードです
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPgAAAD4CAYAAADB0SsLAAAgAElE [TRUNCATED] ..." > 

img部分を削除すると、警告:

$views = $connection->execute("SELECT profilePic FROM users"); 
    foreach($views as $views) 
    { 
     //this throws no warning: 
     echo "<tr><td></td></tr>"; 
    } 

正確に警告を発するのは誰ですか?どのルールが適用されていますか?

+0

ルールは非常に簡単です。ヘッダーを送信する前に出力を送信することはできません。それでおしまい。それ以上のことはありません。後で出力を送信する場合は、[出力バッファリング](http://php.net/manual/ro/function.ob-start.php)を使用してください。あるいは単に出力に変数を格納し、ヘッダーを送信した後に送信するだけです。 – Andrew

+0

@Andrewこれは私が最初に考えたものですが、エコーだけを送信すると警告が発生しないのはなぜですか?​​ "それが私を困惑させます。 – niandrei

答えて

2

あなたのPHPコードがコントローラからのものである場合、警告を引き起こす「エコー」。 ビューテンプレートにHTMLコードを出力するすべての操作を行う必要があります。

$this->set(compact('views')); 

これは、ビューの配列を関数ビューテンプレートで使用できるようにします。

+0

コードはコントローラにあります。しかし、私は "​​"と警告しているだけです。私がimgパートを追加したときだけ。 – niandrei

+1

@niandrei PHPの出力バッファリングが有効になっているため、イメージ文字列がバッファサイズを超えているため、出力が生成されますが、その短い文字列はバッファに収まり、CakePHPs応答エミッタは応答を送信します。短いストーリー、[**コントローラは_never_エコーデータ**](https://stackoverflow.com/questions/42816125/cakephp-3-4-2-testing-posts-response-always-returning-null/42819969# 42819969)。 – ndm

+0

@ndmの説明に感謝します! – niandrei

関連する問題