Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP]Ruzie met logboek bestand aan maken

Pagina: 1
Acties:
  • 348 views sinds 30-01-2008

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
ik was bezig PHP 5 te leren , toen ik het in mijn bol kreeg en zelf even een klein projectje op te zetten om te kijken of ik het onder de knie had , ik begon klein:
ik maakte een script die je ip adres weergaf en je browser type , daarna dacht ik :dit wil ik ook kunnen loggen. daarom had ik in mijn script een include() gedaan naar een script die logde , dit is mijn script :
PHP:
1
2
3
4
5
6
7
8
9
10
<?php 
if(isset($_SERVER['REMOTE_ADD']) && isset($_SERVER['REMOTE_ADD']))
if(isset($_SERVER['HTTP_USER_AGENT']) && isset($_SERVER['HTTP_USER_AGENT']))

$logfile=fopen($rootdir . "htdocs/log/log.txt",'a');

fwrite($logfile, date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADD'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");

fclose($logfile);
?>

als je de code niet kan zien moet je op het pijltje drukken bij de code window
dus ik heb dit gemaakt, ook een directory : log waarin log.txt aanwezig was:
maar dit is de error die ik krijg als ik mijn script gebruik:
code:
1
2
3
4
5
Hallo uw ip adres is xx.xx.xxx.xx
u gebruikt: Mozilla/5.0 (Windows; U; Windows NT 5.1; nl-NL; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
Warning: fwrite(): supplied argument is not a valid stream resource in J:\servertje\xampp\htdocs\log\logfile_func.inc.php on line 7

Warning: fclose(): supplied argument is not a valid stream resource in J:\servertje\xampp\htdocs\log\logfile_func.inc.php on line 9

ik ben nog niet zo bedreven in PHP dus ik heb geen flauw idee wat deze error betekent , ik heb fwrite al geprobeerd te vervangen voor fputs maar dat zette ook al geen zoden aan de dijk...
HELP

"Stilte, een gat in het geluid...."


  • antipode
  • Registratie: April 2004
  • Laatst online: 03-09 22:29

antipode

-=Got is in the details=-

Volgens mij is dit een gevalletje CHMOD, al ben ik zelf ook PHP-beginner, dus pin me er niet op vast.

Kijk ff op
http://www.phphulp.nl/php/tutorials/8/54/112/

en probeer dat eens. Ik had precies zo'n warning en dit hielp bij mij :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Je moet inderdaad wel schrijfrechten hebben op de file die je opent. Heb je die?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Waarom maak jij je IF's zo moeilijk als ik vragen mag?

1. Je hoeft een isset maar 1x te gebruiken (iig onder PHP4 ;) )
2. Je kan het beste ook de fopen in een IF zetten, als dat dan mislukt dan voert hij de fwrite tenminste niet uit.
PHP:
1
2
3
4
if (isset($_SERVER['REMOTE_ADD']) && isset($_SERVER['HTTP_USER_AGENT']) && $logfile=fopen($rootdir . "htdocs/log/log.txt", "a")) {
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADD'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");
  fclose($logfile);
}

  • Vesta
  • Registratie: November 2004
  • Niet online
  1. Gebruik altijd accolades bij constructies als if .. then .. else. Zonder accolades zullen de laatste twee regels altijd uitgevoerd worden, ook als de if niet true is.
  2. Daarnaast lijkt het me handig om $_SERVER['REMOTE_ADDR'] te gebruiken ipv $_SERVER['REMOTE_ADD'].
  3. Als je toch met PHP5 bezig bent, kijk dan eens naar file_put_contents

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
Ik heb dit: dit is de 'logfile_func2.inc.php'
PHP:
1
2
3
4
5
6
<?
if (isset($_SERVER['REMOTE_ADD']) && isset($_SERVER['HTTP_USER_AGENT']) && $logfile=fopen($rootdir . "htdocs/log/log.txt", "a")) {
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADD'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");
  fclose($logfile);
}
?>


en die word 'ge' include()
door deze:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Levert uw IP adres</title>
</head>

<body>
<?php if(isset($_SERVER['REMOTE_ADDR']))
{
echo( "Hallo uw ip adres is " . $_SERVER['REMOTE_ADDR']);
}
?>
<br>
<?php if(isset($_SERVER['HTTP_USER_AGENT']))
{
echo ("u gebruikt: " . $_SERVER['HTTP_USER_AGENT']);
}
?>
<?php 
$rootdir="../";
include($rootdir . "htdocs/log/logfile_func2.inc.php");
?>


</body>
</html>

als ik hem nu draai krijg ik geen errors , maar hij schrijft ook niets weg naar de log.txt

[ Voor 58% gewijzigd door Flapp op 15-08-2005 11:37 ]

"Stilte, een gat in het geluid...."


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Waarschijnlijk is dat omdat de uitkomst van het if statemant false is. Doe anders eens een print "gelukt"; in de accolades van het if statement, en eventueel wat var_dump()'s op de variabelen in de expressie, dan kun je snel achterhalen wat er gebeurt of fout gaat.

Noushka's Magnificent Dream | Unity


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Voor het debuggen zou ik toch de fopen uit de if-conditie halen en ook tussen de accolades zetten. En inderdaad verschillende waarden bekijken of deze wel de inhoud hebben die jij verwacht.
PHP:
1
2
3
4
5
6
7
8
<?
if (isset($_SERVER['REMOTE_ADD']) && isset($_SERVER['HTTP_USER_AGENT'])
{ 
  $logfile=fopen($rootdir . "htdocs/log/log.txt", "a"))
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADD'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");
  fclose($logfile);
}
?>

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
ik heb nu dit:
PHP:
1
2
3
4
5
6
7
8
<?
if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['HTTP_USER_AGENT']))
{ 
  $logfile=fopen($rootdir . "htdocs/log/log.txt", "a")
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADDR'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");
  fclose($logfile);
}
?>

ik kreeg eerst errors omdat er een paar haakjes missten , maar dat heb ik opgelost, maar nu krijg ik deze error:

Parse error: syntax error, unexpected T_STRING in J:\servertje\xampp\htdocs\log\logfile_func2.inc.php on line 5

en wat is een T_STRING echt ,'vriend van me naast mij, dat is de tegenhanger van de G-String:P'

Zelf ben ik zoals ik al zei nog niet zo bedreven in php dus: wat is een 'var_dump()'?
laat hij dan alle variabelen zien ofzo?'

[ Voor 32% gewijzigd door Flapp op 15-08-2005 12:01 ]

"Stilte, een gat in het geluid...."


  • Vesta
  • Registratie: November 2004
  • Niet online
Vesta schreef op maandag 15 augustus 2005 @ 10:51:
Daarnaast lijkt het me handig om $_SERVER['REMOTE_ADDR'] te gebruiken ipv $_SERVER['REMOTE_ADD'].

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Je bent een puntkomma ';' vergeten na fopen().

Tip, bij dit soort parse errors zit de fout vrijwel altijd in de regel voor degene aangegeven. Het gaat bij de volgende pas fout namelijk.

Check verder de manual maar eens over var_dump().

zmn :> :P

[ Voor 95% gewijzigd door Michali op 15-08-2005 12:16 ]

Noushka's Magnificent Dream | Unity


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Lees ook fwrite() op de PHP Manual en var_dump() op de PHP Manual

Overigens is dit niet specifiek PHP 5 ;)
PHP:
1
2
3
4
<?php
 print $_SERVER[ 'REMOTE_ADDR' ]; //deze is goed
 print $_SERVER[ 'REMOTE_ADD' ]; //deze is NIET goed
?>


Damnit Michali :P

[ Voor 19% gewijzigd door supakeen op 15-08-2005 12:10 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
Michali schreef op maandag 15 augustus 2005 @ 12:06:
Je bent een puntkomma ';' vergeten na fopen().

Tip, bij dit soort parse errors zit de fout vrijwel altijd in de regel voor degene aangegeven. Het gaat bij de volgende pas fout namelijk.
Bedankt man , het is nu opgelost en hij zet dingen in de log.txt , hij zet nog niet de client info of ip er in maar dat ga ik eerst zelf proberen op te lossen , als het dan weer mis gaat schop ik dit topic wel even.
voor de mensen die willen weten zet ik even alle code online die ik ervoor heb:

ip.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Levert uw IP adres</title>
</head>

<body>
<?php if(isset($_SERVER['REMOTE_ADDR']))
{
echo( "Hallo uw ip adres is " . $_SERVER['REMOTE_ADDR']);
}
?>
<br>
<?php if(isset($_SERVER['HTTP_USER_AGENT']))
{
echo ("u gebruikt: " . $_SERVER['HTTP_USER_AGENT']);
}
?>
<?php 
$rootdir="../";
include($rootdir . "htdocs/log/logfile_func2.inc.php");
?>


</body>
</html>


logfile_func2.inc.php:
PHP:
1
2
3
4
5
6
7
8
<?
if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['HTTP_USER_AGENT']))
{ 
  $logfile=fopen($rootdir . "htdocs/log/log.txt", "a");
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADDR'] . ", ". $SERVER['HTTP_USER_AGENT'] ."\n");
  fclose($logfile);
}
?>

"Stilte, een gat in het geluid...."


Verwijderd

zmn schreef op maandag 15 augustus 2005 @ 12:09:
PHP:
1
2
3
4
<?php
 print $_SERVER[ 'REMOTE_ADDR' ]; //deze is goed
 print $_SERVER[ 'REMOTE_ADD' ]; //deze is NIET goed
?>
Je kan idd ook nog een REMOTE_ADDR hebben, ik dacht dat hij zelf een waarde geset had dmv op een prompt "set variable=value" te doen en dan die waarde wou inlezen met PHP. Daarom nam ik die fout ook mooi over :>

  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Verwijderd schreef op maandag 15 augustus 2005 @ 12:13:
[...]

Je kan idd ook nog een REMOTE_ADDR hebben, ik dacht dat hij zelf een waarde geset had dmv op een prompt "set variable=value" te doen en dan die waarde wou inlezen met PHP. Daarom nam ik die fout ook mooi over :>
Ik ook van jou :*

En voor de topicstarter, misschien is het ook handig om dit in een class te stoppen die specifiek bestaat om te loggen. Zoek eens bij PHP.net op classes en constructors, leer je meteen mooi te programmeren en mocht je ooit op een andere site beslissen dat je ook een logfunctie wilt hebben dan laad je je class en klaar is kees :)

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
Ik heb even nagekeken of er ergens ''(, )" teveel stonden maar die stonden er niet ...
dus waarom geeft hij alleen de datum en tijd in de txt.log en slaat hij geen regel over , want op het moment ziet mijn log er zo uit:
code:
1
15.08.2005, 12:18 , , 15.08.2005, 12:18 , ,  15.08.2005, 12:18 , , 15.08.2005, 12:19 , ,

"Stilte, een gat in het geluid...."


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Omdat je ook nog een newline moet schrijven een newline doe je zo:
PHP:
1
2
3
<?php
 print "\r\n"; //deze even achteraan je string plakken (goh, het blijft een raar woord)
?>


Als je alleen die \n schrijft krijg je wel met fgets() de newlines maar niet als je hem opent met textverwerker waarschijnlijk.

Overigens dit was de eerste hit op google toen ik het nazocht maarja ik had het in mijn hoofd dus dan weet je het sneller :*) :X

[ Voor 59% gewijzigd door supakeen op 15-08-2005 12:28 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
maar ik snap nog steeds niet waarom hij de rest niet logt, t is niet dat ik fputs met een ) vroegtijdig heb afgesloten

"Stilte, een gat in het geluid...."


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Flapietoetoe schreef op maandag 15 augustus 2005 @ 12:27:
maar ik snap nog steeds niet waarom hij de rest niet logt, t is niet dat ik fputs met een ) vroegtijdig heb afgesloten
Wat bedoel je met de rest niet loggen? Als je telkens alleen de laatste entry krijgt zul je maar eens moeten googlen op fwrite() en iets met append erbij ;)

File Append Tutorial

[ Voor 9% gewijzigd door supakeen op 15-08-2005 12:31 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
dat is niet het probleem , maar ik wil hem meer laten loggen dan alleen datum en tijd , dat heb ik ook staan in de script, maar hij logt de rest niet.

het log script ziet er nu zo uit:
PHP:
1
2
3
4
5
6
7
8
9
<?
if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['HTTP_USER_AGENT']))
{ 
  $logfile=fopen($rootdir . "htdocs/log/log.txt", "a");
  fwrite($logfile,date("d.m.Y, H:i ",time()) . ', ' . $SERVER['REMOTE_ADDR'] . ", ". $SERVER['HTTP_USER_AGENT']);
  print("\r\n");
  fclose($logfile);
}
?>

en hij doet nu BTW nog steeds geen nieuwe regel

"Stilte, een gat in het geluid...."


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 05-11 19:33
Dan voer je toch gewoon meerdere fwrite's uit? Of je bereid een variabel voor die je in 1 keer weg schrijft. Die "\r\n" moet trouwens aan je string geäppend worden in de fwrite(). Nu schrijf je het enkel weg naar de output en niet naar het bestand.

Noushka's Magnificent Dream | Unity


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Nee dah, en wat ik nu ga doen kost je normaal handen vol geld maar ik zal je eens helpen met je scriptje :P

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 if( isset( $_SERVER[ 'REMOTE_ADDR' ] ) && isset( $_SERVER[ 'HTTP_USER_AGENT' ] )
 {

  //open file
  $logfile = fopen( $rootdir .'htdocs/log/log.txt', 'a' );

  //write data to file
  fwrite( $logfile, date( 'd.m.Y, H:i ', time() ) .', '. $_SERVER[ 'REMOTE_ADDR' ] .', '. $_SERVER[ 'HTTP_USER_AGENT' ] ."\r\n" );

  //close file
  fclose( $logfile );

}
?>


Het is overigens $_SERVER en niet $SERVER ;)

[ Voor 33% gewijzigd door supakeen op 15-08-2005 12:42 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
ik heb nu dit als code:
PHP:
1
2
3
4
5
6
7
8
9
10
<?
if (isset($_SERVER['REMOTE_ADDR']) && isset($_SERVER['HTTP_USER_AGENT']))
{ 
  $logfile=fopen($rootdir . "htdocs/log/log.txt", "a");
  fwrite($logfile,date("d.m.Y, H:i ",time()));
  fwrite($logfile,$_SERVER['REMOTE_ADDR']);
  fwrite($logfile,$_SERVER['HTTP_USER_AGENT']);
  fclose($logfile);
}
?>

en nog geeft hij geen IP adres of client info
laat maar , ik was de$_SERVER vergeten

[ Voor 31% gewijzigd door Flapp op 15-08-2005 12:44 ]

"Stilte, een gat in het geluid...."


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Nou dan maak je eens een nieuw scriptje met daarin:
PHP:
1
2
3
4
5
<?php
 print '<pre>';
 print_r( $_SERVER );
 print '</pre>';
?>
En dan de output even hier neerknallen.

Geeft het script overigens nog errors of iets dergelijks?

[ Voor 24% gewijzigd door supakeen op 15-08-2005 12:44 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
geen errors at all:)

"Stilte, een gat in het geluid...."


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
En nu niet meer verder zeuren:

script gemaakt speciaal voor jou

Dit werkt helemaal.

frontend
source
logfile

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
Bedankt, dit was een zeer leerzame ervaring voor mij...
@zmn : bedankt voor je moeite , maar ik heb naar aanleiding van jullie aanwijzingen een iets aangepastere versie gemaakt , waarbij hij de gegevens een voor een invult en dan daarna een regel overslaat , dit heb ik gedaan omdat ik dan makkelijker dingen kan toevoegen , nog n00b proofer;)
bedankt voor al jullie moeite .
want zoals er in de policy staat: enige zelf werkzaamheid is vereist;) dus die probeer ik zoveel mogelijk nog wel te behouden en niet 100% voorgekauwde scripts gebruiken

[ Voor 94% gewijzigd door Flapp op 15-08-2005 12:57 ]

"Stilte, een gat in het geluid...."


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Ik ben gewoon in een goede bui :)

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
nu weer een nieuw projectje bedenken voor mezelf zodat ik me niet verveel , nog ideeën ?
iets simpels maar wel nuttig

"Stilte, een gat in het geluid...."


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Flapietoetoe schreef op maandag 15 augustus 2005 @ 13:09:
nu weer een nieuw projectje bedenken voor mezelf zodat ik me niet verveel , nog ideeën ?
iets simpels maar wel nuttig
Ik zou dit verwerken in een functie zodat je niet iedere keer zo ingewikkeld hoeft te doen als je iets wilt wegschrijven.

Of nog beter een log class.

[ Voor 5% gewijzigd door Brakkie op 15-08-2005 13:12 ]

Systeem | Strava


  • supakeen
  • Registratie: December 2000
  • Laatst online: 09-09 14:42
Nu gaan we wel offtopic maar ik had al gemeld dat je dit ook allemaal netjes in een class zou kunnen verwerken zodat je later als je eens een logbestand nodig hebt gewoon je class include en dan:
PHP:
1
2
3
4
5
6
<?php
 $Log = new Log( 'bestand.txt' );
 $Log->logIP();
 $Log->logAgent();
 $Log->logContent( array( 'show_host'=>true, 'show_extensions'=>true ) );
?>
Zou kunnen doen.

Verder nog:
* Logfunctionaliteit uitbreiden (zo schrijven dat nieuwste entry bovenaan komt bijvoorbeeld)
* Validatie van input via formulieren
* Rekenmachine (kan ook via JS maar doe het met PHP voor het leren)
* Shoutbox op basis van een tekstbestand (in tegenstelling tot databases)
* MySQL databases onder de knie krijgen (of andere databases)

Hoi Brakkie :w

[ Voor 29% gewijzigd door supakeen op 15-08-2005 13:17 ]


  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
zmn schreef op maandag 15 augustus 2005 @ 13:14:
Nu gaan we wel offtopic maar ik had al gemeld dat je dit ook allemaal netjes in een class zou kunnen verwerken zodat je later als je eens een logbestand nodig hebt gewoon je class include en dan:
PHP:
1
2
3
4
5
6
<?php
 $Log = new Log( 'bestand.txt' );
 $Log->logIP();
 $Log->logAgent();
 $Log->logContent( array( 'show_host'=>true, 'show_extensions'=>true ) );
?>
Zou kunnen doen.

Verder nog:
* Logfunctionaliteit uitbreiden (zo schrijven dat nieuwste entry bovenaan komt bijvoorbeeld)
* Validatie van input via formulieren
* Rekenmachine (kan ook via JS maar doe het met PHP voor het leren)
* Shoutbox op basis van een tekstbestand (in tegenstelling tot databases)
* MySQL databases onder de knie krijgen (of andere databases)

Hoi Brakkie :w
hoe zet ik dat dan in een class doe ik dat dan zo?
[code]
<?php class log{
function log{
code

}
}
?>

?

"Stilte, een gat in het geluid...."


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Sorry, maar ik ga dit topic dicht doen. Flapietoetoe, door dit topic heen hebben mensen je continu aan het handje moeten houden. Parse errors zijn dingen die je met een beetje debuggen al oplost, evenals REMOTE_ADD gebruiken in plaats van REMOTE_ADDR en $SERVER in plaats van $_SERVER. Ook je vraag wat var_dump nu precies doet had je kunnen oplossen door even naar www.php.net/var_dump te gaan. Ik mis dus nogal wat eigen inzet bij jou, en daarom gaat dit topic dus dicht.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.