QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2025|回复: 9

遇到一超难问题,用php怎么获取远程调用者ip,内详,高手进

[复制链接]
发表于 2004-1-10 05:09:35 | 显示全部楼层 |阅读模式
写了一个php程序,对外提供的接口是在客户网站网页中嵌入一个表单域,表单提交的数据由运行我的程序的服务器处理并返回给客户,但是怎么才能实现对客户网站身份的认证呢?这个身份必须是唯一的并且客户不可改动,其他网站也不可以伪装的,想破脑袋也没有想到好的解决方案,还请高人点化。
发表于 2004-1-10 08:47:14 | 显示全部楼层
比较困难………………
没记得那个变量有调用网站的地址……………

__FILE__里如果被引用是引用文件的名字。
$PHP_SELF 好像也一样,但没说跨服务器会怎么样…………

你看看 $_SERVER[] 的服务器 IP 是哪个机器的??
回复

使用道具 举报

发表于 2004-1-10 11:36:00 | 显示全部楼层
容易啊。可以从request的环境变量中取,phpbb中记录发帖者IP的功能就是这个样子的吧。另外http请求包中还有个reffer的字段,在request参数中也有,代表调用这个地址的网页的地址,你可以限制这个地址只能是你的服务器上的地址。
回复

使用道具 举报

 楼主| 发表于 2004-1-10 16:34:32 | 显示全部楼层
php中记录浏览者ip很容易,但我要的是调用我程序的网站的程序,实际上我的程序还是在我的服务器上执行啊。
靠reffer字段来鉴别是一种方案,也是我目前想到的唯一方案,但这个地址很容易被伪造,起不到多大的辨识作用。  :neutral:
回复

使用道具 举报

发表于 2004-1-10 18:55:12 | 显示全部楼层
你只能找两台机器试验一下了………………
用 phpinfo()
看看那个变量不一样
回复

使用道具 举报

 楼主| 发表于 2004-1-10 18:57:00 | 显示全部楼层
我早试验过了,
回复

使用道具 举报

发表于 2004-1-11 14:30:27 | 显示全部楼层
那就用session或动态序列号来鉴别。
回复

使用道具 举报

发表于 2004-1-11 15:19:32 | 显示全部楼层
用这个试试:
--------------------------------------------------------------------------------
函式:fsockopen()
--------------------------------------------------------------------------------



网路函式库


fsockopen
打开网路的 Socket 连结。

语法: int fsockopen(string hostname, int port, int [errno], string [errstr], int [timeout]);

传回值: 整数

函式种类: 网路系统




内容说明


目前这个函式提供二个 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,12;
        }
        fclose($fp);
}
?&gt;
回复

使用道具 举报

发表于 2004-1-11 16:59:40 | 显示全部楼层
那客户服务器至少得运行这段代码吧,失去了跨平台性,譬如在不支持php的主机上就没法用,郁闷。
回复

使用道具 举报

发表于 2004-1-11 21:45:42 | 显示全部楼层
那只好用应用程序来解决了……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 07:35 , Processed in 0.049748 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表