How to get the client's IP
I tried to add RKA\Middleware\IpAddress and get the client's IP, but it doesn't work. $_SERVER['REMOTE_ADDR'] also doesn't work. How to fix this?
Comet always stays in memory and do not work nor changes GLOBALS and SERVER arrays from request to request. So you should use some workaround like this Workerman method to get real IP:
https://github.com/walkor/workerman-manual/blob/master/english/src/worker-development/get-remote-ip.md
Thanks for great question, we should implement more straightforward way to get that info.
// Main Loop
$worker->onMessage = static function($connection, WorkermanRequest $request)
{
try {
$_SERVER['REMOTE_ADDR'] = $connection->getRemoteIp();
Add please. $connection object is not available in $app container.
As of latest Comet v1.1.2 you can get the client's IP address from REMOTE_ADDR attribute of ServerParams:
$params = $request->getServerParams(); $remote_ip = $params['REMOTE_ADDR'];
Привет!
У меня тоже проблема получить IP адрес юзера $request->getServerParams(); возвращает другой набор переменных.
array ( 'SHELL' => '/bin/bash', 'PWD' => '/home/u_dev/app', 'LOGNAME' => 'u_dev', 'XDG_SESSION_TYPE' => 'tty', 'MOTD_SHOWN' => 'pam', 'HOME' => '/home/u_dev', 'LANG' => 'en_US.UTF-8', 'LS_COLORS' => 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:', 'SSH_CONNECTION' => '80.100.180.120 1029 50.190.10.100 22', 'LESSCLOSE' => '/usr/bin/lesspipe %s %s', 'XDG_SESSION_CLASS' => 'user', 'TERM' => 'xterm-256color', 'LESSOPEN' => '| /usr/bin/lesspipe %s', 'USER' => 'u_dev-demort', 'SHLVL' => '1', 'XDG_SESSION_ID' => '1669574', 'XDG_RUNTIME_DIR' => '/run/user/1001', 'SSH_CLIENT' => '80.100.180.120 1029 22', 'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', 'DBUS_SESSION_BUS_ADDRESS' => 'unix:path=/run/user/1001/bus', 'SSH_TTY' => '/dev/pts/1', 'OLDPWD' => '/home/u_dev, '_' => '/usr/bin/php', 'PHP_SELF' => 'app.php', 'SCRIPT_NAME' => 'app.php', 'SCRIPT_FILENAME' => 'app.php', 'PATH_TRANSLATED' => 'app.php', 'DOCUMENT_ROOT' => '', 'REQUEST_TIME_FLOAT' => 1636104784.513857, 'REQUEST_TIME' => 1636104784, 'argv' => array ( 0 => 'app.php', 1 => 'start', ), 'argc' => 2, )
SSH_CLIENT - В принципе отдает IP но не чистый на край конечно его можно использовать но меня смутило что в твоем примере есть даже переменная REMOTE_ADDR Работает через Nginx по документации сделал
`http {
upstream app {
server http://path.to.your.app:port;
}
server {
listen 80;
location / {
proxy_pass http://app;
proxy_redirect off;
}
}
}`