遇到一超难问题,用php怎么获取远程调用者ip,内详,高手进
写了一个php程序,对外提供的接口是在客户网站网页中嵌入一个表单域,表单提交的数据由运行我的程序的服务器处理并返回给客户,但是怎么才能实现对客户网站身份的认证呢?这个身份必须是唯一的并且客户不可改动,其他网站也不可以伪装的,想破脑袋也没有想到好的解决方案,还请高人点化。 比较困难……………… :?没记得那个变量有调用网站的地址……………
__FILE__里如果被引用是引用文件的名字。
$PHP_SELF 好像也一样,但没说跨服务器会怎么样…………
你看看 $_SERVER[] 的服务器 IP 是哪个机器的?? 容易啊。可以从request的环境变量中取,phpbb中记录发帖者IP的功能就是这个样子的吧。另外http请求包中还有个reffer的字段,在request参数中也有,代表调用这个地址的网页的地址,你可以限制这个地址只能是你的服务器上的地址。 php中记录浏览者ip很容易,但我要的是调用我程序的网站的程序,实际上我的程序还是在我的服务器上执行啊。
靠reffer字段来鉴别是一种方案,也是我目前想到的唯一方案,但这个地址很容易被伪造,起不到多大的辨识作用。:neutral: 你只能找两台机器试验一下了………………
用 phpinfo()
看看那个变量不一样 我早试验过了, :cry: 那就用session或动态序列号来鉴别。 用这个试试:
--------------------------------------------------------------------------------
函式:fsockopen()
--------------------------------------------------------------------------------
网路函式库
fsockopen
打开网路的 Socket 连结。
语法: int fsockopen(string hostname, int port, int , string , int );
传回值: 整数
函式种类: 网路系统
内容说明
目前这个函式提供二个 Socket 资料流介面,分别为 Internet 用的 AF_INET 及 Unix 用的 AF_UNIX。当在 Internet 情形下使用时,参数 hostname 及 port 分别代表网址及埠号。在 UNIX 情形可做 IPC,hostname 参数表示到 socket 的路径,port 设定为 0。可省略的 timeout 选项表示多久没有连上就中断。在使用本函式之后会传回档案指标,供档案函式使用,包括 fgets()、fgetss()、fputs()、fclose() 与 feof()。参数 errno 及 errstr 也是可省略的,主要当做错误处理使用。使用本函式,会使用搁置模式 (blocking mode) 处理,可用 set_socket_blocking() 转换成无搁置模式。
使用范例
本例用来模拟成 HTTP 连线。
<?php
$fp = fsockopen("php.wilson.gs", 80, &$errno, &$errstr, 10);
if(!$fp) {
echo "$errstr ($errno)<br>\n";
} else {
fputs($fp,"GET / HTTP/1.0\nHost: php.wilson.gs\n\n");
while(!feof($fp)) {
echo fgets($fp,128);
}
fclose($fp);
}
?> 那客户服务器至少得运行这段代码吧,失去了跨平台性,譬如在不支持php的主机上就没法用,郁闷。 那只好用应用程序来解决了……
页:
[1]