【问题标题】:file_exists with symlink-ed files?file_exists 带有符号链接的文件?
【发布时间】:2011-02-23 05:43:29
【问题描述】:

对于我们的应用程序,我们需要将文件存储在根目录之上,以便流媒体软件可以访问它们。

我成功地创建了一个符号链接:

/var/www/vhosts/myhost.com.au/httpdocs/fileserver/videostream/

到:

/usr/local/MediaServer/content/

PHP 会按照指向根目录上方真实文件的符号链接愉快地处理我的原始视频。

但是,如果我尝试

file_exists('/var/www/vhosts/myhost.com.au/httpdocs/fileserver/videostream/myfile.mp4') 

我遇到了各种“open_basedir 限制生效”错误。

有没有办法解决这个问题?还是我只需要假设我的数据库条目是正确的并说文件已处理,它实际上是。

尝试 fopen 会更好还是仍然存在 basedir 限制?

我们位于具有 root 权限的专用主机上,因此我们可以做任何需要的事情。

谢谢。


找到了解决方法,但没有解决问题:-)

我实际上可以使用 CURL 来拉入实际文件的标题,这让我知道它是否存在。另外一种方法是使用 CURL 检查该文件的流媒体服务器自定义 URL 是否存在。问题解决了,但不是我想要的那样。

【问题讨论】:

  • 如果你自己有服务器,为什么不关闭open_basedir限制?
  • 在我的 php.ini 中它被注释掉了——我会取消注释并将其设置为根路径吗?我们在服务器上确实有一些客户端站点,这可能会引发一些安全问题。
  • 您可以在 .htaccess 文件中为您的网站关闭它,并在 php.ini 中为您的其他网站保留它。

标签: php open-basedir


【解决方案1】:

您应该查看is_link 而不是file_exists

【讨论】:

    【解决方案2】:

    如果您只想检查链接是否存在(而不是链接目标存在,但由于 basedir 限制,您无法访问该链接目标),您可以使用 readlink 函数而不是 file_exists。如果它返回一个字符串,则链接存在,如果它返回false,则链接很可能不存在。

    if (@readlink($filename) !== false)
    {
        echo "Yay!";
    }
    

    理论上 basedir 限制不应该在这里触发,但我不确定。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2015-07-11
      • 2012-12-14
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多