国语自产精品视频在线看:您身边最放心的安全下载站! 最新软件|热门排行|软件分类|软件专题|厂商大全

国语自产精品视频在线看

技术教程
您的位置:首页网络编程PHP编程 → 彻底杜绝PHP的session cookie错误

彻底杜绝PHP的session cookie错误

我要评论 2009/06/14 15:07:36 来源:国语自产精品视频在线看 编辑:佚名 [ ] 评论:0 点击:810次

本文讨【běn wén tǎo】论的是如何彻底杜绝🏼warning: Cannot add header information - headers already sent in......  这种令🈚人莫明【rén mò míng】其妙的的错误【de cuò wù】💦。

只要你写过PHP代码【dài mǎ】,相信都【xiàng xìn dōu】🤡遇上过这个大【zhè gè dà】多时候🥃都令人🕛莫明其【mò míng qí】妙的warning吧..今天我😎们就来【men jiù lái】搞定它🗞...............

看了PHP手册,回答如下:

消息【xiāo xī】“Warning: Cannot send session cookie - headers already sent。。。”或者🍎“Cannot add header information - headers already sent。。。”。

函数【hán shù】🚗 header(),setcookie() 和🕯 session 函数【hán shù】🚗需要在【xū yào zài】输出流中增加【zhōng zēng jiā】头信息。但是头信息只能在其【néng zài qí】🚿它任何🚓输出内容之前发送【fā sòng】💬。在使用这些函数【hán shù】🚗前不能有任何(如【rú】🥔 HTML)的输出【de shū chū】。函数【hán shù】🚗 headers_sent() 能够检查您的脚本是否已经发送【fā sòng】了⛎头信息。请参阅“输出控【shū chū kòng】制函数【zhì hán shù】💇”。

意思是【yì sī shì】:不要在【bú yào zài】🏌使用上😺面的函数前有任何文【rèn hé wén】字,空行,回车,空格等【kōng gé děng】。但🐜。。。问题是,这答案并不令🎿人满意。因为往往程序💑在其他🚸PHP环境下【huán jìng xià】运行却【yùn háng què】🔙正常【zhèng cháng】。
 

首先🎢:这错误🐶是怎么【shì zěn me】产生的【chǎn shēng de】🍗呢🐩?让我们【ràng wǒ men】来看看PHP是如何【shì rú hé】处理HTTP header输出和主体输出的。

PHP脚本开🎥始执行时,它可以同时发【tóng shí fā】送【sòng】🧖header(标题【biāo tí】)信息【xìn xī】和🍜主体信🧛息【xī】。 Header信息【xìn xī】🚣(来自【lái zì】 header() 或【huò】 SetCookie() 函数)并不会😁立即发🧞送【sòng】🧖,相反【xiàng fǎn】,它被保【tā bèi bǎo】🤑存到一🚰个列表中【zhōng】。 这样就😭可以允💕许你修【xǔ nǐ xiū】改标题【biāo tí】信息【xìn xī】🚣,包括缺省的标题【biāo tí】(例如👦 Content-Type 标题【biāo tí】)。但是【dàn shì】🎴,一🚰旦脚本发送【fā sòng】😞了任何非标题【biāo tí】的输出(例如👦,使用 HTML 或【huò】 print() 调用),那么PHP就必须🚏先发送【fā sòng】🧖完所有的Header,然后终止 HTTP header。而后继续发送【fā sòng】🧖主体数据。从这时开始【kāi shǐ】,任何添【rèn hé tiān】加或【huò】修🏸改Header信息【xìn xī】的🎹试图都【shì tú dōu】🤬是不允【shì bú yǔn】👯许的,并会发🎅送【sòng】🧖上述的错误【cuò wù】🕶消息之【xiāo xī zhī】一🚰。

好!那我们来解决它:

笨方法:把错误【bǎ cuò wù】🔂警告全不显示【bú xiǎn shì】🍴!
掩耳盗铃之计,具体方法就不说了【shuō le】〽 ^_^#

解决方案:

1)适用于有权限编辑PHP。INI的人

打开🖕php。ini文件【wén jiàn】(你应试📏比我清楚你的php。ini在哪里【zài nǎ lǐ】),找到【zhǎo dào】😈

output_buffering =改为✳on或者任何数字【hé shù zì】🕧。如果是IIS6,请一定【qǐng yī dìng】改为✳ON,不然你的PHP效率会【xiào lǜ huì】🚻奇慢。

2)使用虚拟主机【nǐ zhǔ jī】✍,不能编【bú néng biān】🤵辑PHP。INI,怎么办?

简单:

在你的💼空间根目录下【mù lù xià】🐌建立一个😠。htaccess文件【wén jiàn】,内容如【nèi róng rú】下:

AllowOverride All
PHP_FLAG output_buffering On

不幸的【bú xìng de】👓情况是【qíng kuàng shì】:还是不行❤?全部网页都不【yè dōu bú】能显示啦🚍?

那么,你可以打电话骂一通【mà yī tōng】空间商🦋,然后让🚝他给你【tā gěi nǐ】把【bǎ】apache的。htaccess AllowOverride打开🙉

3)在PHP文件里解决

ob_start()
启用output buffering机制。 Output buffering支持多层次📂 -- 例如【lì rú】,可以多【kě yǐ duō】🍼次调用【cì diào yòng】😳 ob_start() 函数。

ob_end_flush()
发送【fā sòng】output buffer(输出缓冲)并禁用【bìng jìn yòng】💔output buffering机制🗞。

ob_end_clean()
清除👈output buffer但不发【dàn bú fā】😭送,并禁用【bìng jìn yòng】output buffering。

ob_get_contents()
将当前【jiāng dāng qián】的【de】🚗output buffer返回成一个字符串。允许你【yǔn xǔ nǐ】处理脚本发出【běn fā chū】🛃的【de】🚗任何输出🔪。

原理:

output_buffering被启用时,在脚本【zài jiǎo běn】🐙发送输【fā sòng shū】📃出时,PHP并不发送【fā sòng】🍋HTTP header。相反,它将此🆎输出通过管道(pipe)输入到动态增【dòng tài zēng】加的缓存中🎆(只能在【zhī néng zài】PHP 4。0中使用✡,它具有中央化【zhōng yāng huà】的输出机制)。你仍然可以修【kě yǐ xiū】📄改/添加🈴header,或者设【huò zhě shè】置👉cookie,因为【yīn wéi】header实际上并没有发送【fā sòng】🍋。当全部【dāng quán bù】脚本终止时🈵,PHP将自动🙋发送【fā sòng】🍋HTTP header到浏览器,然后再【rán hòu zài】🈸发送输【fā sòng shū】📃出缓冲【chū huǎn chōng】中的内【zhōng de nèi】容。

关键词【guān jiàn cí】💜:PHP,session,cookie

阅读本文后您有什么感想? 已有 人给出评价!

  • 1 欢迎喜欢
  • 1 白痴
  • 1 拜托
  • 1 哇
  • 1 加油
  • 1 鄙视