15

是否可以执行以下操作?

register_shutdown_function('my_shutdown');
function my_shutdown ()
{
    file_put_contents('test.txt', 'hello', FILE_APPEND);
    error_log('hello', 3, 'test.txt');
}

似乎不起作用。顺便说一句,我在 PHP 5.3.5 上。

4

2 回答 2

24

这取决于您使用的是哪个 SAPI。register_shutdown_function()的文档页面指出,在某些服务器(如 Apache)下,脚本的工作目录会发生变化。

该文件被写入,但不是您的.php文件所在的位置(DocumentRoot),而是在 Apache 服务器的文件夹中(ServerRoot)。

为防止这种情况,您需要对工作文件夹更改进行某种热线。就在您的脚本开始执行时(在前几行中),您需要以某种方式存储真正的工作文件夹。创建一个常量 withdefine()是完美的。

define('WORKING_DIRECTORY', getcwd());

您需要像这样修改关闭功能部分:

function my_shutdown ()
{
    chdir(WORKING_DIRECTORY);

    file_put_contents('test.txt', 'hello', FILE_APPEND);
    error_log('hello', 3, 'test.txt');
}

register_shutdown_function('my_shutdown');

这样,调用函数时工作文件夹会立即变回真实文件夹,并且test.txt文件将出现在DocumentRoot文件夹中。

一些修改:最好在函数声明register_shutdown_function() 后调用。这就是为什么我把它写在函数代码下面,而不是上面。

于 2012-06-02T10:44:27.857 回答
1

检查这个:(从这里

Note:

Working directory of the script can change inside the shutdown function 
under some web servers, e.g. Apache. 

检查它getcwd();

于 2012-06-02T10:40:18.153 回答