2016-12-06 112 views
1

我在我的APIController.php上有錯誤Only variables should be passed by reference,我已經閱讀了關於這個錯誤的所有問題,但沒有解決它。異常'只有變量應該通過引用傳遞

我的代碼:

$ip = $_SERVER['REMOTE_ADDR']; 
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) { 
    $ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); 
    $ip = array_pop(end($ip)); 
} 

error.log中:

[2016-12-06 15:43:00] production.ERROR: exception 'ErrorException' with message 'Only variables should be passed by reference' in /var/www/app/Http/Controllers/Api/ApiController.php:33 
Stack trace: 
#0 /var/www/app/Http/Controllers/Api/ApiController.php(33): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2048, 'Only variables ...', '/var/www/app/Ht...', 33, Array) 

謝謝。

回答

2

嘗試數組的末尾元件保存到一個變量然後將它傳遞到方法是這樣的:

$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); 
$ip = end($arr); // <------- This will give you the IP (no need of using array_pop) 

「ErrorException」說明:問題是,即end()需要一個參考,因爲它修改了數組的內部表示(即它使當前的 元素指針指向最後一個元素)。

希望這會有所幫助!

+0

錯誤'ErrorException'與消息'array_pop()期望參數1是數組,字符串給定'在/var/www/app/Http/Controllers/Api/ApiController.php:34 – Pixel

+0

是的錯誤是非常正確的,你應該在array_pop()中傳遞數組'' –

+0

如何修復我的代碼以獲取用戶IP? – Pixel

相關問題