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://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 リソースでファイル ハンドルを開く代わりに、次のようにします。

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

次のようなものを使用してみてください。

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

HTTP リソースからのファイル ハンドルで fputs を使用すると、問題が発生することは間違いありません。

于 2013-10-31T09:24:14.047 に答える