【问题标题】:PHP file not writable in 777 directoryPHP文件在777目录中不可写
【发布时间】:2014-09-13 22:25:13
【问题描述】:

我正在使用 CodeIgniter 框架运行一个网站,并且我有多个页面可供用户上传文件(个人资料图片等)。

在我最近删除并替换了服务器上的上传文件夹之前,这一直运行良好。我使用 FileZilla 将权限设置为 777,然后确认权限实际上是在之后设置的。我仍然收到 CI 错误 上传目标文件夹似乎不可写。

此错误来自 system/core/Common.php(CI 框架的一部分)中指定行的以下函数:

if ( ! function_exists('is_really_writable'))
{
    function is_really_writable($file)
    {
        // If we're on a Unix server with safe_mode off we call is_writable
        if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE)
        {
            return is_writable($file);
        }

        // For windows servers and safe_mode "on" installations we'll actually
        // write a file then read it.  Bah...
        if (is_dir($file))
        {
            $file = rtrim($file, '/').'/'.md5(mt_rand(1,100).mt_rand(1,100));

            if (($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
            {
                return FALSE; // RETURNS FALSE HERE <---
            }

            fclose($fp);
            @chmod($file, DIR_WRITE_MODE);
            @unlink($file);
            return TRUE;
        }
        elseif ( ! is_file($file) OR ($fp = @fopen($file, FOPEN_WRITE_CREATE)) === FALSE)
        {
            return FALSE;
        }

        fclose($fp);
        return TRUE;
    }
}

我不知道是什么原因造成的。文件夹路径和权限和以前一模一样(实际上权限以前更严格),我没有更改上传表单的脚本。当我使用 Wamp 进行本地测试时,一切正常。

【问题讨论】:

  • 只是为了好玩,试试fopen($file, 'w+') 看看有没有什么不同
  • @Machavity 这给了我完全相同的结果。此外,如果我只是让函数返回 true,则会收到错误 尝试将上传的文件移动到最终目的地时遇到问题。

标签: php codeigniter upload


【解决方案1】:

您是否检查过 uploads 目录的所有者和组?如果您在 Apache 下运行您的服务器,请使用 chown 命令将组更改为您的 apache 组(通常是 www-datahttp)。

【讨论】:

  • 你能给我这个确切的命令吗?我不知道该怎么做。
  • chown -R 用户名:组名上传
  • 看起来我无权在服务器上执行此操作(我正在使用我大学的学生网络空间)。它说changing ownership of 'folder': Operation not permitted
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 2015-09-22
  • 1970-01-01
相关资源
最近更新 更多