2016-06-19 47 views
-1

我在打開購物車網站時遇到問題。我想通過直接管理運行一個cron-job。而我得到這個在我的電子郵件:PHP注意:未定義的索引:SERVER_PORT位於/xxx/xxx/xxx/domain.com/public_html/system/startup.php 59行上

PHP Notice: Undefined index: SERVER_PORT in /xxx/xxx/xxx/domain.com/public_html/system/startup.php on line 59

代碼:

// 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

可能重複[PHP:「注意:未定義的變量」和「注意:未定義的索引」](http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined-索引) – andrewsi

+0

您不會提供有關您的cron作業的很多信息,但是'SERVER_PORT'(連同其他一些$ _SERVER鍵)在命令行中沒有意義,因此不存在。 –

回答

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 array,SERVER_PORT不可用 - 所以PHP正在顯示通知。你可以通過在檢查數組是否等於443之前檢查數組中是否存在密鑰來解決它。

+0

你好穆罕默德, 我取代了它。現在我收到以下錯誤: PHP解析錯誤:語法錯誤,意外的'if'(T_IF)在/xxx/xxx/xxx/domain.com/public_html/system/system/startup.php 59行上 –

+0

穆罕默德您好,再次感謝您的回覆,當我更換代碼時,整個網站不再工作。所以我認爲這也是行不通的。 –

1

我相信真正的問題是命令是從cron調用的,而不是從你的web服務器調用的(它會填充_SERVER陣列)。在PHP文件中,除SERVER_PORT(如_SERVER['DOCUMENT_ROOT'])之外的所有其他鍵(如果未設置)都填充合理的值。

嘗試違規一個(59)之前添加下列行:

if (!isset($_SERVER['SERVER_PORT'])) { 
    $_SERVER['SERVER_PORT'] = getenv('SERVER_PORT'); 
} 

並定義SERVER_PORT作爲運行PHP命令之前的環境變量。如果您的端口始終是80443,您也可以直接設置它,而不是從環境中獲取它。

1

它似乎是系統/ startup.php中的opencart代碼中的一個錯誤。 你可以看到一個開放的問題here

按照我的解決方案所做的工作:
變線

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['HTTPS']) && $_SERVER['SERVER_PORT'] == 443)) { 

它,如果你使用vqmod所以你不這樣更好」不要更改核心文件。