想做这样的功能
session_start();
if(isset($_SESSION["proc"]))
$_SESSION["proc"] = proc_open(...);
if(isset($_SESSION["file"]))
$_SESSION["file"] = fopen(...);
// 使用$_SESSION["proc"]
// 使用$_SESSION["file"]如何做到每个session只打开一次对象,下次再操作就不再打开了,当上面这样写是没用的查了PHP手册说:自从4.2后除了数据库连接需要手动关闭,其他资源都会自动关闭,经测试确实如此。
有办法可以延长资源的生命周期到会话级,从而在不同页面请求之间共享吗?
session_start();
if(isset($_SESSION["proc"]))
$_SESSION["proc"] = proc_open(...);
if(isset($_SESSION["file"]))
$_SESSION["file"] = fopen(...);
// 使用$_SESSION["proc"]
// 使用$_SESSION["file"]如何做到每个session只打开一次对象,下次再操作就不再打开了,当上面这样写是没用的查了PHP手册说:自从4.2后除了数据库连接需要手动关闭,其他资源都会自动关闭,经测试确实如此。
有办法可以延长资源的生命周期到会话级,从而在不同页面请求之间共享吗?
往session中存个资源对象比存个字符串数字什么的难多了啊其实主要是资源关闭的问题
sorry 我理解错你的意思了!我的理解交互式程序,每个人上来的时候都应该是一个单独的进程啊,如果你把所有的这些句柄都存起来,期望每个进来的人都共用,那是不是更应该多的是考虑多线程的问题。
但是作出结论时就要慎重了,先要问一下:自己到底知道了多少你自己观察以下代码的运行情况,就应该有数了t.php
<?php
class T {
var $v = 0;
function show() {
echo $this->v;
}
}t1.php
<?php
include 't.php';
session_start();
if(! isset($_SESSION["obj"]))
$_SESSION["obj"] = new T;$_SESSION["obj"]->show();
$_SESSION["obj"]->v++;echo <<< HTML
<p>$_SERVER[PHP_SELF]</p>
<a href=t1.php>T1</a><br>
<a href=t2.php>T2</a><br>
HTML;t2.php
<?php
include 't.php';
session_start();
if(! isset($_SESSION["obj"]))
$_SESSION["obj"] = new T;$_SESSION["obj"]->show();
$_SESSION["obj"]->v++;echo <<< HTML
<p>$_SERVER[PHP_SELF]</p>
<a href=t1.php>T1</a><br>
<a href=t2.php>T2</a><br>
HTML;
跟class没关系,class是php运行时对象,可以序列化的。而fopen得到的句柄存到session里是能重复使用的。