0

我正在尝试使用 SELECT INTO OUTFILE 将文件写入另一个目录中的自定义目录,该目录比我的文档根目录高一级。我可以写信到 /tmp,所以我知道其他一切都在工作。

我正在使用文件的绝对完整路径。我可以使用 PHP 创建目录并 chmod 到 0777。目录创建成功,模式设置正确(通过 SSH 和 FTP 查看)。

我要使用的路径示例:

/var/www/vhosts/mysite/private_www/data_export/newdir/

我原以为只要目录是世界可读/可写/可执行的,MySQL 就可以写入它。但我仍然收到此错误。

无法创建/写入文件(错误代码:13)

我发现了很多关于此错误的帖子,但除了写入 /tmp之外没有其他解决方案。但是,如果我写入 /tmp,我必须添加更多代码来处理文件名,然后将文件复制到我想要的位置。

我认为也许我需要一条不同于 PHP 的 MySQL 路径。有没有办法检查 MySQL 将什么视为服务器根目录?但是,我不确定这可能是问题所在,因为我能够使用相同的路径加载数据输入文件。

我的设置

  • 中央操作系统 6
  • PHP 5.3
  • MySQL 5.5
  • 带 Plesk 控制面板的专用服务器
  • PHP 作为 Apache 模块运行

我错过了什么?

4

1 回答 1

1

尽管您已在目标目录上正确设置了可写权限,但为了让用户将目录树遍历到该目标目录,您必须为该用户在通向目标目录的每个更高目录上提供执行权限。这是因为在目录上下文中,执行实际上意味着查看内部以列出内容

这意味着路径中每个目录的最小值(忽略所有者/组权限)

/var/www/vhosts/mysite/private_www/data_export

将是0751,其中 final1是“其他”用户类别的执行权限。因此,请验证目标路径中的每个目录是否至少具有 MySQL 服务器用户的执行权限(可能mysql在 CentOS 系统中)。

允许在所有这些目录上执行(列表内容)确实意味着任何系统用户都可以检查它们,而不仅仅是 MySQL 用户。在决定最终路径的位置时请考虑这一点。如果可以,您可能希望将其与 www 文件分开。

在您的设置中,您已将目标目录设置为0777, world-readable, world-writable。如果可以避免,那是不可取的。由于 MySQL 能够写入它是真正需要的,因此请考虑将其组所有权更改为mysql组。这将使您能够避免使其世界可写。

# Give group ownership to mysql
chown :mysql /var/www/vhosts/mysite/private_www/data_export/newdir
# And just make it writable by the group, not everyone
chmod 0770 /var/www/vhosts/mysite/private_www/data_export/newdir
于 2013-12-09T20:55:26.190 回答