标题重写为:权限不足时,上传的文件无法移动
P粉210405394
P粉210405394 2023-09-07 23:51:33
0
1
459

我有一个PHP脚本,我可以通过它上传文件,并尝试将其从/tmp移动到test/(相对路径,位于我的项目文件夹中,例如/var/www/html/myproject/test将是绝对路径)。当这种情况发生时,我会收到以下错误。

move_uploaded_file(test/test.csv):无法打开流:权限被拒绝,位于/var/www/html/myproject/import.php的第X行,引用者:http://192.168.1.1/myproject/import2.php

此脚本由apache用户运行,该用户拥有/test的所有权(apache所有者和apache组都拥有此目录),具有rwx权限。

我已经检查了以下内容:

  • safe_mode被禁用。
  • open_basedir未设置。
  • file_uploads已启用。
  • upload_max_filesize为2MB,文件大小为~50KB。
  • post_max_size为8MB,我的POST请求与此不接近。
  • 使用绝对路径而不是相对路径。
  • is_dir("test/")返回true。
  • is_writable("test/")返回false。
  • 在php脚本中:打印文件所有者(要移动的文件)、文件夹所有者(test/)、文件权限和文件夹权限。文件/文件夹所有者显示为apache。文件权限为600,因此所有者可以读取和写入。文件夹权限为755,因此所有者可以读取、写入和执行。
  • ps -aux | grep apache。将apache错误日志中的PID与正在运行的进程匹配,该进程由apache用户拥有。因此,这确认了该进程在apache下运行。
  • getcwd()和__DIR__都返回正确的目录/var/www/html/myproject。
  • dirname(__FILE__)返回文件的正确绝对路径
  • 检查file_exists($_FILES['file']['tmp_name'])返回true
  • 检查$_FILES['file']['error'](我要移动的文件)返回0,上传没有问题。
  • 使用is_writable("/tmp")检查源文件夹(/tmp)是否可写,返回true。
  • 尝试在test/上临时使用chmod -R 777,仍然显示权限被拒绝且不可写。
  • 暂时禁用了防病毒/EDR
  • 检查“test/”的安全上下文。返回结果为:“unconfined_u:object_r:httpd_sys_content_t:s0”。这些都不是问题(在下面的回复中有解释)。
  • 检查是否安装了可能阻止移动文件的安全相关应用程序。这些应用程序未安装:AppArmor、grsecurity、Tomoyo Linux和Smack。
  • 在php脚本中使用fopen() / flock()函数确认我要移动的文件没有被锁定。
  • 使用is_uploaded_file()函数确认我正在尝试移动一个已上传的文件(在这一点上我已经快疯了,只是尝试我能想到的任何方法)。当然,这返回true。

P粉210405394
P粉210405394

全部回复(1)
P粉564192131

move_uploaded_file需要两个参数。 1:你想要上传的文件 2:放置文件的绝对路径 3:请确保上传目录具有适当的所有权和权限(注意:如果您使用Apache作为代理,目录所有权应属于apache2的用户:组)。

示例:move_uploaded_file($_FILES['my_file_field_name']['tmp_name'], "/var/www/html/myproject/test/upload_dir/" . $_FILES['name']['tmp_name']);

阅读更多:https://www.php.net/manual/pt_BR/function.move-uploaded-file.php

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!