File write txt log
Ik heb een class gemaakt om errors in een error log te zetten.
Bij het schrijven van de error in het bestand errors.txt gebruik ik de PHP functie fwrite()
http://php.net/manual/en/function.fwrite.php
Ik heb nu deze class
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?PHP
class Fout {
public function ErrorLog($error) {
if(empty($error)) {
$error = 'Onbekende fout';
} else {
$fp = fopen('errors.txt', 'w');
fwrite($fp, '['.date('d-m-Y h:i:s').'] '.$error);
fclose($fp);
}
}
public function ShowError($errorText) {
echo '<div class="error">';
echo $errorText;
echo '</div>';
}
}
?>
class Fout {
public function ErrorLog($error) {
if(empty($error)) {
$error = 'Onbekende fout';
} else {
$fp = fopen('errors.txt', 'w');
fwrite($fp, '['.date('d-m-Y h:i:s').'] '.$error);
fclose($fp);
}
}
public function ShowError($errorText) {
echo '<div class="error">';
echo $errorText;
echo '</div>';
}
}
?>
En zo roep ik het aan:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?PHP
$error = new Fout();
$error->ErrorLog('Test');
$error->ShowError('Er is iets fout gegaan, je kunt het opnieuw proberen');
?>
$error = new Fout();
$error->ErrorLog('Test');
$error->ShowError('Er is iets fout gegaan, je kunt het opnieuw proberen');
?>
Het probleem is dat alleen de allereerste error in het bestand wordt gezet.
En als er 1x iets in is gezet werkt het niet meer, er gebeurt dan niks meer.
Op php.net staat juist dat de functie fwrite() de tekst erbij zet en niet de hele tekst doet veranderen.
Ook staat er niet dat die functie maar 1x werkt...
En dan heb ik nog een ander vraagje:
Als ik nou een PHP error wil opvangen en in de error log wil zetten hoe doe ik dat?
Weet iemand een beter script? Dit wat ik nu heb is eigenlijk niet echt een error logger, omdat je zelf instelt wat er in de txt file komt.
Gewijzigd op 04/09/2012 17:11:06 door Jan terhuijzen
in plaats van een file te openen, schrijven en te sluiten kun je gemakkelijker file_put_contents gebruiken. De 2e parameter geeft aan of je aan de bestaande file wil toevoegen, of compleet overschrijven.
Quote:
'r' Open for reading only; place the file pointer at the beginning of the file.
'r+' Open for reading and writing; place the file pointer at the beginning of the file.
'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'w+' Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'a' Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'a+' Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'x' Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING. If the file does not exist, attempt to create it. This is equivalent to specifying O_EXCL|O_CREAT flags for the underlying open(2) system call.
'x+' Create and open for reading and writing; otherwise it has the same behavior as 'x'.
'c' Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither truncated (as opposed to 'w'), nor the call to this function fails (as is the case with 'x'). The file pointer is positioned on the beginning of the file. This may be useful if it's desired to get an advisory lock (see flock()) before attempting to modify the file, as using 'w' could truncate the file before the lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested).
'c+' Open the file for reading and writing; otherwise it has the same behavior as 'c'.
'r+' Open for reading and writing; place the file pointer at the beginning of the file.
'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'w+' Open for reading and writing; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.
'a' Open for writing only; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'a+' Open for reading and writing; place the file pointer at the end of the file. If the file does not exist, attempt to create it.
'x' Create and open for writing only; place the file pointer at the beginning of the file. If the file already exists, the fopen() call will fail by returning FALSE and generating an error of level E_WARNING. If the file does not exist, attempt to create it. This is equivalent to specifying O_EXCL|O_CREAT flags for the underlying open(2) system call.
'x+' Create and open for reading and writing; otherwise it has the same behavior as 'x'.
'c' Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither truncated (as opposed to 'w'), nor the call to this function fails (as is the case with 'x'). The file pointer is positioned on the beginning of the file. This may be useful if it's desired to get an advisory lock (see flock()) before attempting to modify the file, as using 'w' could truncate the file before the lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested).
'c+' Open the file for reading and writing; otherwise it has the same behavior as 'c'.
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
?>
En dan met try .... catch blokken gaan werken
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");
?>
En dan met try .... catch blokken gaan werken
Is er geen manier om alle errors op te vangen die anders met error_reporting worden weergegeven?
En dan ook nog eens zodat de errors niet worden weergegeven op het beeldscherm, maar in de txt file worden gezet.
Gewijzigd op 04/09/2012 17:37:03 door jan terhuijzen
Toevoeging op 04/09/2012 17:50:31:
Ik ben zelf een (fatale) uitzondering, dus ik hou er wel van om met exceptions te werken in een try ... catch blok
Gewijzigd op 04/09/2012 17:50:52 door Ger van Steenderen
Gewijzigd op 04/09/2012 18:25:07 door jan terhuijzen
dit eens :-)
Bekijk Het domste is om eigen klasse te gaan maken met treffer "Fout". Die fout kan in dat geval alles betekenen. Met behulp van Exceptions kun je over het algemeen zien wat voor fout je te maken hebt. Bijv. NullReferenceException (leeg object verwijzing) of IndexOutOfBoundsException (Index valt buiten array etc.) Hier kun je dus ook een eigen Exception voor maken bijv. JanException wat staat voor iets wat die exception veroorzaakt.