setcookie() 在 require() 之后, 冲突怎么解决?

2015-01-26 13:03:30 +08:00
 iugo
require() 中有一些必须的东西, 没有它就没有 cookie 的值. 所以必须先 require() 再 setcookie().

可是 setcookie() 必须在 header 之前, require() 的文件有 header 导致 setcookie() 出错.

我试过把 require() 中的内容拿出来直接放在 php 中, 但 require() 使用的是一个配置文件, 如果拿出来用就失去配置文件的意义了.

请教.
2695 次点击
所在节点    PHP
14 条回复
coolzjy
2015-01-26 13:18:50 +08:00
拆分 require 的代码,一个 require 目标文件中既有配置又输出 header 显然有问题
t6attack
2015-01-26 14:18:54 +08:00
产生这种疑问,说明程序本身有逻辑问题。改改改
anewg
2015-01-26 14:24:52 +08:00
先检查是否因为bom头或是空白行导致提前输出,若没有再改程序。
shiny
2015-01-26 14:29:48 +08:00
参考下 PSR 来重构下程序?
iugo
2015-01-26 14:58:22 +08:00
@coolzjy
@anewg

的确有个空白行, 导致有 header. 问题解决, 谢谢.

以前出现过一种情况, 在首行 <?php 这个位置出错, 可能是因使用不同编辑器导致的. 后来我就有个习惯, 首行留空.

后来在看 PHP 文档中说如果文件只有 PHP 代码, 不建议使用 ?> 结束, 以防止输入不必要的信息. 看来我领悟得还不够深.

最近才真正上手写代码, 了解和理解的一字之差的确大.
wzxjohn
2015-01-26 15:01:41 +08:00
@iugo 首行空行写到现在没出过问题也是蛮拼的。。。
cevincheung
2015-01-26 15:02:13 +08:00
ob_start
xoxo
2015-01-26 15:04:13 +08:00
楼主居然也写PHP
tmkook
2015-01-26 15:38:25 +08:00
首行留空这个习惯蛮屌的
lincanbin
2015-01-26 15:53:11 +08:00
这些不会冲突,你前面输出了空行了吧?
<?php标签如果没有输出,不要也不需要用?>闭合
iugo
2015-01-26 17:21:16 +08:00
@wzxjohn
@xoxo
@tmkook

真正开始动手写 PHP 也就一个星期. 新手.

一直是外行, 直到最近公司来了个刚毕业的小伙子, 他在学校写 Java 和 .NET 的, 就和他一起开始学习写 PHP 了.

我错了...
huigeer
2015-01-26 17:40:48 +08:00
空行或者bom是很烦人的东西
raincious
2015-01-26 17:43:51 +08:00
> 出错的问题是我将 require() 的首行留空导致输出的 header.

<?php





require('blablabla.php');

如果上面的代码会造成你所描述的那种问题,先别传Github了,彻底重构一遍好了。
jevonszmx
2015-01-26 19:12:05 +08:00
最好的解决方法是使用输出缓冲池,因为你程序复杂了后,中间require的文件难免会有空行等莫名的问题影响(所以为什么建议php类文件不要?>结尾呢~)。

官方文档: http://docs.php.net/manual/zh/function.ob-start.php

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/165520

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX