Friday, 3 October 2008

Working Directory in PHP Destructor

最近工作的一个Web项目,需要将目标的工作状态,保持到文件中。尝试着用Constructor和Destructor来解决,一个保存,一个恢复。在开发和发布的过程中,遇到了PHP工作路径的问题。

这里是一段测试代码:

<?php

class ClassA {
function __construct() {
echo "construct\t" . getcwd() . "<br />";
}

function run() {
echo "running\t" . getcwd() . "<br />";
}

function __destruct() {
echo "destruct\t" . getcwd() . "<br />";
}
}

$objA = new ClassA();

$objA->run();

?>

在Windows开发平台下,三个函数给出了所期待的、一致的答案。而在Linux平台下,__destruct()里面给出的工作路径,却是指向了'/'。

这个问题,有人认为是一个Bug,见这里。在PHP的手册中,有这样的说明

Note: Destructors called during the script shutdown have HTTP headers already sent. The working directory in the script shutdown phase can be different with some SAPIs (e.g. Apache).

这样的解释,是可以接受的。实际使用过程中,需要小心注意。在__destruct()里面,如果涉及到FileSystem的操作,避免使用相对路径,应使用绝对路径。

0 Comments:

Post a Comment

<< Home