我的开放式网站出现问题。我想通过直接管理员运行一个cron-job。我在电子邮件中收到了这封信:
PHP注意:未定义索引:SERVER_PORT in 第59行/xxx/xxx/xxx/domain.com/public_html/system/startup.php
代码:
// Check if SSL
if ((isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) || $_SERVER['SERVER_PORT'] == 443) {
$_SERVER['HTTPS'] = true;
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
$_SERVER['HTTPS'] = true;
} else {
$_SERVER['HTTPS'] = false;
}
答案 0 :(得分:2)
似乎是system / startup.php中opencart代码中的一个错误。 您可以看到未解决的问题here
以下解决方案对我有用:
改变行
@Html.TextBoxFor(model => model.ImagePath,
new { type = "file", multiple = "multiple", NAME = "files" })
与
if ((isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) || $_SERVER['SERVER_PORT'] == 443) {
最好使用vqmod执行此操作,这样就不会更改核心文件。
答案 1 :(得分:1)
我认为真正的问题是该命令是从cron调用的,而不是从你的web服务器调用的(这将填充_SERVER
数组)。在PHP文件中,除SERVER_PORT
之外的所有其他键(例如_SERVER['DOCUMENT_ROOT']
)都填充了合理的值(如果未设置)。
尝试在违规行(59)之前添加以下行:
if (!isset($_SERVER['SERVER_PORT'])) {
$_SERVER['SERVER_PORT'] = getenv('SERVER_PORT');
}
并在运行PHP命令之前将SERVER_PORT
定义为环境变量。如果您的端口始终为80
或443
,您也可以直接设置它,而不是从环境中获取它。
答案 2 :(得分:0)
更改此if ((isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) || $_SERVER['SERVER_PORT'] == 443) {
到此:
if ((isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) || (isset($_SERVER['SERVER_PORT'])) && ($_SERVER['SERVER_PORT'] == 443)) {
说明:好像在您的$_SERVER
数组上,SERVER_PORT
不可用 - 因此PHP正在显示通知。您可以通过在检查值是否等于443之前检查数组中是否存在该键来修复它。