【问题标题】:Why does switching to secure folder (httpsdocs) break the PHP file upload function为什么切换到安全文件夹(httpsdocs)会破坏 PHP 文件上传功能
【发布时间】:2019-01-12 19:53:39
【问题描述】:

服务器版本:Apache/2.4.34 (Unix) 注意:这不是 Plesk 或控制面板问题。这是一个托管在没有控制面板的 Rackspace 专用服务器上的自定义 PHP 应用程序。

我正在尝试将现有 SSL 证书用于域的多个子目录,但域的体系结构将两个目录分开用于非安全/安全:

httpdocs
httpsdocs

我将所有内容从 httpdocs 复制到 httpsdocs,并使用 .htaccess 强制将流量传输到 https。在我尝试 PHP 文件上传功能之前,一切都很好。

这是从安全方面失败的代码:

$path = "uploaded_files/".$row_query[0].'/'.$file_name;
copy($temp_file, $path);

在进行一些调试时,我发现创建了临时文件: /tmp/phpanKT4N

但我在日志中看到的错误是: 复制(uploaded_files/New Sub Folder/30052_testing.txt):无法打开流:第 108 行 /var/www/vhosts/.com/httpsdocs/demo/resource/add_resource.php 中的权限被拒绝

我尝试将 copy() 更改为 move_uploaded_file() 但这是错误:

PHP Warning:  move_uploaded_file(uploaded_files/test/30054_testing.txt): failed to open stream: No such file or directory in /var/www/vhosts/<thedomain>.com/httpsdocs/demo/resource/add_resource.php on line 111
PHP Warning:  move_uploaded_file(): Unable to move '/tmp/phpOC9YEF' to 'uploaded_files/test/30054_testing.txt' in /var/www/vhosts/<thedomain>.com/httpsdocs/demo/resource/add_resource.php on line 111

我搜索了堆栈,发现所有权必须匹配,但 httpdocs 和 httpsdocs 的权限似乎相同。

/tmp 文件夹归 root:root 所有,就像我说的,这在非安全文件夹中完美运行。非安全和安全上传文件夹是一样的:

httpdocs:

drwxrwxr-x+  8 theuser apache  4096 Sep 22  2015 uploaded_files

https 文档:

drwxrwxr-x+  8 theuser apache  4096 Sep 22  2015 uploaded_files

这是配置、权限问题还是什么?

【问题讨论】:

  • 听起来目录仍然受到限制。 httpdocshttpsdocs 上设置的用户/模组是什么? (家长)他们也一样吗?
  • 另外,您似乎正在尝试将文件移动到 uploaded_files 的子文件夹中...该子文件夹是否存在并且对 apache 用户/组具有相同的写入权限?
  • 我刚刚尝试上传到一个绝对存在并且具有相同所有权和父上传目录的子目录 drwxrwxr-x+ 8 theuser apache 4096 Sep 22 2015 upload_files 子目录 drwxrwxr-x+ 2 theuser apache 4096 2015 年 9 月 22 日 HOA 约定 这适用于不安全的 httpdocs 目录,但不适用于 httpsdocs。我需要在 php.ini 中添加或调整什么以使其在 SSL 中工作吗? httpdocs 和 httpsdocs 中的目录/子目录权限相同,但只有 httpdocs 有效。
  • 一切听起来都应该正常工作 :( 我也只在 SSL 结构中工作,一旦我获得了 apache 用户和 PHP 触及的目录的权限就没有问题。有时我会忘记并制作一个新目录,然后得到这些类型的错误。很好奇这里的问题是什么。
  • 想通了,发布了解决方案。感谢您的帮助

标签: php apache unix ssl upload


【解决方案1】:

想通了...运行以下内容:

首先找到apache的用户:

egrep -i '^user|^group' /etc/httpd/conf/httpd.conf 

结果: 用户阿帕奇 组apache

然后运行它,它解决了 httpsdocs 中的所有 PHP 文件上传问题:

chown -R apache:apache /var/www/vhosts/<thedomain>.com/httpsdocs/
chmod -R g+rw /var/www/vhosts/<thedomain>.com/httpsdocs/

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多