iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php中setcookie报错的解决方法
  • 605
分享到

php中setcookie报错的解决方法

2023-06-20 14:06:49 605人浏览 独家记忆
摘要

这篇文章主要为大家展示了“PHP中setcookie报错的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中setcookie报错的解决方法”这篇文章吧。php setcookie报

这篇文章主要为大家展示了“PHP中setcookie报错的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中setcookie报错的解决方法”这篇文章吧。

php setcookie报错是因为setcookie()之前有输出,其解决办法就是将输出的echo的数据和header头的cookie一起发出去即可。

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

php setcookie 报错怎么办?

PHP setcookie()之前不能有任何输出

PHP的setcookie函数,手册里是这么写的:

setcookie() defines a cookie to be sent along with the rest of the Http headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.

大致意思是在setcookie之前不能有东西输出到客户端浏览器,否则会报错。但是经测试发现,并没有报错。继续翻看手册:

You can use output buffering to send output prior to the call of this function, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.

于是我修改了php.ini(PHP版本5.4)的output_buffering为0,即关闭缓冲区。(PHP5.3版本以下是关闭的,5.3之后是默认开启,值为4096)

意思是如果在输出cookie之前,设置了ob_start和ob_end_flush来输出缓冲区,则不会报错。那么,为什么cookie和缓冲区的数据一起返回就没有报错呢?应该是因为:缓冲区的数据将整理成一个完整的HTTP包发出去。

我们可以看一下报错信息:

echo "i am Going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); print_r($_COOKIE);

php中setcookie报错的解决方法

“请不要修改header信息,因为header已经发送过了。”很明显,没有使用缓冲区输出,则header先一步返回到浏览器了,然后再进行setcookie发送header头信息的时候,就报错啦——不符合HTTP协议的规范。因为HTTP协议规定header应该在body之前输出。

我把代码修改了一下,把将输出的echo的数据和header头的cookie一起发出去。

ob_start();echo "i am going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); ob_end_flush(); print_r($_COOKIE);

结果如下:

php中setcookie报错的解决方法

当你设置output_buffering为0也就是在php.ini关闭缓冲区的时候,就需要手动ob_start来开启缓冲区了。

为什么有些开发者测试的时候,发现setcookie之前echo了信息也没有报错呢?

因为当前大部分的PHP应用都是5.3+ 的,有些甚至用上了7。PHP5.3+版本中,因为默认开启了缓冲区,并且默认size为4096,所以在setcookie之前echo的数据,以及cookie的header头信息,都会在缓冲区被封装成HTTP包,发给客户端啦~所以也就不会产生上图中的报错信息(请勿修改HTTP的header头信息)啦~~

以上是“php中setcookie报错的解决方法”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: php中setcookie报错的解决方法

本文链接: https://www.lsjlt.com/news/297621.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php中setcookie报错的解决方法
    这篇文章主要为大家展示了“php中setcookie报错的解决方法”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“php中setcookie报错的解决方法”这篇文章吧。php setcookie报...
    99+
    2023-06-20
  • php中include报错的解决方法
    这篇文章将为大家详细讲解有关php中include报错的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php include报错的解决办法:1、检查include文件的位置是否正确;2、检测被包含...
    99+
    2023-06-14
  • php $_get报错的解决方法
    这篇文章主要介绍php $_get报错的解决方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php $_get报错的解决办法:使用【array_key_exists(key, 数组)】函数来进行判断,其中参数1为要...
    99+
    2023-06-09
  • mac中php-fpm报错的解决方法
    小编给大家分享一下mac中php-fpm报错的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!mac php-fpm报错的解决办法:1、配置“php-fpm.conf”文件;2、修改“php-fpm.conf err...
    99+
    2023-06-14
  • pip中install报错的解决方法
    小编给大家分享一下pip中install报错的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!解决方法:1、ReadTimeoutError,在pip安装所...
    99+
    2023-06-20
  • springboot中entityManagerFactory报错的解决方法
    今天给大家介绍一下springboot中entityManagerFactory报错的解决方法。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。新建springb...
    99+
    2023-06-26
  • Django-报错解决方法
    无法使用Django新建项目:'django-admin.py’不是内部或外部命令找到site-packages/django/bin(如 D:\Program Files\Anaconda3\Lib\site-packages...
    99+
    2023-01-30
    报错 解决方法 Django
  • PHP报错:未定义常量的解决方法!
    PHP报错:未定义常量的解决方法! 在PHP编程中,我们经常会遇到常量未定义的错误。这种错误通常会在代码中使用未定义的常量时发生。本文将介绍常量的概念以及如何解决未定义常量的问题。 首先,让我们来了解什么是常量。在PHP中,常量是指一旦定义...
    99+
    2023-10-02
    php android android studio
  • mysql5.7 报错1055的解决方法
    这篇文章将为大家详细讲解有关mysql5.7 报错1055的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql5.7报错1055的解决办法:首先找到并打开m...
    99+
    2022-10-18
  • ORA-01756报错的解决方法
    今天就跟大家聊聊有关ORA-01756报错的解决方法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 今天在尝试执行一个...
    99+
    2022-10-19
  • php中curl56错误的解决方法
    这篇文章给大家分享的是有关php中curl56错误的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php curl 56错误的解决方法是设置“curl_setopt($c, CURLOPT_SSL_VER...
    99+
    2023-06-20
  • php中readfile错误的解决方法
    这篇文章给大家分享的是有关php中readfile错误的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Per...
    99+
    2023-06-15
  • 详解BadTokenException报错解决方法
    线上出现了如上的 crash,第一解决反应是在 show dialog 之前做个 isFinish 和 isDestroyed 判断,当我翻开代码正要解决时,我惊了,原来已经做过了...
    99+
    2022-11-12
  • ORA-01102 报错解决方法
    开库提示  ORA-01102: cannot mount database in EXCLUSIVE mode这个错误主要是lk<SID>文件造成的,该文件位于ORALCE_HOME...
    99+
    2022-10-18
  • 【Flask】报错解决方法:Assert
         运行Flask时出现了一个错误, AssertionError: View function mapping is overwriting an existing endpoint function: main.user   直...
    99+
    2023-01-31
    报错 解决方法 Flask
  • 浅析php md5报错的原因和解决方法
    在开发 PHP 应用程序时,我们通常需要对密码和敏感数据进行加密,其中最常用的加密算法之一是 MD5。然而,在编写代码的过程中,你可能会遇到一个常见的问题:PHP MD5 报错。这个错误往往会导致程序运行失败,并且会影响到应用程序的功能和安...
    99+
    2023-05-14
    php
  • php中json解析错误的解决方法
    这篇文章将为大家详细讲解有关php中json解析错误的解决方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php json解析错误的解决办法:首先创建一个PHP示例文件;然后手动通过“json_last...
    99+
    2023-06-06
  • MySQL报错Error_code: 1045的解决方法
    本篇内容主要讲解“MySQL报错Error_code: 1045的解决方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL报错Error_code: 1...
    99+
    2022-10-18
  • phpmyadmin报500错误的解决方法
    小编给大家分享一下phpmyadmin报500错误的解决方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!phpmyadmin报500错误的解决办法:首先打开php安装的目录,进入到【d:...
    99+
    2022-10-18
  • navicat报2005错误的解决方法
    小编给大家分享一下navicat报2005错误的解决方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!关于Navicat for...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作