V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
iugo
V2EX  ›  PHP

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

  •  
  •   iugo · Jan 26, 2015 · 3216 views
    This topic created in 4111 days ago, the information mentioned may be changed or developed.
    require() 中有一些必须的东西, 没有它就没有 cookie 的值. 所以必须先 require() 再 setcookie().

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

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

    请教.
    Supplement 1  ·  Jan 26, 2015
    出错的问题是我将 require() 的首行留空导致输出的 header.

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

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

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

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

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

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

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

    我错了...
    huigeer
        12
    huigeer  
       Jan 26, 2015
    空行或者bom是很烦人的东西
    raincious
        13
    raincious  
       Jan 26, 2015
    > 出错的问题是我将 require() 的首行留空导致输出的 header.

    <?php





    require('blablabla.php');

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

    官方文档: http://docs.php.net/manual/zh/function.ob-start.php
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3110 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 00:25 · PVG 08:25 · LAX 17:25 · JFK 20:25
    ♥ Do have faith in what you're doing.