ホームページ バックエンド開発 PHPチュートリアル PHPのヘッダーはジャンプできません

PHPのヘッダーはジャンプできません

May 14, 2018 pm 03:53 PM

警告の解決策: ヘッダー情報を変更できません - ヘッダーはすでに送信されています...

頻繁にプロンプ​​トが表示されます: ヘッダー情報を変更できません - ヘッダーはすでに (...) によって送信されています。実際、必要な効果は得られていますが、このエラー メッセージは不快に思えます。総合的に使用することで得られる解決策は、PHP タグの先頭に

1 を追加することです。ページ;

2. 返された Add ob_end_flush();

この方法で、エラー メッセージの現実をブロックすることができます

他の状況でも効果があるかもしれません

: 「警告: ヘッダー情報を変更できません - ヘッダーはすでに .... によって送信されています。」
PHP プログラムの実行時にこの警告が表示される場合: 「警告: ヘッダー情報を変更できません - ヘッダーはすでに .... によって送信されています。」

少数以下のユーザーの投稿に基づいたメモ:
いくつかの解決策があります:

1. 空白行:
呼び出し元の php スクリプトの後に空白行がないことを確認します。
< があるかどうかを確認します。 ;? php... ?> 特に include ファイルや require ファイルの後には空白行はありません。多くの問題は、これらの空白行によって引き起こされます。

2. exit ステートメントを使用する (解決するには exit を使用します):
ヘッダー ステートメントの後に exit() を追加する

; 3. PHP にはこの迷惑な問題があり、特定のページにリダイレクトする前に HTML が PHP コードまたはヘッダー変更の前にある場合、「警告: ヘッダー情報は変更できません - ヘッダーはすでに ... によって送信されています。」というメッセージが表示されます。ブラウザに出力すると、ヘッダーは設定され、変更できません。 したがって、問題を回避するには 2 つの方法があります:

3a. JavaScript を使用します (JavaScript で解決します):

<? echo "<script> self.location(\"file.php\");</script>"; ?>
ログイン後にコピー

スクリプトであるため、ヘッダーは変更されません。 Javascriptの実行まで
JavaScriptを使用してヘッダーを置き換えることができます。しかし、上記のコードは正常に実行されませんでした...さらに、このメソッドを使用するには、ブラウザーが Javascript をサポートしている必要があることに注意してください。


3b. 出力バッファリングを使用します (出力キャッシュで解決します):

<?php ob_start(); ?> 
... HTML codes ... 
<?php 
... PHP codes ... 
header ("Location: ...."); 
ob_end_flush(); 
?>
ログイン後にコピー

Thisただし、JavaScript メソッドはブラウザで Javascript が有効であることを前提としているため、ob_end_flush() ステートメントまではヘッダーを自由に変更できます。 、出力前にサーバーに出力バッファを保存するためのオーバーヘッドがありますが、最新のハードウェアでは、ユーザーがブラウザで Javascript を有効にしていることが確実にわかっている場合は、JavaScript ソリューションの方が優れていると思います。

上記のコードと同様に、このメソッドはページ生成時にキャッシュを行い、ヘッダーが出力された後にヘッダーを出力できるようにします。このサイトのウィッシュボードでは、この方法を使用してヘッダーの問題を解決しています。
バックグラウンド管理またはフォーラムでページをクリックすると、

警告: ヘッダー情報を変更できません - ヘッダーは既に送信されています...

このタイプのステートメントがページの上部に表示されます。これは setcookie ステートメントの問題によるものです。

Cookie の使用には次のような制限があります。
1. setcookie を呼び出す記述は タグの前に配置する必要があります

2. setcookie を呼び出す前に、echo を使用することはできません

3.ページがリロードされると、プログラムに Cookie が表示されます
4. データがブラウザに出力される前に setcookie 関数を送信する必要があります
5.…
上記の制限に基づいて、setcookie() 関数を実行するときに、多くの場合、次のような問題が発生します。 「インデックスが未定義です」、「ヘッダー情報を変更できません - ヘッダーはすでに送信されています」...などの問題。「ヘッダー情報を変更できません - ヘッダーはすでに送信されています」エラーを解決する方法は、ブラウザへのデータ出力を遅らせることです。したがって、プログラムの先頭に ob_start(); 関数を追加できます。これで解決します。

4.set Output_buffering = On in php.ini ( php.ini で output_buffering をオンにします)
set Output_buffering = On はすべてのファイルの出力バッファリングを有効にしますが、このメソッドのパフォーマンスは php の出力に依存します。どの Web サーバーで作業しているか、どのような種類のスクリプトを使用しているか。

この方法は理論的には 3b 方法と同じです。ただし、この方法ではすべての PHP プログラムの出力キャッシュがオンになるため、サーバーのパフォーマンスやコードの複雑さによっては、PHP の実行効率に影響を与える可能性があります。


昨日、PHP を使用してファイルをダウンロードするためのコードを記述したいと思いました。HTTP プロトコルの設定方法を知りたくなかったので、header() 関数の例を見つけるために直接 php.NET にアクセスしました。コードのセクションを直接コピーしました

<?php 
$file = &#39;filetest.txt&#39;;//filetest.txt文件你随便写点东西进去就好了 
header("Content-Disposition: attachment; filename=" . urlencode($file));   
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-Description: File Transfer");            
header("Content-Length: " . filesize(&#39;filetest.txt&#39;)); 
flush(); // this doesn&#39;t really matter.
$fp = fopen($file, "r"); 
while (!feof($fp)) 
{ 
    echo fread($fp, 65536); 
    flush(); // this is essential for large downloads 
}
fclose($fp);
?>
ログイン後にコピー

运行了一下发现不行,一直报错:Warning: Cannot modify header information - headers already sent by (output started at E:\xampp\htdocs\test\downloadfile\file_download.php:1) in E:\xampp\htdocs\test\downloadfile\file_download.php on line 3

我很看了很久,文件一开始就直接是header代码了,没任何输出怎么会说已有字符输出了呢?后来上网查到别人给的提示,才发现,原来我创建文件的时候是直接用记事本存储为UTF8, 原来这样也会出错

----------------以下是引用他人的建议 --------------------

方法一: 
在PHP里Cookie的使用是有一些限制的。 
1、使用setcookie必须在标签之前 
2、使用setcookie之前,不可以使用echo输入内容 
3、直到网页被加载完后,cookie才会出现 
4、setcookie必须放到任何资料输出浏览器前,才送出 
..... 
由于上面的限制,在使用setcookie()函数时,学会遇到 "Undefined index"、"Cannot modify header information - headers already sent by"…等问题,解决办法是在输出内容之前,产生cookie,可以在程序的最上方加入函数 ob_start();

ob_start :打开输出缓冲区 
函数格式:void ob_start(void) 
说明:当缓冲区激活时,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区。为了输出缓冲区的内容,可以使用 ob_end_flush()或flush()输出缓冲区的内容。


方法二: 
解 决Warning: Cannot modify header information - headers already sent by ...... 前几天装了个php的大头贴系统测试,发现报错Warning: Cannot modify header information - headers already sent by ......
今天又装openads,还是出现这个问题。怒了。上网找了半天,有人说要在文件开头写上 
ob_start(); 
失败。 
后来打开 php.ini 然后把 output_buffering 设为 on 。重起appache,OK。看来这才是解决办法。

特别注意:(我就是看了这个才解决问题的) 
如果使用utf-8编码,一定要去掉UTF-8中的BOM,这都是因为utf-8编码文件含有的bom原因,而php4,5都是不支持bom的。去掉 bom,可以用Notepad++打开转换一下。(我就是看了这个才解决问题的)

用PHP的ob_start(); 控制您的浏览器cache 。我另外单独转载了一篇文章关于用PHP的ob_start();控制您的浏览器cache的文章 

更多php中header无法跳转相关文章请关注PHP中文网!

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? PHPでの安全なパスワードハッシュ(例:Password_hash、password_verify)を説明します。 MD5またはSHA1を使用してみませんか? Apr 17, 2025 am 12:06 AM

PHPでは、Password_hashとpassword_verify関数を使用して安全なパスワードハッシュを実装する必要があり、MD5またはSHA1を使用しないでください。 1)password_hashセキュリティを強化するために、塩値を含むハッシュを生成します。 2)password_verifyハッシュ値を比較して、パスワードを確認し、セキュリティを確保します。 3)MD5とSHA1は脆弱であり、塩の値が不足しており、最新のパスワードセキュリティには適していません。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか? Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPの永続的な関連性:それはまだ生きていますか? PHPの永続的な関連性:それはまだ生きていますか? Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHP対その他の言語:比較 PHP対その他の言語:比較 Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

See all articles