Florian Auer: URL zerlegen

Beitrag lesen

Hi,

am einfachsten geht das wohl mit Mach-es-kaputt-und-bau-es-wieder-zusammen-Spielerei.

--------------- 8< ---------------
#!/usr/bin/perl

$url = "http://abc.xyz.domain.tld/verzeichnis/nocheins/nr3/index.mit.ein.paar.punkten.html";

$url =~ s/http:////gi;  # das http:// braucht niemand
@urlparts = split(///, $url);  # trennen der url durch ihre /
$urlpcount = @urlparts;  # bestimmen der anzahl der teile

@domain = split(/./, $urlparts[0]);  # trennen des domainnamens
$domcount = @domain;  # bestimmen der anzahl der domains im namen
$sldtld = $domain[$domcount-2].".".$domain[$domcount-1];  # zusammensetzen von sld und tld

for ($i=1;$i<=$urlpcount-2;$i++) {  # beginnen beim ersten verzeichnis, enden beim letzten, eins hochzählen
   $directory = $directory."/".$urlparts[$i];  # zusammensetzen des verzeichnisses
}

$directory = $directory."/";  # anfügen des / am schluss

@filenameparts = split(/./, $urlparts[-1]);  # zerlegen des dateinamens
$filenamepcount = @filenameparts;  # bestimmen der anzeil der teile des dateinamens

if ($filenamepcount > 1) {  # prüfen, ob es überhaupt eine endung gibt
 for ($i=0;$i<=$filenamepcount-2;$i++) {  # beginnen am anfang, enden beim vorletzten teil, eins hochzählen
   $filename = $filename.".".$filenameparts[$i];  # zusammensetzen des dateinamens
 }
 $filename = substr($filename, 1, length($filename));  # den . am anfang wegschneiden
 $filetype = $filenameparts[-1];  # der dateityp ist am schluss
}
else {  # das passiert, wenn es keine endung gibt
 $filename = $filenameparts[0];
}

ausgabe

print "Content-type: text/html\n\n";

print "URL: ".$url."<br>\n";
print "Domain: ".$sldtld."<br>\n";
print "Verzeichnis: ".$directory."<br>\n";
print "Dateiname: ".$filename."<br>\n";
print "Dateityp: ".$filetype."\n";
--------------- 8< ---------------

Funktioniert mit beliebig vielen Subdomains, beliebig vielen oder überhaupt keinen Verzeichnissen und beliebig vielen Punkten im Dateinamen. Freut sich auch über Dateinamen ohne Punkte. Ist getestet und läuft so wie es da steht. Hoffe, geholfen zu haben.

Grüße,
Florian Auer