首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在register_shutdown_function()中,PHP file_put_contents不能按预期工作

在register_shutdown_function()中,PHP file_put_contents不能按预期工作
EN

Stack Overflow用户
提问于 2016-04-03 18:28:35
回答 1查看 427关注 0票数 1

我在脚本中使用输出缓冲,偶然发现了意想不到的行为。

在我的脚本中,写入文件在其他地方都可以正常工作,但是在进入register_shutdown_function()-function之后就不能这样做了。

我收到一个警告,告诉我没有权限写入该文件。所以我检查了我所在的路径。显然,从进入关闭功能的那一刻起,当前的工作目录就消失了。

我的问题并不是关于如何解决这个问题;正如您所看到的,我只是包含了正确的路径。我的问题是,这是意料之中的行为吗?如果是,背后的逻辑是什么?

我在OSX/MAMP-PRO上如果这很重要的话。还没有在另一个盒子上尝试过。

代码语言:javascript
复制
<?
register_shutdown_function('_lib_bootstrap_end');
ob_start();
_lib_bootstrap_start();
file_put_contents('test1.log','this_one_writes_fine');

function _lib_bootstrap_start()
{
    echo getcwd()."\n"; // prints '/Users/macbook/Documents/WWW';
    file_put_contents('test2.log','this_one_writes_fine');
}

function _lib_bootstrap_end()
{
    global $html;

    file_put_contents('test3.log', 'this_one_triggers_warning');
    $html[] = ob_get_contents();
    $return = implode("\n",$html);
    ob_end_clean();

    echo $return;
    echo getcwd()."\n"; // prints '/';

    file_put_contents('test4.log', 'this_one_triggers_warning');
    // prints 'Warning: file_put_contents(test4.log): failed to open stream: Permission denied in ob_problem.php on line 24'

    file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.'test5.log','this_one_writes_fine');
}
?>
EN

回答 1

Stack Overflow用户

发布于 2016-04-03 21:57:31

根据manual page for register_shutdown_function(),这种行为是预期的

脚本的

工作目录可能会在某些web服务器(如Apache )的关闭功能中更改。

我不知道这背后的原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36384308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档