我在脚本中使用输出缓冲,偶然发现了意想不到的行为。
在我的脚本中,写入文件在其他地方都可以正常工作,但是在进入register_shutdown_function()-function之后就不能这样做了。
我收到一个警告,告诉我没有权限写入该文件。所以我检查了我所在的路径。显然,从进入关闭功能的那一刻起,当前的工作目录就消失了。
我的问题并不是关于如何解决这个问题;正如您所看到的,我只是包含了正确的路径。我的问题是,这是意料之中的行为吗?如果是,背后的逻辑是什么?
我在OSX/MAMP-PRO上如果这很重要的话。还没有在另一个盒子上尝试过。
<?
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');
}
?>发布于 2016-04-03 21:57:31
根据manual page for register_shutdown_function(),这种行为是预期的
脚本的
工作目录可能会在某些web服务器(如Apache )的关闭功能中更改。
我不知道这背后的原因。
https://stackoverflow.com/questions/36384308
复制相似问题