2016-12-06 88 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

相关问题