[php] schrijven naar file lukt niet*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Na enig knutselwerk, is er bij mij de volgende code uitgekomen..
Deze code s bedoeld voor de mensen die bij mij op de site komen, de ip, datum, en het adres op te slaan in het ip.txt bestandje.
Hij moet ze telkens onder elkaar zetten in bestandje

voorbeeld

***.***.***.*** 5 mei 2003 blaat.blaat.nl
***.***.**.** 5 mei 2003 jezus.ganou.niet

Zoiets snap je, op de sterretjes moet het ip komen, de datum spreekt vanzelf, en het adres achteraan ook wel denk ik..

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php 
if( getenv('HTTP_X_FORWARDED_FOR') == '' ){  
        if ( getenv ("REMOTE_ADDR") == '' ){  
            $ip = "127.0.0.1";                  
        } else {  
            $ip = getenv ("REMOTE_ADDR");  
        }                  
    } else {  
        $ip = getenv('HTTP_X_FORWARDED_FOR');  
    }  
      
$file = fopen("ip.txt", "a+"); 
$date = date ("j M Y H:i:s"); 
$content = $ip."      ".$date." \n"; 
$deev = gethostbyaddr($REMOTE_ADDR); 
@fwrite($file , $content , $deev); 

?>



Weet iemand wat er in fout zit want hij doet het niet bij mij...

Greetz

Deev

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:32
Wat is niet doen?

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hij schrijft bij mij niet naar het bestand..

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Wat werkt niet, wat doet het niet, wat is de melding, waarom heb je bij het debuggen een @ voor je fwrite staan?
Lijkt me handig om te weten voordat we er iets over kwijt kunnen ;)

edit:
Je hebt de code niet zelf geschreven he? ;) Ga dan eerst eens op zoek naar wat die @ doet ;)

[ Voor 24% gewijzigd door Glimi op 23-05-2003 10:39 ]


Acties:
  • 0 Henk 'm!

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 13-01 16:44
Haal even de @ voor fwrite weg en post hier even de foutmelding... Zal wel een permission denied ofzo zijn :P


Originele startpagina - Stadindex.nl


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
nix dat is het probleem,

hij doet alsof ie het doet,

maar als ik dan het bestand ga kijken, is er nix bij geschreven...

edit:


Ey glimi, ik heb m wel zelf geschreven, met behulp van tutorials op internet

[ Voor 29% gewijzigd door Verwijderd op 23-05-2003 10:44 ]


Acties:
  • 0 Henk 'm!

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 13-01 16:44
Ook als je de @ weghaalt krijg je geen melding?
Als je het bestand verwijderd wordt er dan wel opnieuw een bestand aangemaakt?


Originele startpagina - Stadindex.nl


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Nu online

TeeDee

CQB 241

- klopt de locatie van het bestand?
- genoeg rechten?

etc. etc.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Sinds wanneer heeft fwrite een filepointer en twee teksten als parameters?

De tweede tekst wordt geevalueerd naar een intwaarde met de waarde 0 en er wordt vervolgens niks weggeschreven omdat ie 0 tekens mag wegschrijven...

[ Voor 12% gewijzigd door ACM op 23-05-2003 10:47 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Nee dan wordt het bestand niet aangemaakt nee,

Ik heb die bestanden en map chmod 777 gedaan (dan weet ik tenminste zeker dat ie het doet ;))
en de locatie klopt ook

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Verwijderd schreef op 23 May 2003 @ 10:43:
edit:
Ey glimi, ik heb m wel zelf geschreven, met behulp van tutorials op internet
Ik zie dan nog steeds niet in _waarom_ fwrite geprefixed is met een @ :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
had ik al een keer geprobeerd maar dat lukte niet..

Acties:
  • 0 Henk 'm!

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 30-05 12:05

Dope-E

The one and only Dope

zie ACM... je geeft de host als laatste parameter mee aan fwrite... da kannie!

twitter.com/curly_sanders


Acties:
  • 0 Henk 'm!

  • cdgrit
  • Registratie: Mei 2002
  • Laatst online: 13-01 16:44
Wat lukt niet? Gewoon je cursor voor het @ zetten en op de knop delete op je toetsenbord drukken :?


Originele startpagina - Stadindex.nl


Acties:
  • 0 Henk 'm!

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 30-05 12:05

Dope-E

The one and only Dope

LOL >:)

twitter.com/curly_sanders


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoezo kan dat niet, ik heb die host gedefinieerd by $deev.

Dat is dan tog gewoon een output, die moet weergegeven worden?

Acties:
  • 0 Henk 'm!

  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 30-05 12:05

Dope-E

The one and only Dope

hmm verdiep je eerst s hoe parameters gebruikt worden en hoe je strings aan elkaar plakt! (very basic php)
Als t dan nog niet lukt, kun je t nog s vragen...

twitter.com/curly_sanders


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

zie de beschrijving van de fwrite functie

die wil maximaal drie parameters
de eerste moet een verwijzing naar een file zijn, geopend met fopen
de tweede de tekst die je wilt schrijven
de derde, optionele, de lengte die je wilt uitschrijven

jij knalt als derde een stuk tekst erin, dat stuk tekst wordt omgezet naar een getal door php en tekst wordt altijd omgezet naar 0 als het niet met een getal begint...

kortom, je schrijft 0 tekens weg...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok ik ga het thuis even proberen dan...

je hoort nog

Thanx

Acties:
  • 0 Henk 'm!

  • Kippenijzer
  • Registratie: Juni 2001
  • Laatst online: 26-08 09:08

Kippenijzer

McFallafel, nu met paardevlees

Oftwel, maak van je @fwrite($file , $content , $deev);
eens
code:
1
@fwrite($file , "$content $deev");

Dan evalueert hij de variablen meestal nog wel en werkt het wel :P

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Laat dan gelijk die @ weg, want die is nergens voor nodig :)

Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 23 May 2003 @ 11:06:
Laat dan gelijk die @ weg, want die is nergens voor nodig :)
Idd, is toch niet zo moeilijk om die @ weg te halen, en kan je meteen een errorfunctie schrijven, dan werk je dat ook netjes weg. En nee niet met "or die()" ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok nou heb ik het zo gedaan

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
if( getenv('HTTP_X_FORWARDED_FOR') == '' ){
        if ( getenv ("REMOTE_ADDR") == '' ){
            $ip = "127.0.0.1";
        } else {
            $ip = getenv ("REMOTE_ADDR");
        }
    } else {  
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    }

$file = fopen("ip.txt", "a+");
$date = date ("j M Y H:i:s");
$content = $ip."      ".$date." \n";
$deev = gethostbyaddr($REMOTE_ADDR);
fwrite($file , "$content $deev");

?>


maar nu geeft hij de volgende fout weer
code:
1
Warning: Address is not a valid IPv4 or IPv6 address in /usr/local/apache2/htdocs/info/ja.php on line 15


en als ik dan in de ip.txt ga kijken, dan heeft hij het adres, de datum en tijd in het bestand geschreven, maar de host heeft hij niet opgeslagen (dat is dus de fout denk ik die word gegeven)

Weten jullie daariets op:?

Greetz

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

"$deev = gethostbyaddr($REMOTE_ADDR);"

waar wordt die variabele $REMOTE_ADDR gedefinieerd?
Je moet toch zelf es leren debuggen, want dit soort simpele foutjes spot ik in enkele seconden... En dat is nou niet omdat ik intelligenter ofzo ben (zou ik niet weten of dat zo is ;) ), maar gewoon omdat ik geleerd heb hoe je foutmeldingen moet lezen en de oorzaken eenvoudig kan achterhalen...

Acties:
  • 0 Henk 'm!

Verwijderd

ACM schreef op 23 mei 2003 @ 17:54:
"$deev = gethostbyaddr($REMOTE_ADDR);"

waar wordt die variabele $REMOTE_ADDR gedefinieerd?
Je moet toch zelf es leren debuggen, want dit soort simpele foutjes spot ik in enkele seconden... En dat is nou niet omdat ik intelligenter ofzo ben (zou ik niet weten of dat zo is ;) ), maar gewoon omdat ik geleerd heb hoe je foutmeldingen moet lezen en de oorzaken eenvoudig kan achterhalen...
$REMOTE_ADDR is een standaard php variable die het IP van de bezoeker bevat :)

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 23 mei 2003 @ 17:58:
$REMOTE_ADDR is een standaard php variable die het IP van de bezoeker bevat :)
Idd, en ik vind dat ACM dat wel had moetten weten :+

Maar als je dit vanuit een functie doet moet je WEL die variable op GLOBAL moetten hebben, anders kan je daar niet bij in een functie. Als dat niet kan -> Dan neem ik ook terug wat ACM zij.

[ Voor 3% gewijzigd door Verwijderd op 23-05-2003 18:42 . Reden: = als dat niet kan.... ]


Acties:
  • 0 Henk 'm!

Verwijderd

en anders gewoon $_SERVER['REMOTE_ADDR'] ;)

Overigens kan je beter dit doen:
PHP:
1
2
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : $_SERVER["REMOTE_ADDR"];
$host = @gethostbyaddr($ip);


en dan $host wegschrijven.

edit:

lama ... zie dat je die forward al deed |:(

[ Voor 131% gewijzigd door Verwijderd op 23-05-2003 18:29 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
dus hi is al geefiieerd :P ,l omdat die standaard is :P

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 23 May 2003 @ 17:58:
$REMOTE_ADDR is een standaard php variable die het IP van de bezoeker bevat :)
Hoe zeker ben je er van dat ie idd een waarde bevat :?

Want dat is de enige plek waar de warning die je toont vandaan kan komen en als je een recente php hebt of bezig bent in functies heeft ie geen waarde.
Verder doe je steeds getenv('...') en dan ineens een variabele aanroep, sowieso niet handig om dat op verschillende manieren te doen...

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 23 May 2003 @ 18:25:
PHP:
1
$ip = isset($_SERVER["HTTP_X_FORWARDED_FOR"]) ?
Wat jullie overigens allemaal vergeten is dat als je een gewone thuis proxy gebruikt je wel het adres van de proxy moet hebben en niet de forwarded_for ... Want er kan dan heel goed als ip 192.168.0.1 staan en daar heb je vrij weinig aan.

Mooier is wellicht zelfs nog het controleren op 192.168.x.x/10.x.x.x/172.benikvergeten.x.x enzo :)

Trouwens, handiger is gewoon om beide erin te zetten als het toch om een logfile gaat.

Thx erkens :)

[ Voor 31% gewijzigd door ACM op 23-05-2003 23:38 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

ACM schreef op 23 May 2003 @ 23:34:
Mooier is wellicht zelfs nog het controleren op 192.168.x.x/10.x.x.x/172.benikvergeten.x.x enzo :)
offtopic:
172.16.x.x-172.32.x.x

Acties:
  • 0 Henk 'm!

Verwijderd

pssst
error_reporting(E_ALL);

Acties:
  • 0 Henk 'm!

Verwijderd

$_SERVER['REMOTE_ADDR']; is beter...

Acties:
  • 0 Henk 'm!

Verwijderd

$REMOTE_ADDR wordt met de nieuwere php versies niet meer standaard gedefinieerd (REGISTER_GLOBALS uit). gebruikt in plaats van $REMOTE_ADDR eens $_SERVER["REMOTE_ADDR"]. die is niet afhankelijk van register_globals, dus werkt altijd. Laat het even weten :)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Verwijderd schreef op 23 May 2003 @ 17:58:
[...]


$REMOTE_ADDR is een standaard php variable die het IP van de bezoeker bevat :)
Alleen als je register globals aan hebt staan, geloof ik.

yup, je wil anders waarschijnlijk $_SERVER['REMOTE_ADDR'] gebruiken.

[ Voor 13% gewijzigd door Grijze Vos op 25-05-2003 01:42 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1