PHP include_once 文件变更所属用户时产生的bug

<?php
//test.php
@unlink('/tmp/abc.php');
var_dump(@include_once('/tmp/abc.php'));
swritefile('/tmp/abc.php','<?php echo 123;');
var_dump(file_exists('/tmp/abc.php'));
var_dump(include_once('/tmp/abc.php'));

function swritefile($filename, $writetext, $openmod='w')
{
    if (@$fp = fopen($filename, $openmod)) {

        flock($fp, 2);

        fwrite($fp, $writetext);

        fclose($fp);

        return true;

    }
}

针对以上代码,分三次运行:

  • 访问test.php,输出如下
bool(false) bool(true) 123int(1)
  • 更改生成文件所属用户chown vaxili:vaxili /tmp/abc.php.,然后访问test.php输出如下
123int(1) bool(true) bool(true)
  • 删除生成的文件rm /tmp/abc.php ,访问test.php,输出如下:
bool(false) bool(true) bool(true)

注意到第三次访问时,并没有 123 输出,但是查看文件是否存在返回的是True

这是什么原因呢?

阅读 1.6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题