1. Log.inc文件<?php
class Log {
var $filename;
var $  fp;

function Log($filename) {
$this->filename = $filename;
$this->open();
}
function open() {
$this->fp = fopen($this->filename, "a") or die("Can't open {$this->filename}");
}
function write($note) {
fputs($this->fp, "$note\n");
}
function read() {
return join(' ', file($this->filename));
}
function __wakeup() {
$this->open();
}
function __sleep() {
// write information to the account file
fclose($this->fp);
return array('filename');
}
}
?>
2. front.php文件<?php
include_once('Log.inc');
session_start();
?><html><head><title>Front Page</title></head>
<body>
<?php
$now = strftime("%c");
if (!session_is_registered('l')) {
$l = new Log("persistent_log");
session_register('l');
$l->write("Create $now");
echo("Create session and persistent log object.<p>");
}
$l->write("Viewed first page $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
<a href = "next.php">Move to the next page</a>
</body>
</html>3. next.php<?php
include_once('Log.inc');
session_start();
?>
<html><head><title>Next Page</title></head>
<body>
<?php
$now = strftime("%c");
$l->write("Viewed page2 at $now");
echo "The log contains:<p>";
echo nl2br($l->read());
?>
</body>
</html>红色的代码出现如下错误
Fatal error: Call to a member function write() on a non-object in
PHP的版本号5.2  session save_path = "C:/tmp"   是php.ini的配置有问题吗?

解决方案 »

  1.   

    代码乱七八糟
     $l->write("Viewed page2 at $now");
    ????代码肯定贴错了。。
      

  2.   

    首先 我们看看那个定义基本类的"Log.inc文件",既然PHP是5以上的为什么还以4版本或以的方式来写类呢  (如构造函数)。第二 : 由这个三文件以及代码我们应看出来,你是想把类存于session中再在另外一个页面使用,可是方法不对。代码中(如下:)  $l = new Log("persistent_log");
      session_register('l'); 这个并没有把类实例化的对象存于SESSION中,只是存了一个'l'的东东,所以你第一次进“front.php”页时不会报错,但是你再次刷新或者是由这个页进入“next.php ”页时,就会报以上的错误了。第三 :修改方法(如下:)
      
    if(!session_is_registered('l')){
              $l = new Log("persistent_log");
              $_SESSION['l']=$l;
    }
    $l->write("Viewed first page $now");
     
      这样就可以了。(另外,你说这个是《PHP程序设计》中的例子,我真是感到无语了,那些人都是干什么吃的,难道就是只知道“钱”??)