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