【问题标题】:I get an error when uploading to my server [duplicate]上传到我的服务器时出现错误[重复]
【发布时间】:2015-07-17 16:15:03
【问题描述】:

它在本地主机上运行良好。但是,当我上传到我的服务器时,我收到了这个错误:

警告:move_uploaded_file(uploads/55a92822cc379^0C3C66D7264AB79F9D6963823CCC90CEC2A8221.png):无法打开流:/var/www/chrispantelli.me/public_html/upload/upload.php 第 51 行的权限被拒绝`

警告:move_uploaded_file(): Unable to move '/tmp/phpk7R86o' to 'uploads/55a92822cc379^0C3C66D7264AB79F9D6963823CCC90CEC2A8221.png' in /var/www/chrispantelli.me/public_html/upload/upload.php on line 51`

这是代码:

http://pastebin.com/raw.php?i=9w9hy2Lj

【问题讨论】:

  • 请在此处发布您的代码,以便为将来的 SO 访问者保留。这不是您的代码,而是您的文件权限。

标签: php file-upload


【解决方案1】:

这意味着拥有 php(Web 服务)进程的用户 ID 没有目标文件夹的写入权限。该脚本未列出该目标文件夹是什么,因此请检查以确保 Web 服务所有者在此处具有写入权限(或者,如果另一个用户 ID 拥有该目录,您也可以使用组。)

编辑: 770 => 用户(所有者)有读/写/执行,组是读/写/执行,其他用户没有权限。 例如,如果在您的主机上运行的 http 进程属于“apache”用户 ID,那么如果上传目录也属于“apache”,那么 700 权限将起作用。拥有该目录的用户可以对其进行写入。 如果上传目录由 root 拥有,假设该组是“apache”,那么假设 apache 用户在 apache 组中,770 权限将起作用,因为您也授予组写入权限。

为了找到拥有你的 http 进程的用户,假设你正在运行 apache:

ps -ef |grep http

这应该给你一些看起来像这样的东西:

apache 1234 5678 0 Jul17 ?   10:00:24 httpd

在这种情况下,第一列是拥有该进程的用户。您可以通过以下方式获取该用户的组:

groups apache
apache : apache

这意味着用户标识“apache”是组“apache”的成员。因此,如果是这种情况,请尝试像这样更改上传目录的所有者:

chown apache /path/to/your/uploads/dir

然后您可以将权限更改为 700(因为如果人们从您的网站上传,则 apache 是唯一需要写入权限的 ID。

chmod 700 /path/to/your/uploads/dir

同样,如果另一个用户 id(比如说 root)拥有上传目录,并且您希望保持这种状态,您可以这样做:

chgrp apache /path/to/your/uploads/dir
chmod 770 /path/to/your/uploads/dir

这将授予 apache 组的成员(可能只是一个用户“apache”)对该目录的写入权限,从而允许您上传。

希望这是有道理的。

【讨论】:

  • 那么这可能是 Chmod 770 权限吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-04
  • 2018-05-03
  • 1970-01-01
  • 2016-11-13
  • 2018-04-07
相关资源
最近更新 更多