您的位置:澳门新葡8455最新网站 > 编程教学 > 澳门新葡萄京娱乐场:cookie错误_php才具_脚本之家

澳门新葡萄京娱乐场:cookie错误_php才具_脚本之家

发布时间:2019-11-24 17:14编辑:编程教学浏览(123)

    自家个人以为,Output buffering是相比较纯粹的4.0天性。即使从概念上看来优良轻巧,可是output buffering作用非凡苍劲,能使开拓者更易于地付出高端而卓有功用的主次。

    若果你写过PHP代码,相信都遇上过那几个大约时候都让人盲目标warning吧..后天我们就来解决它............... 看了PHP手册,回答如下: 音讯“Warning: Cannot send session cookie - headers already sent。。。”大概“Cannot add header information - headers already sent。。。”。 函数 header 和 session 函数须求在输出流中追加头新闻。可是头音信只可以在任何任何输出内容前边发送。在使用这几个函数前不能够有其它的出口。函数 headers_sent() 能够检查你的脚本是不是业已发送了头消息。请参阅“输出调节函数”。 意思是:不要在使用方面的函数前有别的文字,空行,回车,空格等。但。。。难题是,这答案并不合意。因为频仍程序在任何PHP情况下运作却健康。 首先:那错误是怎么发生的吗?让大家来寻访PHP是如哪里理HTTP header输出和主导输出的。 PHP脚本早先实施时,它能够同有的时候间发送header音讯和主体音信。 Header信息 或 SetCookie并不会立即发送,相反,它被封存到三个列表中。 那样就能够允许你改改标题音信,富含缺省的标题。可是,后生可畏旦脚本发送了别样非标准化题的输出 调用),那么PHP就亟须头阵送完全体的Header,然后终止 HTTP header。而后继续发送主体数量。从这儿最初,任何增多或改换Header音信的预计都以不一致敬的,并会发送上述的不当音讯之风流倜傥。 好!那大家来消除它: 笨方法:把错误警示全不出示! 画虎类狗之计,具体方法就不说了 ^_^# 建设方案: 1)适用于有权力编辑PHP。INI的人 展开php。ini文件,找到 output_buffering =改为on或许别的数字。假使是IIS6,请一定改为ON,不然你的PHP作用会奇慢。 2)使用设想主机,无法编辑PHP。INI,如何是好? 轻便: 在您的上空根目录下创建三个。htaccess文件,内容如下: AllowOverride All PHP_FLAG output_buffering On 不幸的气象是:照旧要命?全体网页都无法显得啦? 那么,你能够通话骂一通空间商,然后让她给你把apache的。htaccess AllowOverride展开 3)在PHP文件里化解 ob_start() 启用output buffering机制。 Output buffering扶助多档期的顺序 -- 举例,能够频频调用 ob_start 发送output buffer并禁用output buffering机制。 ob_end_clean() 衰亡output buffer但不发送,并禁止使用output buffering。 ob_get_contents() 将当前的output buffer再次回到成三个字符串。允许你管理脚本发出的此外输出。 原理: output_buffering被启用时,在剧本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道输入到动态扩充的缓存中(只好在PHP 4。0中使用,它具备中心化的出口机制)。你仍旧能够改进/加多header,或然安装cookie,因为header实际上并不曾发送。当整个脚本终止时,PHP将机关发送HTTP header到浏览器,然后再发送输出缓冲中的内容。

    本文将介绍HTTP header,以致output buffering如何辅助您管理HTTP header,并介绍了output buffering的片段高档用法。

    HTTP Header

    对 于使用HTTP 协议创设的各样央浼,Web服务器发生的响应常常包罗八个部分 – 标题和主导。举个例子,借使在Web服务器的文档根目录下有三个小文本文件,叫做example.txt,文件中蕴涵文本Hello, world!,那么对此文件的HTTP 要求响应如下所示:复制代码 代码如下:HTTP/1.1 200 OKDate: Sat, 02 Sep 二〇〇四 21:40:08 放线菌壮观素TServer: Apache/1.3.11 mod_macro/1.1.1 PHP/4.0.2-devLast-Modified: Sat, 02 Sep 2000 21:39:49 GMTETag: "12600b-e-39b173a5"Accept-Ranges: bytesContent-Length: 14Connection: closeContent-Type: text/plainHello, world!

    那 个哀告中的第黄金时代有的正是HTTP header。即使顾客在浏览器中看不到HTTP header,但它包含了用来浏览器的新闻,比如文书档案内容类型,使用的磋商版本,文书档案的最后改良日期等等。HTTP header并未太多的准则,日常情状下,它的格式如下:

    复制代码 代码如下:Field: Value[字段:值]

    总得用空行将它们和文书档案主体分离。

    能够从PHP脚本加多或更改此HTTP header的新闻。比方,能够利用 header() 函数:复制代码 代码如下:header("Location: "); // 重定向到

    也能够使用 SetCookie() 函数:

    复制代码 代码如下:SetCookie;

    您也许会知晓HTTP cookies是使用 HTTP headers 来完毕的。举例,以下PHP文件的 HTTP 央求响应

    复制代码 代码如下:

    复制代码 代码如下:HTTP/1.1 200 OKDate: Sat, 02 Sep 二零零三 21:43:02 链霉素TServer: Apache/1.3.11 mod_macro/1.1.1PHP/4.0.2-devX-Powered-By: PHP/4.0.2-devSet-Cookie: foo=barConnection: closeContent-Type: text/htmlSet cookie.

    浏览器读取从服务器再次回到的 HTTP header,知道送来了三个称作 foo 的 cookie (在这里间是贰个 session cookie),它的值是 bar。

    怎么要动用Output Buffering技能

    早 在PHP/FI 2.0时就很显眼需求output buffering能力了。假若您使用过这种本子的PHP,那么可能还记得时常会遇上 Oops, SetCookie called after header has been sent 那些似是而非音讯,并令你捎头抓耳,也弄不清是如何来头。

    如 果你已采用过PHP的最新版本 -- PHP 3.0 以至 PHP 4.0 -- 那么你会知道那些乖谬消息: Oops, php_set_cookie called after header has been sent。或然,你在总结调用 PHP 的 header() 函数时会碰着 Cannot add header information - headers already sent 音信。常常的话,output buffering能力客商幸免那一个烦人的荒唐消息,同一时间开采职员也可用以高等的用处。

    那几个不当是怎么样时候发出的啊?假若你在曾经发送了HTTP header之后试图增加或涂改标题消息,以致在文书档案主体和标题之间缺少空行时,就能生出那一个错误消息。为了知道那是何许发生的,让大家来寻访PHP是什么管理HTTP header输出和入眼输出的。

    本子开始实施时,它能够而且发送header信息和重心音讯。

    Header消息 或 SetCookie并不会立即发送,相反,它被保存到三个列表中。

    那样就能够允许你改改标题音讯,包含缺省的题目。可是,风流倜傥旦脚本发送了其他非标题标出口,那么PHP就亟须首发送全体的标题,然后再送出空行,终止 HTTP header,而在这里之后才会延续发送主体数量。从今未来刻以前,任何加多或修正标题音信的猜测都是不容许的,并会发送上述的谬误音讯之生龙活虎。

    虽说那并不会引起多大的难点,一时候只是在爆发任何输入从前终止HTTP header,进而挑起脚本逻辑的复杂化而已。Output buffering本事可以缓慢解决这个难题。

    Output Buffering的行事规律

    启用output buffering时,在本子发送输出时,PHP并 不发送HTTP header。相反,它将此输出通过管道输入到动态扩展的缓存中(只可以在PHP 4.0中央银行使,它抱有大旨化的输出机制卡塔 尔(英语:State of Qatar)。你依然可以改良,增多标题行,或然设置cookie,因为标题实际上并从未发送。最简易的景况是,当脚本终止 时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。那大致吗。

    中央用法

    可以利用下边包车型客车八个函数,它们能够扶植您调节output buffering:复制代码 代码如下:ob_start()启用output buffering机制。

    Output buffering扶持多档次 -- 举例,能够一再调用 ob_start() 函数。

    ob_end_flush()

    发送output buffer并禁用output buffering机制。

    ob_end_clean()

    祛除output buffer但不发送,并禁止使用output buffering。

    ob_get_contents()

    将如今的output buffer重返成二个字符串。允许你管理脚本发出的任何输出。

    其它,能够启用 php.ini 中的 output_buffering 指令。借使启用了此命令,那么每一个PHP脚本都也正是意气风发开首就调用了ob_start()函数。

    Example 1

    复制代码 代码如下:

    Example 1

    此间,就算你已发送了出口,也能够行使 SetCookie() 调用,而不会出错,真的要谢谢output buffering机制。请小心运用output buffering机制用于这种指标会挑起一定程度上的本性损失,由此最棒缺省气象下不要启用此编写制定。然而,对于复杂一些的台本,output buffering能够简化逻辑性。

    Example 2

    复制代码 代码如下:

    其生龙活虎例子呈现了八个频率十分的低的规定字符串长度的。它不是简轻易单的接纳strlen()函数管理,而是先启用 output buffering 机制,将字符串打字与印刷出来,然后再明确output buffer的尺寸。最终消逝output buffer,然后禁止使用output buffering机制。

    本文由澳门新葡8455最新网站发布于编程教学,转载请注明出处:澳门新葡萄京娱乐场:cookie错误_php才具_脚本之家

    关键词: