0

我有一个系统可以在我的服务器上获取文件。为了能够轻松更改系统将获取的文件,我在 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 )。

4

3 回答 3

1

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

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

尝试使用这样的东西:

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

我很确定在 HTTP 资源的文件句柄上使用 fputs 会遇到问题。

于 2013-10-31T09:24:14.047 回答
1

这对我来说非常有用(正在尝试http://localhost/stackoverflow/logger.php?i=xxxx):

记录器.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 用户对放置日志文件的目录具有写入权限。

于 2013-11-07T19:56:56.397 回答
1

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

在这里,我试图写一个解释这些问题的答案,虽然很尴尬,但希望它有助于理解这些问题。尤其是为什么你既不能使用 'http://...' 也不能使用 '/smtg/'

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

file_put_contents($_SERVER['DOCUMENT_ROOT'].'/smtg/log.txt', $_GET['i'], FILE_APPEND);
于 2013-11-08T08:06:50.797 回答