0

您好,我有 xinetd 的这项服务:

service MyService 
{
port = 8881
socket_type = stream
wait = no
user = nobody
server = /usr/local/bin/php
server_args = /home/file/public_html/php/port/test1.php
log_on_success + = USERID
log_on_failure + = USERID
disable = no
}

我的文件 test1.php:

<? php
$handle = fopen ('php :/ / stdin', 'r');
$input = fgets ($ handle);
fclose ($ handle);
$ip = $_SERVER['REMOTE_ADDR']
echo "Hello {$ input} your IP: $ip";
?>

我无法获取远程IP:

$ip = $ _SERVER['REMOTE_ADDR']

因为我可以得到远程IP??

4

3 回答 3

1

解决方案是修改 PHP:

$IpX = $_SERVER['REMOTE_HOST'] ?$_SERVER['REMOTE_HOST'] : $_SERVER['HOST'];

<? php
$IpX = $_SERVER['REMOTE_HOST'] ? $_SERVER['REMOTE_HOST'] : $_SERVER['HOST'];
$handle = fopen ('php :/ / stdin', 'r');
$input = fgets ($ handle);
fclose ($ handle);
echo "Hello {$ input} your IP: $IpX";
?>

感谢: 贡萨洛·阿尤佐

于 2012-07-17T19:35:37.420 回答
1

我测试并发现:

Apache httpd 将“ REMOTE_ADDR ”和“ REMOTE_PORT ”以及更多其他环境传递给 CGI 程序。

但是 xinetd 只将“ REMOTE_HOST ”环境传递给 xinetd.d/xxxx 中“server”定义的我的程序。而且,“REMOTE_HOST”看起来像“::ffff:192.168.1.23”,而不是纯 IP 地址。(顺便说一句:这是什么意思 ?)

所以:xinetd + 程序只能充当一个很小的 ​​httpd 模块

于 2015-04-23T07:00:01.157 回答
0

$REMOTE_ADDR是一个环境变量,由 Web 服务器设置为 CGI 协议的一部分。您直接在套接字上运行。这里没有网络服务器。没有设置这个变量(或者实际上是Laxus在评论中建议的变量)并不奇怪。

如果您想要远程地址,则必须使用getpeername自己获取。

于 2012-07-12T23:39:30.233 回答