2009-12-08 85 views
5

我打算创建访客唯一ID并命名为日志文件,因为现在我使用IP访问者作为日志文件名即日志/ 127.0.0.1.php但我认为这不是不够因为某些访客使用共享PC的IP地址。创建访客唯一ID?

访客日志文件本身就是访问者本身配置的设置位置,所以我打算添加另一个唯一ID来标识每个不同的访问者,所以我们假设日志文件为: logs/127.0.0.0.1-t3451dq.php ,所以只要-t3451dq作为唯一的ID 作为访客浏览我的网站上唯一的日志文件(因为我使用纯文本)

目前我使用的设置配置为每个用户:

<? 
$filename = "./logs/".$_SERVER['REMOTE_ADDR'].".php" ; //out put logs/127.0.0.1.php 
$data stripcslashes($data); 
// each Visitor configuration here... 
// bla...bla... 

/* Writing file configurations */ 
    $buat = fopen($filename, "w+"); 
    fwrite($buat, "$data"); 
    fclose($buat); 
?> 

所以我需要$ filename将$ unique ID添加为其日志文件的名称。任何想法如何做到这一点?

+0

噢我忘了告诉大家,在我的网站并不需要resitered作为一个成员......独特的访问者日志文件意味着可匿名用户。但如何识别未知的IP地址并给出唯一的ID? – jones 2009-12-08 09:52:40

+1

有没有想过只使用cookies,如果你只需要存储用户特定的配置? – 2009-12-08 10:22:38

+0

是的,我想使用可能的方式... – jones 2009-12-08 16:30:06

回答

9

尝试uniqid

您可以将此唯一ID存储在用户会话中或cookie中。

例(未测试)

session_start(); 
if(!isset($_SESSION['uniqueID'])) 
{ 
    $_SESSION['uniqueID'] = uniqid(); 
} 
$filename = "./logs/".$_SESSION['uniqueID'].$_SERVER['REMOTE_ADDR'].".php" ; 

使用一个会话将意味着,如果同一用户关闭浏览器(或会话过期),他们将获得一个新的ID,这可能是也可能不是你想。

如果你想要一个更持久的追踪器,那么你可能会更好地使用cookie,并将该ID存储在cookie中(如果不存在cookie,则创建一个新的ID)。

if(!isset($_COOKIE['uniqueID'])) 
{ 
    $expire=time()+60*60*24*30;//however long you want 
    setcookie('uniqueID', uniqid(), $expire); 
} 
$filename = "./logs/".$_COOKIE['uniqueID'].$_SERVER['REMOTE_ADDR'].".php" ; 

如果您不能使用cookies/session,那么您可能需要在URL查询字符串中传递ID,例如mypage.php?id = 35dfgdfg3434

+0

非常感谢你饼干...... 我看你上面给出的URL链接,但也有很多例子,我非常新手PHP代码,所以我搞不清哪一个更适合修复我的情况,也许这里有一个人可以给我清晰的示例代码,所以我得到我的网站访问者唯一ID作为日志文件名称的解决方案,再次感谢您 – jones 2009-12-08 10:34:12

+0

我已经添加了一些代码,可能会有所帮助。按原样提供。 – row1 2009-12-08 13:11:21

+0

尼斯输入,我尝试您的两个例子的代码,但我遇到了一些麻烦,它不会自动创建日志文件了 警告:FOPEN(。/logs/4b1e7d0f88597127.0.0.1.php)[function.fopen]:未能打开流:第35行的C:\ xampp \ htdocs \ games \ inc \ iplog.conf.php中没有这样的文件或目录 警告: fwrite():提供的参数不是第36行的C:\ xampp \ htdocs \ games \ inc \ iplog.conf.php中的有效流资源 为什么? – jones 2009-12-08 16:27:25

0

从他的IP和他第一次进入页面时创建一些东西。这应该是独一无二的。

+0

当然你是,但正如我之前所说,使用IP地址只有它不够接近,因为许多用户也使用共享IP为许多访问者,所以使用会话ID或cookie这可以确保独特的 – jones 2009-12-08 16:34:20

+1

,这就是为什么我说,他第一次进入该页面时,使IP *和*。来自相同IP的两个用户在同一毫秒内不太可能进入页面。 – TheHippo 2009-12-08 17:20:13

0

你有两个简单的选择:uniqid或者您正在创建一个文件tempnam

的tempnam例如:使用日志文件对于这种类型的使用

function log($string, $userIP = null, $filename = null){ 
    // Check if filename exists 
    if(!file_exists(LOG_PATH.$filename)){ 
    $filename = tempname(LOG_PATH, $userIP.' - '); 
    if(!$filename){ 
     return false; 
    } 
    } 
    // write log into file 
    $file = file_put_contents($filename, $string); 
    if($file === false || $file != strlen($string)){ 
    return false; 
    } 
    return $filename 
} 
+0

感谢您的关注,但抱歉,您有一些使用uniqid和tempnam的有经验的例子吗? – jones 2009-12-08 16:37:04

+0

我尝试使用临时名称,我看到的结果是临时名称无意中重新生成日志文件的名称,不是每次你点击并刷新网站相同...当你看到我的评论下面我尝试使用会话ID和饼干,但我发现问题,当我打电话从另一个文件使用包括或要求 – jones 2009-12-10 05:17:13

0

是不必要的,这是容易得多,只是将这种类型的数据分流到数据库。如果它只是暂时的数据,然后使用Cookies和/或会话

+0

好的,谢谢.. 但是当使用cookie和/或会话id作为日志临时文件作为用户配置请求的临时日志永远不会完成。即 我把这段代码放在另一页 $ filelog1 =“./logs/".$_COOKIE['uniqueID']."_".'__SERVER['REMOTE_ADDR'].".php”; $ filelog2 =“./l0g5/default.php”; \t if(file_exists($ filelog1)){ require_once $ filelog1; } else { require_once $ filelog2; } echo“$ filelog1,$ filelog2”; //测试 浏览器回应说: 该网站以永不完整的方式重定向请求。这个问题是什么? – jones 2009-12-10 05:10:38