为什么realpath()仅适用于某些文件夹?

时间:2013-07-16 12:44:42

标签: php plesk realpath

我正在使用PHP的realpath()函数,想知道为什么我得到以下输出:

bool(false)
string(48) "/var/www/vhosts/website.co.uk/httpdocs"
bool(false)
string(48) "/var/www/vhosts/website.co.uk/httpdocs"

运行此脚本时:

<?php
error_reporting(-1);
header('content-type: text/plain');

var_dump(realpath('/var/www/vhosts/website.co.uk/application'));
var_dump(realpath('/var/www/vhosts/website.co.uk/httpdocs'));
var_dump(realpath(dirname(__FILE__) . '/../application'));
var_dump(realpath(dirname(__FILE__) . '/../httpdocs'));

exit;

具有以下文件权限:

drwxr-x---  5 username  psaserv 4096 Jul 16 08:22 application
drwxr-x--- 10 username  psaserv 4096 Jul 16 13:34 httpdocs

注意:

  • 这是Plesk系统
  • 脚本以apache用户
  • 运行
  • apache用户属于psaserv群组

1 个答案:

答案 0 :(得分:1)

Plesk和openbase_dir限制

除非plesk在过去几年中发生了变化 - it sets open_basedir restrictions,否则您只能访问httpdocs文件夹:

  

默认的open_basedir设置使您能够为每个网站写入2个位置。应该没有理由写入任何其他文件夹。 [...]

     
      
  • 的/ tmp
  •   
  • /var/www/vhosts/domain.com/httpdocs
  •   

因此,如果请求尝试读取/写入任何其他位置 - 它将无法执行此操作,因此realpath将对httpdocs文件夹之外的任何位置返回false。


如果您希望在引用的论坛帖子中看到相关的脚本,则会移动并在此处找到:unplesk