• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datei wird nicht erstellt/geöffnet

Status
Für weitere Antworten geschlossen.

CrackPod

Neues Mitglied
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:
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;
	}

}
?>
Mein Test:
PHP:
<?php
 define( 'LOGPATH', '/Log' );
 include('Logger.class.php');
 
 $Logger = &new Logger( 'CrackPod' );

 #macheEtwas();
 $Logger->logEvent( '<*usr*> hat etwas gemacht' );
?>
Die Ausgabe:
Warning: fwrite(): supplied argument is not a valid stream resource in /opt/lampp/htdocs/PHPEclipse/PHK/Logger.class.php on line 113
Hat irgendjemand nen Plan, was da falsch is?:oops:
 
CrackPod schrieb:
Wahrscheinlich ist das ganze ein total trivialer Fehler, aber ich finde ihn gerade nicht.
Richtig. Das erinnert mich an den ICQ-Log von niklasboelter und Prophet.:razz:
private $logFile;
//...
$this->logFile = LOGPATH.'/'.$usr.'-'.date( "Y.d.m" ).'-'.time().'.log';
//...
$this->handle = fopen( $this->file, 'w' );
Fällt was auf?:twisted:
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben