在页面上创建重定向连接的日志

时间:2013-10-31 09:16:33

标签: php redirect logging

我有一个系统可以在我的服务器上获取文件。 为了能够轻松更改系统将获得的文件,我在php页面上进行了简单的重定向。

但是现在我想跟踪哪些以及系统何时连接。 现在,每个系统在连接到我的页面时都会在GET上发送ID,但我甚至都在努力编写文件。

名为http://mysite.com/smtg/get.php?i=XX:XX:XX:XX:XX:XX

的链接

其中包含:

<?
$fp = fopen('http://mysite.com/smtg/log.txt','a+');
    fseek($fp,SEEK_END);
    $w=$_GET['i']."\r\n";
    fputs($fp,$w);
    fclose($fp);

    header('Location: http://mysite.com/smtg/file.txt', true, 302);

exit();
?>

我甚至试过创建一个空文件并将其放在服务器上,权限是664,但它没有得到更新。

重定向工作来自浏览器和系统思想。

编辑:

删除重定向时,我得到:

test 
Warning: fopen(/smtg/log.txt): failed to open stream: No such file or directory 
    in /var/www/mysite.com/smtg/get.php on line 5 
Warning: fseek() expects parameter 1 to be resource, boolean given 
    in /var/www/mysite.com/smtg/get.php on line 6 
Warning: fputs() expects parameter 1 to be resource, boolean given 
    in /var/www/mysite.com/smtg/get.php on line 8 
Warning: fclose() expects parameter 1 to be resource, boolean given 
    in /var/www/mysite.com/smtg/get.php on line 9 

它似乎找不到日志文件,但是如果丢失则不应该创建它?

该文件在服务器上,但在此处为空(http://mysite.com/smtg/log.txt)。

3 个答案:

答案 0 :(得分:1)

而不是在HTTP资源上打开文件句柄:

fopen('http://mysite.com/smtg/log.txt','a+');

尝试使用以下内容:

fopen('/smtg/log.txt','a+')

我非常确定您在HTTP资源的文件句柄上使用fput时会遇到问题。

答案 1 :(得分:1)

这项工作非常适合我(尝试http://localhost/stackoverflow/logger.php?i=xxxx):

logger.php

<?php
ini_set("display_errors",1);
error_reporting(E_ALL);

if(isset($_GET['i']))
{
    $text = date('H:m:s') . "\t \t \t" . $_GET['i'];
    file_put_contents(__DIR__ . '/redirection-' . date('Y-m-d'). '.log', $text."\n", FILE_APPEND);
    header('Location: http://localhost/stackoverflow/file.txt', true, 302);
}

如果您正在使用Linux,请确保apache用户对放置日志文件的目录具有写权限。

答案 2 :(得分:1)

问题很简单,直接来自对与文件系统层次结构相关的概念的误解。

Here I tried to write an answer explaining the matters虽然很尴尬,但希望它能帮助理解这些问题。特别是为什么你既不能使用'http:// ...'也不能使用'/ smtg /'

因此,对于日志,您必须使用

file_put_contents($_SERVER['DOCUMENT_ROOT'].'/smtg/log.txt', $_GET['i'], FILE_APPEND);