我在正在进行的项目中遇到了真正的问题,脚本从 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 的指令。