[PHP] "/" toevoegen aan einde string

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
Het zal misschien niet de meest ingewikkelde php-vraag zijn, maar ik kwam er na heel wat zoeken op GoT, php.net, google en phpfreakz niet uit.

Ik heb een linkchecker gemaakt. Hij werkt goed, behalve dan dat er na een url die niet eindigt met een filenaam een / toegevoegd moet worden.

http://www.domein.nl -> "/" toevoegen
http://www.domein.nl/index.html -> geen "/" toevoegen

Dit is wat ik heb tot nu toe:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$url = str_replace('http://', '', $url);
$url = "http://$url";
$fp = @fopen("$url","r");
if ($fp) {
    $check = "goed";
}
else {
    $check = "fout";
}
echo "url is $check";
?>


Hoe kan ik nou een "/" laten toevoegen aan de url als deze niet eindigt met een bestandsnaam? Alvast bedankt.

Acties:
  • 0 Henk 'm!

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 29-05 14:39
waarom moet dat?
Maar kan je niet gewoon laten splitsen op punten, en als het laatste stukkie langer is dan 3 tekens, je een / toevoegt? Moet toch kunnen lijkt me?

Was ik maar rijk en niet zo knap...


Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

kan niet, je weet immers niet of iets een dir is of een bestand

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.


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
Sjeik schreef op 17 november 2002 @ 22:03:
waarom moet dat?
Maar kan je niet gewoon laten splitsen op punten, en als het laatste stukkie langer is dan 3 tekens, je een / toevoegt? Moet toch kunnen lijkt me?
www.woei.info ;)

Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
Sjeik schreef op 17 november 2002 @ 22:03:
waarom moet dat?
Maar kan je niet gewoon laten splitsen op punten, en als het laatste stukkie langer is dan 3 tekens, je een / toevoegt? Moet toch kunnen lijkt me?
Anders geeft hij aan dat http://www.domein.nl niet bestaat. http://www.domein.nl/ bestaat volgens hem wel.

Over dat splitsen heb ik ook zitten denken, maar hij kan eindigen op .htm dan moet er geen / toegevoegd worden. Maar als hij eindigt op .com (ook 3 tekens) dan moet hij wel een / toevoegen.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

oh, dus het moet alleen bij een domeinnaam
dan kun je simpelweg checken of er na protocol:// nog een slash staat... zo niet, dan moet ie worden toegevoegd :)

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.


Acties:
  • 0 Henk 'm!

  • Sjeik
  • Registratie: Augustus 2001
  • Laatst online: 29-05 14:39
Dan ga je een lijstje maken met extenties waar die wel wat moet doen.. Dus bij .nl en .com en .info wel... maar bij .htm .html .php .asp niet
Dat moet zeker wel kunnen denk ik, maar das niet altijd even veilig (voor als ie eens iets niet kent!)

Was ik maar rijk en niet zo knap...


Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
.oisyn schreef op 17 november 2002 @ 22:07:
kan niet, je weet immers niet of iets een dir is of een bestand
Maar hoe doen andere linkcheckers dit dan?

En volgens mij moet zoiets wel kunnen met parse_url. Maar het lukte mij nog niet helemaal.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

te(X)en schreef op 17 November 2002 @ 22:11:
Maar hoe doen andere linkcheckers dit dan?


wat doet een linkchecker precies?
en het enige verschil om te kijken of iets een dir is of een bestand is te connecten naar die url... als je een Location: header terug krijgt met dezelfde URL maar dan met een / erachter dan is het dus een directory
of misschien is er een ander HTTP commando voor, dat weet ik verder niet, maar je zult iig moeten connecten

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.


Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
checken of een url bestaat of niet.

Acties:
  • 0 Henk 'm!

  • Jelmer
  • Registratie: Maart 2000
  • Laatst online: 11:59
Waarom connect je niet gewoon met de host en doe je een HEAD request? Als je dan een 404 terug krijgt weet je hoe laat het is..

Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
Omdat ik niet alleen wil weten of de host bestaat maar de hele url moet goed zijn. Anders is zijn alle www.tripod.com/*.* ook goed.

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

uhm, met head zoek je naar een bestand op de server, en krijg je een 404 als dat bestand niet bestaat

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.


Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
Ik heb het nu maar op deze manier opgelost:
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
<?php
$url = str_replace('http://', '', $url);
$url = "http://$url";

$url = ereg_replace (".nl$", ".nl/", $url);
$url = ereg_replace (".com$", ".com/", $url);
$url = ereg_replace (".net$", ".net/", $url);
$url = ereg_replace (".org$", ".org/", $url);
$url = ereg_replace (".edu$", ".edu/", $url);
$url = ereg_replace (".be$", ".be/", $url);
$url = ereg_replace (".de$", ".de/", $url);
$url = ereg_replace (".uk$", ".uk/", $url);
$url = ereg_replace (".fr$", ".fr/", $url);
$url = ereg_replace (".tk$", ".tk/", $url);
$url = ereg_replace (".to$", ".to/", $url);
$url = ereg_replace (".nu$", ".nu/", $url);
$url = ereg_replace (".tv$", ".tv/", $url);
$url = ereg_replace (".info$", ".info/", $url);

$fp = @fopen("$url","r");
if ($fp) {
    $check = "goed";
}
else {
    $check = "fout";
}
echo "url is $check";
?>


Wel niet zo netjes, maar het werkt (voor de meest voorkomende domeinen iig).
Bedankt voor de tips!

Acties:
  • 0 Henk 'm!

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

.oisyn

Moderator Devschuur®

Demotivational Speaker

dus je checkt nu alleen op domeinnaam?
[rml].oisyn in "[ PHP] "/" toevoegen aan einde string"[/rml]

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.


Acties:
  • 0 Henk 'm!

  • Nielsz
  • Registratie: Maart 2001
  • Niet online
En stop het dan ten minste in een array :)

Acties:
  • 0 Henk 'm!

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

PHP:
1
if(preg_match('^/http:(\/|\){2}([a-z0-9\-]+\.)+\.[a-z]{2,6}$',$url)) $url.='/';

Localhost, sweet localhost


Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Kan in zijn geval makkelijker,
PHP:
1
IF ( substr_count( $url, "/") <= 2 ) $url .= "/";
Maar als er goed gelezen was had .oisyn dit ook al aangestipt

42


Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

kunt natuurlijk de url ook laten checken door fopen() te doen of zo.. als ut niet opent dat hij dan een fout terug geeft. ( snelle host aanbevolen )

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Kwai_gon_jinn schreef op 18 november 2002 @ 08:59:
kunt natuurlijk de url ook laten checken door fopen() te doen of zo.. als ut niet opent dat hij dan een fout terug geeft. ( snelle host aanbevolen )
Ermm.. dat is verstandig...

Wat nou als de andere host traag is?

Kan je beter checkdnsrr gebruiken, dan bereik je bijna net zoveel mee. En dit zal overhet algemeen veeeeeel sneller zijn.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En dan ga ik nog even flauw zijn :) (werd al wel tussen de regels door gezegd trouwens)
Een dir moet ook op een / eindigen, anders krijg je een 302 header teruggestuurd. Dus www.bla.nl/dir is fout (meestal krijg je dus een goede 302 header toegestuurd, maar dat hoeft niet perse) en www.bla.nl/dir/ is goed.

Sterker nog, alleen files mogen niet op een / eindigen (sommige servers accepteren het overigens wel, apache geloof ik altijd wel?), want als je een 'domein' opent (dus alleen www.bla.nl) moet je eigenlijk de root-dir ( / ) erop openen.

Makkelijkste oplossing is waarschijnlijk nog steeds het op een 404 controleren dmv een HEAD commando.
Als je een 200 OK of 302 Temporarily Moved terugkrijgt is de url in principe geldig :)

Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

ACM schreef op 18 november 2002 @ 09:10:
En dan ga ik nog even flauw zijn :) (werd al wel tussen de regels door gezegd trouwens)
In dit geval ben je niet zo heel flauw, puur omdat de topicstarter hier niet over nagedacht heeft of puur niet nodig is..

Maar ook dit is niet zo'n probleem.. Je kijkt of er achter de laatste / nog iets voorkomt.. komt er iets voor dan kijk je of er een . in zit.. Zo ja, klaar zo nee, nog een / toevoegen..

42


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Prutser_IA schreef op 18 November 2002 @ 09:13:
Maar ook dit is niet zo'n probleem.. Je kijkt of er achter de laatste / nog iets voorkomt.. komt er iets voor dan kijk je of er een . in zit.. Zo ja, klaar zo nee, nog een / toevoegen..

Dan zit je nog met servlet-namen (bevatten niet perse een ., maar zijn ook geen dirs, alhoewel de servlet engine de trailing slash vast accepteerd)
En met dirnamen met .jes erin...

Ik denk niet dat je een universele link checker kan maken, je kan van standaard situaties uitgaan, maar er is altijd wel een uitzondering die er niet in past.
Imho is het dan netter (en ze zijn er niet voor niets) naar de response codes te kijken (404 -> bestaat zeker weten niet, 200 -> bestaat zeker weten, 302 -> bestaat waarschijnlijk wel ) dan naar andere elementen.

Acties:
  • 0 Henk 'm!

  • Prutser_IA
  • Registratie: Januari 2000
  • Laatst online: 03-06-2021

Prutser_IA

<*{{{><

Uitzonderingen zijn er helaas altijd, want wou zou het leven toch makkelijk zijn als die dingen er niet waren :D

Maar goed, voor de topicstarter zijn naar mijn idee meer dan genoeg tips gegeven..

Nog even klein stukje code
PHP:
1
2
$stukjes = ( explode("/", $url );
IF ( substr_count( end( $stukjes ), "." ) != 1 ) $url .= "/";
Maar het idd netter om via response code te werken

42


Acties:
  • 0 Henk 'm!

  • te(X)en
  • Registratie: Mei 2000
  • Laatst online: 24-10-2024
Ok, bedankt voor de tips allemaal. Ik ga nog maar eens een avondje uit zitten vogelen hoe alles werkt (* te(X)en is n00b), maar hier moet ik een heel eind mee komen. Nogmaals bedankt!
Pagina: 1