V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iugo
V2EX  ›  PHP

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

  •  
  •   iugo · 2015-01-26 13:03:30 +08:00 · 2685 次点击
    这是一个创建于 3378 天前的主题,其中的信息可能已经有所发展或是发生改变。
    require() 中有一些必须的东西, 没有它就没有 cookie 的值. 所以必须先 require() 再 setcookie().

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

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

    请教.
    第 1 条附言  ·  2015-01-26 17:33:05 +08:00
    出错的问题是我将 require() 的首行留空导致输出的 header.

    新手, 所以出现此低级问题. 过几天等第一个程序写好后再放上 github 求吐槽.
    14 条回复    2015-01-26 19:12:05 +08:00
    coolzjy
        1
    coolzjy  
       2015-01-26 13:18:50 +08:00
    拆分 require 的代码,一个 require 目标文件中既有配置又输出 header 显然有问题
    t6attack
        2
    t6attack  
       2015-01-26 14:18:54 +08:00
    产生这种疑问,说明程序本身有逻辑问题。改改改
    anewg
        3
    anewg  
       2015-01-26 14:24:52 +08:00   ❤️ 1
    先检查是否因为bom头或是空白行导致提前输出,若没有再改程序。
    shiny
        4
    shiny  
       2015-01-26 14:29:48 +08:00
    参考下 PSR 来重构下程序?
    iugo
        5
    iugo  
    OP
       2015-01-26 14:58:22 +08:00
    @coolzjy
    @anewg

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

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

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

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

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

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

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

    <?php





    require('blablabla.php');

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

    官方文档: http://docs.php.net/manual/zh/function.ob-start.php
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   969 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 20:16 · PVG 04:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.