PHP 脚本通过 HTTP 运行,但不通过 HTTPS 运行

PHP 脚本通过 HTTP 运行,但不通过 HTTPS 运行

我在正在进行的项目中遇到了真正的问题,脚本从 HTTP 运行,但不从 HTTPS 运行。

出现这种情况的情况是,当需要权限通过exec()或在服务器上执行命令时passthru(),或者当脚本尝试使用 打开文件时fopen

当使用 HTTPS 时,exec() 和 passthru() 函数返回 127 错误,我认为这是未找到命令错误,并且 fopen 将抛出权限被拒绝异常。

除此之外,我真的无法理解服务器上的设置。我确信他们正在运行 apache,但我在文件中看不到它/etc/group。我认为这是因为他们有 plesk(有一个 psacln 组)。

我真的需要理清这个问题,因为它浪费了我很多时间。但更重要的是,我真的想了解这里发生了什么以及为什么会发生。

有人能告诉我是否可以从 HTTPS 运行这些脚本吗?

操作系统是 Ubuntu,PHP 版本是 5.2.4

非常感谢

有关当前设置的更多信息

httpd.conf is blank


//ports.conf
Listen 80

<IfModule mod_ssl.c>
    Listen 443
</IfModule>


// envvars
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid


// part of apache2.conf where all the configuration seems to be
# These need to be set in /etc/apache2/envvars
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

将 apache_run_user 和 apache_run_group 设置为 www-data 是什么意思?应该将其设置为其他内容吗?- apache 还是 psacln?

更新

我将表单所在目录的权限更改为 777,fopen现在使用的脚本甚至可以从 HTTPS 运行。

显然我需要这样做,但这很糟糕。我应该看看 PHP 属于哪个组吗?为什么 HTTP 和 HTTPS 会有所不同?

答案1

在我看来,这不是组的问题。访问文件的“组”始终是 Apache 的“www-data”组。

我看到的唯一可能性是,为什么在通过 https 执行脚本时必须“chmod 777”所有文件,这是因为您的 https vhost 配置错误。

也许您的 http vhost 文件中有一个指令允许这种访问,并且与您的 https 指令不同。

配置片段会有所帮助。

答案2

您有权访问 Plesk 吗?如果可以,请转到域,然后转到 Web 托管设置,查看是否选中了“使用单个目录来存放 SSL 和非 SSL 内容”。如果没有,则 https 将具有不同的 DocumentRoot(可能是 httpsdocs)。

SSL 有不同的配置文件:/var/www/vhosts/mydomain/conf/vhosts_ssl.conf

编辑任一 conf 文件后,请确保:

sudo /usr/local/psa/admin/sbin/websrvmng -u --vhost-name=mydomain
sudo apache2ctl reload

编辑

另请注意,mydomain/conf 中的 conf 文件中的指令会覆盖 Plesk 的 vhost 配置,因此这些文件中存在一些您无法看到的影响 vhost 的指令。

相关内容