Hallo,
ich schreibe derzeit eine Logger Klasse. Da ich dafür Logdatein erstellen muss, benutze ich fopen + mode w.
Jedoch wird die Datei nicht erstellt >.<
Wahrscheinlich ist das ganze ein total trivialer Fehler, aber ich finde ihn gerade nicht.
Hier der Code:
Mein Test:
Die Ausgabe:
ich schreibe derzeit eine Logger Klasse. Da ich dafür Logdatein erstellen muss, benutze ich fopen + mode w.
Jedoch wird die Datei nicht erstellt >.<
Wahrscheinlich ist das ganze ein total trivialer Fehler, aber ich finde ihn gerade nicht.
Hier der Code:
PHP:
<?php
class Logger
{
/**
* Der Pfad zu der Logdatei
*
* @var string
* @acces private
*/
private $logFile;
/**
* Die Resource, auf die beim Schreiben der Datei zugegriffen wird
*
* @var string
* @acces private
*/
public $handle;
/**
* Der Username, der beim Erstellen der Datei benutzt wird.
* Wird auch zum Ersetzten des Platzhalters <*usr*> benutzt,
* um den Usernamen in der Datei angeben zu können,
* ohne diesen jedesmal per Script ( z.B.: $_SESSION['user'] )
* ermitteln zu müssen, um diesen in den Logstring schreiben zu können.
*
* @var string
* @acces private
*/
private $user;
/**
* Erstellt eine Logdatei, um bestimmte Aktionen eines Users zu loggen.
* Wenn die Datei beim ersten Versuch nicht geöffnet bzw erstellt werden kann,
* wird 3 weitere male versucht, sie zu öffnen.
* Nach diesen 3 mal wird ein E_USER_ERROR ausgegeben und das Script abgebrochen
*
* <code>
* require_once 'Logger.class.php';
*
* $Logger = new Logger( 'User' );
* </code>
*
* @param string $usr zur Eindeutigen User Zuordnung
* Username zur eindeutigen Zuordnung,
* durch wen welche Logdatei erstellt wurde und
* wer welche geloggten Aktionen durchgeführt hat.
*
* @return void
*
* @access public
*/
public function __construct ( $usr )
{
$this->logFile = LOGPATH.'/'.$usr.'-'.date( "Y.d.m" ).'-'.time().'.log';
$this->handle = fopen( $this->file, 'w' );
$this->user = $usr;
if ( !$this->handle || !isset($this->handle) || empty( $this->handle ) )
{
$exists = file_exists( $this->file );
$x = 0;
while ( !$exists && $x < 3 )
{
$this->handle = fopen( $this->file, 'w' );
$exists = file_exists( $this->file );
$x++;
}
if ( $x == 10 && !$exists )
{
trigger_error( 'Konnte die Logdatei (<span style="font-weight:bold;">' . $this->logFile . '</span>) <span style="font-weight:bold;">nicht</span> anlegen - ', E_USER_ERROR );
}
}
}
/**
* Öffnet oder erstellt die Datei
*
* @return resource
*
* @access private
*/
private function open ()
{
return fopen( $this->file, 'w' );
}
/**
* Schreibt das geloggte Event in die Datei
*
* <code>
* require_once 'Logger.class.php';
*
* $Logger = new Logger( 'User' );
*
* macheEtwas();
* $Logger->logEvent( '<*usr*> hat die Funktion "macheEtwas()" aufgerufen.' );
* </code>
*
* @param string $str beschreibung des Events
*
* @return void
*
* @access public
*/
public function logEvent ( $str )
{
$str = str_replace( '<*usr*>', $this->user, $str );
fwrite( $this->handle, $str );
}
public static function getInstance ()
{
if ( !isset( self::$instance ) )
{
$c = __CLASS__;
self::$instance = new $c;
}
return self::$instance;
}
public static function getInstance2 ()
{
if ( !isset( self::$instance ) )
{
self::$instance = new self;
}
return self::$instance;
}
}
?>
PHP:
<?php
define( 'LOGPATH', '/Log' );
include('Logger.class.php');
$Logger = &new Logger( 'CrackPod' );
#macheEtwas();
$Logger->logEvent( '<*usr*> hat etwas gemacht' );
?>
Hat irgendjemand nen Plan, was da falsch is?Warning: fwrite(): supplied argument is not a valid stream resource in /opt/lampp/htdocs/PHPEclipse/PHK/Logger.class.php on line 113