[php] controleren of een externe file bestaat2

Pagina: 1
Acties:
  • 168 views sinds 30-01-2008
  • Reageer

Onderwerpen


  • aKeY
  • Registratie: Maart 2001
  • Laatst online: 09-09 12:12
k wil controleren of een extern bestand bestaat aan de hand van een URL.

Zo iets dus:

PHP:
1
2
3
4
5
<?
if (file_exists("../images/img.jpg")) {
  echo "file bestaat";
}
?>



Maar dan i.p.v. een pad wil ik een URL meegeven.
(iets wat de functie "file_exists" NIET accepteerd )


Ik had hier al een topic over geopen, maar deze werd meteen gesloten. Daarbij werd vermeld dat ik de documentatie ff moest checken. Maar dat had ik dus al gedaan.

De oplossing die voorgedragen wordt (een fopen) die ook in de documentatie staat had ik ook al getest. Maar die werkt dus NIET aangezien ik dan een foutmelding krijg wanneer het bestand niet bestaat.

(Warning: fopen("http://www.domeinnaam.nl/img.jpg", "r") - Success in /data/www/sitenaam/file.php on line 106)

En gelieve nu niet weer meteen dit topic te sluiten a.u.b.

Een dag is een dag...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

pfff, sorry hoor, maar wat zegt je documentatie over het onderdrukken van errors? JUIST, de @-operator

PHP:
1
$f = @fopen (...);
zorgt ervoor dat errors niet geprint worden

hier dus: http://www.php.net/manual...perators.errorcontrol.php

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • aKeY
  • Registratie: Maart 2001
  • Laatst online: 09-09 12:12
Dat is toch enorm ranzig programmeren.
Ben niet zo'n voorstander van het op die manier negeren van errors die wel nog steeds aan wezig zijn.

Een dag is een dag...


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Lees de docs, er is niets ranzigs aan. Natuurlijk is er een error: de file bestaat immers niet. Die error moet jij afvangen, en dat doe je in dit geval ook. Alleen moet je er wel voor zorgen dat die error niet zomaar naar de stdout geslingert wordt, en daar is de @ operator voor

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

Anyway, dit heeft wel weer lang genoeg geduurt. Deze topic was echt totaal niet nodig geweest als jij je even had verdiept in de php syntax (er staat nota bene een voorbeeld met file () bij), en dat zeg ik als php-n00b

.edit: open op verzoek

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Is er geen andere oplossing dan gebruik te maken van fopen();?

Dit omdat deze funtie de pagina enorm vertraagd.

  • aKeY
  • Registratie: Maart 2001
  • Laatst online: 09-09 12:12
Helemaal niemand toevallig een andere oplossing, die "netjes" is en niet vertragend werkt?

Een dag is een dag...


  • sjon.
  • Registratie: November 2002
  • Laatst online: 14-01-2024
een HEAD request doen, en kijken of je een 404 terug krijgt. bij phpfreakz.nl hebben ze in de script-lib een functie daarvoor, volgens mij geschreven door mathieu (? die van map-is.nl)
probeer dat maar eens...
btw: een HEAD request haalt niet de hele file binnen, en dat is dus de oorzaak van die 'traagheid'...

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 17-09 14:05

.oisyn

Moderator Devschuur®

Demotivational Speaker

fopen () hoeft de file ook niet helemaal binnen te halen. Zodra ie een OK krijgt dan zou ie moeten returnen (de binnenkomende data wordt gewoon gebufferd door de onderliggende socket implementatie), en als jij die file closed dan wordt die data geignored en de socket dichtgegooid. Zou dus net zo snel moeten zijn als een HEAD

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Mafioso
  • Registratie: November 2000
  • Laatst online: 17-09 20:33
Sorry hoor .. maar de oplossing die ik in je vorige topic gaf werk zo snel als een tiet hoor ....

PHP:
1
2
3
4
5
if (!@fopen($url,"r")) {
  echo "Offline";
} else {
  echo "Online";
}


Ik had idd ff niet aan de @ gedacht, maar had je natuurlijk zxelf ook wel kunnen verzinnen .. opzich kan ik me voorstellen dat je die @ niet echt 'netjes' vindt. Ik zou het zelf ook altijd proberen te mijden, maar voor dit geval boeit het niet echt. (imo)

  • sjokki
  • Registratie: Juli 2002
  • Niet online
.oisyn schreef op 14 November 2002 @ 22:16:
fopen () hoeft de file ook niet helemaal binnen te halen. Zodra ie een OK krijgt dan zou ie moeten returnen (de binnenkomende data wordt gewoon gebufferd door de onderliggende socket implementatie), en als jij die file closed dan wordt die data geignored en de socket dichtgegooid. Zou dus net zo snel moeten zijn als een HEAD
Fopen leest bij een remote bestand ongeveer 3kB naar een buffer, ook al doe je geen fread. Fsockopen doet dit ook. Een HEAD-request is dus wel sneller dan een GET-request in php.

edit:
Ik heb even gekeken of dit verschil ook te meten was in seconden. De HEAD-requests waren niet of nauwelijks sneller, categorie mierenneukerij dus.
Pagina: 1