【问题标题】:Symlink breaking CodeIgniter upload library符号链接破坏 CodeIgniter 上传库
【发布时间】:2011-08-13 21:37:23
【问题描述】:

我的网络应用程序的目录结构位于如下目录中:

在 /home/staging 中:

proj
proj-builds

在 /home/staging/proj 内:

uploads
www -> /home/staging/proj-builds/b-119/www

在 /home/staging/proj-builds 内:

proj-b922
proj-b921
...

我将www 设为proj 的最新b-#/www 目录的符号链接,该目录位于proj 目录之外。

尝试使用 Upload 类上传内容时,我收到此错误:“上传路径似乎无效”

当目录没有符号链接时不会发生这种情况。

Apache vhost 指向 www 符号链接。

知道为什么会发生这种情况以及如何解决它吗?

【问题讨论】:

    标签: php linux apache codeigniter symlink


    【解决方案1】:

    查看符号链接解析...

    自 PHP 4.0.2 起,所有符号链接都已解析,这意味着您放入 /home/staging/proj/www/ 文件夹的脚本(例如:myscript.php)将“看到”自身,而不是 /home/staging/proj/www/myscript.php,而是 /home/staging/proj-builds/b-119/www/myscript.php 和如果脚本希望在预先固定的位置看到自己,这可能会导致一些问题。

    请注意,对于 Windows 下的 PHP 5.2.x,符号链接仍未解析,而对于 Windows 下的 5.3.x,符号链接已解析。在其他类 Unix/Linux 操作系统下,大多数情况下都可以解决。

    你可以用这个...

    <?php print "__FILE__ = " . __FILE__ . "<br />\n"; ?>
    

    ...自己查看,将其放入不同位置的文件中。

    同样的原则也适用于 include/require 语句。

    因此,如果您使用的代码希望在固定(可能在配置中定义)位置看到脚本或有权访问文件夹,例如:/home/staging/proj/www/,它不会在预期的地方找到它。

    解决方案是以不同方式链接构建或以不同方式设置配置。

    【讨论】:

      【解决方案2】:

      我能想到至少两种可能的解决方案:

      1. 您可能有一个简单的权限问题。 Apache 是否具有对该文件夹和所有父文件夹的完全读取权限?
      2. 您的服务器可以配置为忽略符号链接。确保FollowSymLinks 已启用(并且您了解所涉及的风险)。

      此外,如果您正在处理上传,PHP 可能会受到限制或限制您将文件保存在当前目录之外,例如,Safe Mode

      【讨论】:

      • 权限都很好。我不确定如何配置 FollowSymLinks。我在 www 目录中有一个 .htaccess 文件。但是 www 目录本身是 proj-b# 目录中 www 目录中的符号链接。
      • 您只需将Options +FollowSymLinks 添加到.htaccess 文件中。我刚刚想到了另一种解决方案:您可能需要在您的网站配置中添加一个&lt;Directory&gt; 标签,以允许访问目标目录。
      猜你喜欢
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      相关资源
      最近更新 更多