blue7wings
V2EX  ›  PHP

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

  •  
  •   blue7wings · Nov 16, 2014 · 12788 views
    This topic created in 4371 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
    loveyu
    Nov 16, 2014 via Android
    1
    貌似没办法,存在session或缓存中
    mahone3297
    mahone3297
    Nov 16, 2014
    2
    写入redis内存中。。。
    orvice
    orvice
    Nov 16, 2014
    3
    $a 放到同一个文件,然后AB都去include?
    regmach
    regmach
    Nov 16, 2014
    4
    session,plz
    zhs227
    zhs227
    Nov 16, 2014
    5
    PHP变量作用域是页面,这个事情被喷了不知道多久。需要自己做序列化与反序列化。一般常用的是session, db, 也可以用文件,简单点一两个参数的可以用url?param1=v1&param2=v2这种GET方式传递。
    regmach
    regmach
    Nov 16, 2014
    6
    看了ls的描述
    我突然觉得自己似乎没理解lz的用意....
    qushiba
    qushiba
    Nov 16, 2014
    7
    从页面参数传过去,或者就session。。。。。可蛋疼了
    xoxo
    xoxo
    Nov 16, 2014
    8
    @zhs227 变量生命期是请求...
    feiyuanqiu
    feiyuanqiu
    Nov 16, 2014
    9
    内存的话我记得有个扩展shmop可以干这事,但是都用到内存了其实用缓存还要简单些
    zhs227
    zhs227
    Nov 16, 2014
    10
    @xoxo 对,是请求。我表达不够准确
    cougar
    cougar
    Nov 16, 2014
    11
    什么场景非要这么干
    cover
    cover
    Nov 16, 2014 via Android
    12
    跳转的get里面写入参数 redis的作用域就变成全局了。。。不现实 还是写入url的get请求靠谱
    t6attack
    t6attack
    Nov 16, 2014
    13
    @zhs227 这样也有好处。单个页面的崩溃,不会影响系统整体的稳定。避免了内存泄漏等问题。
    lincanbin
    lincanbin
    Nov 16, 2014
    14
    一般是是URL中夹带参数跳转,变量的生命周期是请求其实是个很好的特性,避免了不会用变量的人把Web服务搞挂。
    txlty
    txlty
    Nov 16, 2014
    15
    写入文件。或者写入内存,可以用第三方软件实现(memcache、redis)
    写入内存有更简单的方式:用apc扩展。
    http://pecl.php.net/package/apc
    http://php.net/manual/zh/book.apc.php
    txlty
    txlty
    Nov 16, 2014
    16
    楼主先搞明白,你想要的是作用于单次会话的变量?还是服务器全局缓存?
    如果是单次会话,那么session就是储存在内存里的。
    itfanr
    itfanr
    Nov 16, 2014
    17
    如果是java 貌似可以弄个变量 作用域是一次请求
    xin1090
    xin1090
    Nov 16, 2014
    18
    我貌似用get比较多,需要安全一些的会弄成post。 反正都是隐藏的。
    regmach
    regmach
    Nov 16, 2014
    19
    针对用户就session或者get/post
    针对全局就写入内存或者数据库
    0_0 我应该没有乱说吧?
    breestealth
    breestealth
    Nov 16, 2014
    20
    就是一个全局变量的问题。写入 Session、Cookie、Memcache、Redis、DB 甚至某个文件都能解决。根据需要选择最简单的。
    kchum
    kchum
    Nov 17, 2014 via iPhone
    21
    Get
    最简单了
    watsy0007
    watsy0007
    Nov 17, 2014
    22
    数据量比较小,访问量小就上session.
    不然就考虑外部缓存,redis
    Yuansir
    Yuansir
    Nov 17, 2014
    23
    共享内存 shm_*
    skyworker
    skyworker
    Nov 17, 2014❤️3
    24
    @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
    boynanboy
    Nov 17, 2014
    25
    session 缓存 文件 通过url传递
    xwsoul
    xwsoul
    Nov 18, 2014
    26
    原因, 思路和方案LS各位已经答的很好了...
    PHP基本变量使用的思路就是一个请求内处理完成...
    基本上比较耗时的操作可能回丢队列或者深度依赖缓存系统...
    bystand3r
    bystand3r
    Nov 29, 2014
    27
    看你的业务需求,这个变量到底涉不涉及隐私或安全特性,如果没有,那么get必然是最靠谱的方法。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4910 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 73ms · UTC 06:58 · PVG 14:58 · LAX 22:58 · JFK 01:58
    ♥ Do have faith in what you're doing.