是否可以执行以下操作?
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 上。
这取决于您使用的是哪个 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()
后调用。这就是为什么我把它写在函数代码下面,而不是上面。
检查这个:(从这里)
Note:
Working directory of the script can change inside the shutdown function
under some web servers, e.g. Apache.
检查它getcwd();