今天给各位分享headers already sent by的知识,其中也会对drag a column header here to进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
在网页开发的过程中,我们经常会遇到各种各样的问题。其中,“Headers already sent by”错误是许多开发者头疼的问题之一。这个问题看似简单,但却可能导致网站无法正常运行。本文将带领大家深入了解“Headers already sent by”错误的原因、解决方法以及预防措施。
什么是“Headers already sent by”错误?
“Headers already sent by”错误是一种常见的PHP错误,通常表现为以下两种形式:
1. 错误提示1:
“`
Headers already sent by (output started at /path/to/file.php:5)
“`
2. 错误提示2:
“`
Cannot modify header information – headers already sent by (output started at /path/to/file.php:5)
“`
这两种错误提示都表明,在输出任何内容之前,服务器已经发送了HTTP头信息。这会导致后续的HTTP头信息无法发送,从而导致页面无法正常显示。
为什么会出现“Headers already sent by”错误?
以下是一些可能导致“Headers already sent by”错误的原因:
1. 在PHP文件中直接输出内容:
在PHP文件中,如果在输出任何HTML内容之前直接使用echo、print或print_r等函数输出内容,就会导致该错误。例如:
“`php
echo ‘Hello, world!’;
header(‘Location: http://www.example.com’);
?>
“`
上面的代码会在输出“Hello, world!”后发送HTTP头信息,导致后续的header()函数无法执行。
2. PHP文件中存在空白字符:
在PHP文件的开头或中间存在空白字符(如空格、制表符等),也可能导致该错误。
3. 文件编码问题:
PHP文件使用错误的编码(如UTF-8和GBK混用)也可能导致该错误。
4. PHP配置问题:
在某些情况下,PHP配置文件(php.ini)中的一些设置可能导致该错误。
如何解决“Headers already sent by”错误?
以下是一些解决“Headers already sent by”错误的方法:
1. 检查PHP文件中的输出内容:
确保在发送HTTP头信息之前,不要在PHP文件中输出任何内容。可以将输出内容移到header()函数之后。
| 代码示例 | 修改后的代码 |
| ——– | ———— |
| “`php | “`php |
|
| echo ‘Hello, world!’; | header(‘Content-Type: text/html; charset=UTF-8’); echo ‘Hello, world!’; |
| header(‘Location: http://www.example.com’); | header(‘Location: http://www.example.com’); |
| “` | “` |
2. 检查文件编码:
确保PHP文件的编码为UTF-8,并确保服务器配置正确。
3. 检查PHP配置文件:
查看php.ini文件中的output_buffering和output_handler配置项,确保它们设置正确。
4. 检查服务器日志:
查看服务器日志,查找导致错误的文件和行号。
5. 使用Xdebug:
如果上述方法都无法解决问题,可以尝试使用Xdebug进行调试。Xdebug可以帮助你找到导致错误的代码行。
如何预防“Headers already sent by”错误?
以下是一些预防“Headers already sent by”错误的方法:
1. 遵循良好的编码规范:
在编写PHP代码时,遵循良好的编码规范,避免在输出内容之前直接输出其他内容。
2. 使用IDE进行代码编辑:
使用集成开发环境(IDE)进行代码编辑,可以帮助你更好地管理代码和发现潜在的错误。
3. 定期检查代码:
定期检查代码,确保没有输出任何内容之前发送HTTP头信息。
4. 使用版本控制系统:
使用版本控制系统(如Git)管理代码,可以帮助你跟踪代码变更,并快速定位问题。
5. 学习相关知识:
深入学习PHP相关知识,了解HTTP协议和PHP配置,有助于你更好地预防和解决此类问题。
“Headers already sent by”错误是网页开发中常见的问题之一。了解其产生的原因、解决方法以及预防措施,有助于我们更好地应对这类问题。在开发过程中,遵循良好的编码规范、使用合适的工具和定期检查代码,可以有效预防此类错误的发生。希望本文能对你有所帮助!
…header information – headers already sent by
出现这种情况,和数据库没有关系
可能的原因大概有二:
第一、 header函数之前,不能有任何输出,包括html代码、css代码、js代码、空格、换行等客户端代码,并且不能有php中的 echo、print、print_r等等输出代码。
第二、文件格式错误,如
勾选了签名,这种情况一般是出现在utf-8编码的文件中!
先检测上面两种情况!
…header information – headers already sent的问题
综合使用得到的解决方法是
1在页面顶部的php标签中加入ob_start();
2在返回的信息下面加入ob_end_flush();
这样就可以屏蔽错误信息的现实了
另外转一下其他人的方法,也许在其他情况下也会有效
If you got this message:”Warning: Cannot modify header information- headers already sent by….”
如果在执行php程序时看到这条警告:”Warning: Cannot modify header information- headers already sent by….”
Few notes based on the following user posts:
有以下几种解决方法:
1. Blank lines(空白行):
Make sure no blank line after<?php…?> of the calling php script.
检查有<?php…?>后面没有空白行,特别是include或者require的文件。不少问题是这些空白行导致的。
2. Use exit statement(用exit来解决):
Use exit after header statement seems to help some people
在header后加上exit();
header(“Location: xxx”);
exit();
3. PHP has this annoying problem, if your HTML goes before any PHP code or any header modification before redirecting to certain page, it'll said”Warning: Cannot modify header information- headers already sent by….” Basically anytime you output to browser, the header is set and cannot be modified. So two ways to get around the problem:
3a. Use Javascript(用Javascript来解决):
<? echo”<script> self.location(\”file.php\”);</script>”;?>
Since it's a script, it won't modify the header until execution of Javascript.
可以用Javascript来代替header。但是上面的这段代码我没有执行成功…另外需要注意,采用这种方法需要浏览器支持Javascript.
3b. Use output buffering(用输出缓存来解决):
<?php ob_start();?>
… HTML codes…
<?php
… PHP codes…
header(“Location:….”);
ob_end_flush();
?>
This will save the output buffer on server and not output to browser yet, which means you can modify the header all you want until the ob_end_flush() statement. This method is cleaner than the Javascript since Javascript method assumes the browser has Javascript turn on. However, there are overhead to store output buffer on server before output, but with modern hardware I would imagine it won't be that big of deal. Javascript solution would be better if you know for sure your user has Javascript turn on on their browser.
就像上面的代码那样,这种方法在生成页面的时候缓存,这样就允许在输出head之后再输出header了。本站的许愿板就是采用这种方法解决的header问题。
在后台管理或者有时候在论坛,点击一个页面,页顶会出现
Warning: Cannot modify header information- headers already sent by….
这类语句,造成这个原因是因为setcookie语句的问题。
cookie本身在使用上有一些限制,例如:
1.呼叫setcookie的叙述必须放在<html>标签之前
2.呼叫setcookie之前,不可使用echo
3.直到网页被重新载入后,cookie才会在程式中出现
4.setcookie函数必须在任何资料输出至浏览器前,就先送出
5.……
基於上面这些限制,所以执行setcookie()函数时,常会碰到”Undefined index”、”Cannot modify header information- headers already sent by”…等问题,解决”Cannot modify header information- headers already sent by”这个错误的方法是在产生cookie前,先延缓资料输出至浏览器,因此,您可以在程式的最前方加上ob_start();这个函数。这样就可以解决了。
4.set output_buffering= On in php.ini(开启php.ini中的output_buffering)
set output_buffering= On will enable output buffering for all files. But this method may slow down your php output. The performance of this method depends on which Web server you're working with, and what kind of scripts you're using.
这种方法和3b的方法理论上是一样的。但是这种方法开启了所有php程序的输出缓存,这样做可能影响php执行效率,这取决于服务器的性能和代码的复杂度。
昨天想用PHP写一段下载文件的代码,因为不想得怎么设置HTTP协议就直接到php.net上找header()函数的事例,很多代码,我直接拷贝了一段,
<?php
$file='filetest.txt';//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('filetest.txt'));
flush();// this doesn'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必须在<html>标签之前
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的文章
—————-END——————–
求助,wordpress出现错误
一、忘记了用户密码同时邮件找回功能不起作用
问题描述:
你丢失了你的WordPress管理员密码,也尝试过点“忘记密码”进去填写了用户名和 Email地址。但是却没有收到重设密码的邮件。
这里有两个很简单的方法来重设你的 WordPress管理员密码:
方法 1: phpMyAdmin
1.如果您是 cPanel空间用户,登录 cPanel后,点击 Database(数据库)下的 phpMyAdmin
2.选择你的 WordPress数据库。例如 Username_wrdp1
3.找到 wp_users,点击 Browse
4.找到你的用户名然后点击 Edit。
5.通过在 user_pass里写入新的值来重设你的密码。记住,是有大小写区分的。
6.完成上面一步之后,点击 Function的下拉菜单,从选项中选择 MD5
7.在页面的最低端,点击 Go按钮。
方法2:通过 FTP
1.登录你的 FTP账户。
2.找到../wp-content/themes/(你的主题文件)/目录,然后下载 functions.php文件。
3.打开 functions.php然后在第一个<?php后面加上下面一行代码:
wp_set_password('YourNewPassword',1);
把 YourNewPassword这个值换成你想要的密码。这个代码里的 1代表的是 wp_users表上的用户 ID。
4.把改好的 functions.php再次上传到 FTP当中。
5.当你可以登录到 WordPress的时候,再去删掉那行代码。
二、WordPress控制面板(Dashboard)不能正常显示
问题描述:
WordPress控制面版里面的 CSS未能显示出来,页面上的链接很乱。
解决方法1:端口和防火墙
检查一下你的网络连接是经过端口和防火墙的。有一些端口和防火墙是会过滤到 CSS的,所以有 CSS的地方会显示不正常。试着清除端口和防火墙的 cookies和缓存,然后 Ctrl+ F5重新载入页面。
解决方法2:升级你的 WordPress插件
如果你有一些插件是用来代替默认的控制面板的,像 Admin Drop Down Menu和 Lighter Menus,那么就升级一下这些插件,如果还是不起作用,那就禁用试试看。
三、警告Warning:Cannot modify header information– headers already sent by
问题描述:
在升级WordPress到新的版本或者是全新安装之后,在浏览器里遇到这样的错误:Warning:Cannot modify header information– headers already sent by(output started at/path/blog/wp-config.php:34)
解决办法:删掉 wp-config.php里面多余的空格,空行以及其他无用信息。
1.通过 FTP下载 wp-config.php文件
2.打开 wp-cinfig.php
3.去除<?php前面的所有空格。
4.确保第一个字段是<?php并且<?php在第一行而且中间没有空格。
5.去除?>后的所有空格。
6.确保最后的字符是?>,放到最后一行,确保中间没有空格。
这个错误可以发生在其他的文件。仔细阅读错误信息,上面有记录出错的文件的位置的。
四、WordPress博客页面和控制面板一片空白
问题描述:
这个错误一般是发生在安装了新的主题,或者是升级到了新的版本。打开博客就是一个空白页面。在控制面板那里也会遇到这样的情况,这样就没有办法进入到控制面板了。
解决方法1:通过 FTP重新命名当前安装的主题。
把当前安装的主题文件夹重命名的话,会强制 WordPress自动选择默认的主题,然后就可以正常载入了。
1.通过 FTP找到 wp-contents/themes文件夹。
2.重命当前安装的主题文件夹。例如:把 twentytwenty命名为 twentytwenty-temp
3.登录到你的 WordPress后台。
4.检查一下你的主题和你现在运行的 WordPress是否兼容。
5.检查一下你的主题是否包含不能够被执行的代码。
解决方法2.:通过 FTP重设插件文件夹
1.通过 FTP找到 wp-contents文件夹。
2.把 plugins文件夹重命名为 plugins-temp
3.在同一目录下创建一个新的文件夹为 plugins
4.再次登录一下 WordPress控制面板。
5.把你的插件从 plugins-temp移到 plugin,然后逐个重新激活。
6.检查一下是否有插件与当前的 WordPress不兼容。
五、致命错误:Fatal error: Allowed memory size of 33554432 bytes exhausted
问题描述:
当你在上传照片的时候,遇到 Fatal error: Allowed memory size of 33554432 bytes exhausted错误信息。为了解决这个问题,应该尝试去增加分配到 PHP的内存。你可以把限制设置为 32MB, 64MB, 128MB或者是 256MB,这个要看你的主机商是否支持。
解决方法1:编辑 php.ini
如果你可以编辑 php.ini文件,那么可以直接在上面修改 memory_limit这个值。
memory_limit= 64M; Maximum amount of memory a script may consume(64MB)
如果默认的显示是 64M,尝试 128M。
解决方法2:.htaccess文件
把下面那行代码加入到.htaccess文件里面。
php_value memory_limit 64M
解决方法3:编辑 wp-config.php文件
把下面代码加入到 wp-config.php文件里面。
Increasing memory allocated to PHP
define('WP_MEMORY_LIMIT','64M');
解决方法4:在 wp-admin文件夹里面新建一个 php.ini文件。
1.打开记事本。
2.插入以下代码:
memory_limit= 64M;
3.保存为 php.ini。
4.上传到 wp-admin目录。
六、你没有权限浏览这个页面(403错误)
问题描述:
在后台登录页面输入用户名密码的时候收到这样一个错误:You are not authorized to view this page.(403 error)
解决办法:启用 index.php
如果你的博客是安装在 Windows Server上的,这是因为 IIS没有设置默认首页为 indexx.php而引起这个错误。
1.打开控制面板。
2.打开 IIS管理。
3.找到默认首页部分。
4.加入一个 index.php。
七、致命错误:Fatal error undefined function is_network_admin()
问题描述:
在你升级完 WordPress的时候,尝试登录的时候出现 Fatal error undefined function is_network_admin()致命错误。
解决办法:手动升级
这个错误是由于 WordPress升级失败造成的。尝试手动升级。
1.下载最新的 WordPress压缩包并解压。
2.备份你现在的 WordPress。
3.重命名 wp-includes和 wp-admin目录为 wp-includes.bak和 wp-admin.bak。
4.通过FTP上传 wp-includes和 wp-admin目录到服务器是上。
5.把新的 wp-content目录里面的东西上传到服务器上的相应位置。
6.上传其他文件到 WordPress根目录。
7.通过 FTP把.maintenance文件删掉。
8.重新登录到 WordPress你会看到一个像这样的链接 http://你的域名/wordpress/wp-admin/upgrade.php,按说明进行操作。
9.清空缓存,然后看看你否生效了。
更多的关于手动升级的细节,请查看:Updating WordPress
八、WordPress登录界面 404问题
问题描述:
你没有办法登录到 WordPress后台,显示 404错误。
解决办法1:在数据库你面更新 URL。
如果你可以进入到 phpMyAdmin,尝试在数据库里面更新 URL。
1.登入到 cPanel,点击 Databases里面的 phpMyAdmin。
2.选择你的 WordPress数据库,例如:Username_wrdp1。
3.进入 wp_options,点击 Browse。
4.在字段 option_name下面搜索 siterul。
5点击 Edit Field。
6.在 option_value选项里面更改 URL。
7.在最底部点击确认。
解决方法2:更改文件夹属性。
1.在 FTP下进入/wp-admin目录。
2.右击 wp-admin目录,然后点击文件夹属性。
3.把属性值改为 755然后再检查一下子目录有没有相应选项。
4.点击 OK。
5.把 1- 4步骤在 wp-content和 wp-includes文件夹里面都操作一遍。
6.打开你的浏览器,然后尝试登录 WordPress。然后按 Ctrl+ F5清空缓存。
九、完成自动升级之后显示 Briefly unavailable for scheduled maintenance错误
问题描述:
如果你的站点在完成升级之后显示 Briefly unavailable for scheduled maintenance错误信息。
解决办法:删除.maintenance文件。
在你进行升级的时候会生成一个叫做.maintenance的文件,是用来提醒访客网站正在维护。如果升级失败了的话,这个文件还会保留在文件夹里面。
删掉.maintenance的步骤。
1.通过 FTP登录到你博客的根目录。
2.找到.maintenance文件。
3.在根目录里面删掉.maintenance文件。
一旦你解决了这个问题,你就可以去再次进行自动升级的操作了。
十、无法删除插件
问题描述:
你无法在 WordPress控制面板里面删掉某一个插件。在你通过 FTP删掉插件的文件夹之后还是无法在控制面板删除。
解决办法:通过 SSH来删除插件。
你的插件可能上传过一些隐藏文件到目录里面,这些目录在 FTP下是不可见的。
如果你的博客可以通过 SSH登录:
1.通过 SSH登录到你的博客。
2.用 SSH命令找到该目录:wp-content/plugins/
3.用命令 ls-al显示整个文件夹。
4.用 rm目录名称命令删除插件。
OK,关于headers already sent by和drag a column header here to的内容到此结束了,希望对大家有所帮助。




