2016-12-06 4 views
1

У меня есть ошибка Only variables should be passed by reference на моем APIController.php, я уже прочитал все вопросы об этой ошибке, но ничего не исправил ее.Исключение 'Только переменные должны передаваться по ссылке

Мой код:

$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

Смежные вопросы