在 PHP 中,一个页面如何获取另一个页面声明的变量? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
blue7wings
V2EX    PHP

在 PHP 中,一个页面如何获取另一个页面声明的变量?

  •  
  •   blue7wings Nov 16, 2014 12377 views
    This topic created in 4185 days ago, the information mentioned may be changed or developed.
    例如,我在A页面声明了变量$a,从A页面跳转到B页面,那么B页面如何获取到这个变量?我一般都是带参数传递过去,或者写入session在B页面再获取,能不能写入内存?然后B页面再从内存中获取并销毁这个变量呢?
    PHP小白,求大大们帮帮解答,O(∩_∩)O谢谢。。。
    27 replies    2014-11-29 22:02:40 +08:00
    loveyu
        1
    loveyu  
       Nov 16, 2014 via Android
    貌似没办法,存在session或缓存中
    mahone3297
        2
    mahone3297  
       Nov 16, 2014
    写入redis内存中。。。
    orvice
        3
    orvice  
       Nov 16, 2014
    $a 放到同一个文件,然后AB都去include?
    regmach
        4
    regmach  
       Nov 16, 2014
    session,plz
    zhs227
        5
    zhs227  
       Nov 16, 2014
    PHP变量作用域是页面,这个事情被喷了不知道多久。需要自己做序列化与反序列化。一般常用的是session, db, 也可以用文件,简单点一两个参数的可以用url?param1=v1&param2=v2这种GET方式传递。
    regmach
        6
    regmach  
       Nov 16, 2014
    看了ls的描述
    我突然觉得自己似乎没理解lz的用意....
    qushiba
        7
    qushiba  
       Nov 16, 2014
    从页面参数传过去,或者就session。。。。。可蛋疼了
    xoxo
        8
    xoxo  
       Nov 16, 2014
    @zhs227 变量生命期是请求..
    feiyuanqiu
        9
    feiyuanqiu  
       Nov 16, 2014
    内存的话我记得有个扩展shmop可以干这事,但是都用到内存了其实用缓存还要简单些
    zhs227
        10
    zhs227  
       Nov 16, 2014
    @xoxo 对,是请求。我表达不够准确
    cougar
        11
    cougar  
       Nov 16, 2014
    什么场景非要这么干
    cover
        12
    cover  
       Nov 16, 2014 via Android
    跳转的get里面写入参数 redis的作用域就变成全局了。。。不现实 还是写入url的get请求靠谱
    t6attack
        13
    t6attack  
       Nov 16, 2014
    @zhs227 这样也有好处。单个页面的崩溃,不会影响系统整体的稳定。避免了内存泄漏等问题。
    lincanbin
        14
    lincanbin  
       Nov 16, 2014
    一般是是URL中夹带参数跳转,变量的生命周期是请求其实是个很好的特性,避免了不会用变量的人把Web服务搞挂。
    txlty
        15
    txlty  
       Nov 16, 2014
    写入文件。或者写入内存,可以用第三方软件实现(memcache、redis)
    写入内存有更简单的方式:用apc扩展。
    http://pecl.php.net/package/apc
    http://php.net/manual/zh/book.apc.php
    txlty
        16
    txlty  
       Nov 16, 2014
    楼主先搞明白,你想要的是作用于单次会话的变量?还是服务器全局缓存?
    如果是单次会话,那么session就是储存在内存里的。
    itfanr
        17
    itfanr  
       Nov 16, 2014
    如果是java 貌似可以弄个变量 作用域是一次请求
    xin1090
        18
    xin1090  
       Nov 16, 2014
    我貌似用get比较多,需要安全一些的会弄成post。 反正都是隐藏的。
    regmach
        19
    regmach  
       Nov 16, 2014
    针对用户就session或者get/post
    针对全局就写入内存或者数据库
    0_0 我应该没有乱说吧?
    breestealth
        20
    breestealth  
       Nov 16, 2014
    就是一个全局变量的问题。写入 Session、Cookie、Memcache、Redis、DB 甚至某个文件都能解决。根据需要选择最简单的。
    kchum
        21
    kchum  
       Nov 17, 2014 via iPhone
    Get
    最简单了
    watsy0007
        22
    watsy0007  
       Nov 17, 2014
    数据量比较小,访问量小就上session.
    不然就考虑外部缓存,redis
    Yuansir
        23
    Yuansir  
       Nov 17, 2014
    共享内存 shm_*
    skyworker
        24
    skyworker  
       Nov 17, 2014   3
    @zhs227 RT

    PHP和Python/Ruby的运行机制有一个本质区别:PHP是每次HTTP请求过来以后,初始化全部资源(例如创建数据库链接、加载系统类库,创建缓存等等),处理完毕,释放全部资源,这不像Python/Ruby之类带有GC的脚本语言,Python/Ruby是初次启动的时候初始化资源,随后的请求就不必再次初始化资源了。

    这种机制的差异带来的区别就是:

    1、PHP极难出现严重的内存泄露问题,随便你代码写的多烂,反正每个请求一执行完毕,所有资源统统释放光。而Python/Ruby则需要依赖GC来回收内存,因此稍有不慎,还是会出现GC无法释放的内存泄露问题。

    2、PHP每次请求都要初始化资源,这个开销非常大。所以尽管PHP解析器本身的运行速度是极快的,但是一旦使用复杂的PHP框架,那么由于需要每次请求的时候初始化整个框架,性能的下降非常厉害,你用一个很复杂的PHP框架的结果就是整体性能被Ruby远远甩开。这也是为什么PHP社区这么多年来,并不怎么倾向于使用框架的原因之一。

    3、由于PHP这种每请求初始化资源的机制,也造成了PHP添加跨请求的高级特性相当困难,这是PHP本身一个很大的限制,但是反过来说,正是这种限制使得PHP始终保持在一个比较简单的web语言上面,而正是这一点才是PHP得以成为互联网第一Web编程语言的原因,因此也未必就不好。
    boynanboy
        25
    boynanboy  
       Nov 17, 2014
    session 缓存 文件 通过url传递
    xwsoul
        26
    xwsoul  
       Nov 18, 2014
    原因, 思路和方案LS各位已经答的很好了...
    PHP基本变量使用的思路就是一个请求内处理完成...
    基本上比较耗时的操作可能回丢队列或者深度依赖缓存系统...
    bystand3r
        27
    bystand3r  
       Nov 29, 2014
    看你的业务需求,这个变量到底涉不涉及隐私或安全特性,如果没有,那么get必然是最靠谱的方法。
    About     Help     Advertise     Blog     API     FAQ     Solana     839 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 79ms UTC 22:43 PVG 06:43 LAX 15:43 JFK 18:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86