Base-URL einer externen Seite

Alaitoc

Erfahrenes Mitglied
Guten Tag zusammen,

ich grabe mich schon seit einer Zeit durchs Internet und verzweifel so langsam.

Aufgabenstellung:
Externe URL wird angegeben. Base-URL (die URL wovon die relativen Pfade ausgehen) soll ermittelt werden, d.h. auch wenn da z.b. ein <base> Tag steht.

Ich habe schon Sachen wie parse_url, dirname...etc ausprobiert, bin aber bisher noch zu keinem vernünftigen Ergebnis gekommen.

Vll. könnt ihr mir ja weiterhelfen :)

MfG Alaitoc
 
Nein ich gebe irgendeine URL an
Url: z.B. http://www.xqz.de/ordner/datei.php.

Von dieser URL möchte ich nun die BASE Url, d.h. die URL von der alle relativen Pfade ausgehen
Relativer Pfad: z.B. /styles/default.css
BASE Url: z.B. http://www.xqz.de oder http://www.xqz.de/ordner/

Ich will halt im Endeffekt eine URL angeben, daraus soll eine PDF generiert werden. Das klappt auch soweit, aber bisher muss ich die BASE Url selbst angeben. Da er ja alle relativen Pfade auflösen muss.

Mir wäre es halt lieber wenn ich eine URL angebe, auf PDF generieren klicke und Ta-da~

MfG Alaitoc
 
Ich hab mal ne Funktion geschrieben. Sie hat mit allen URLs funktioniert. Wichtig ist nur, dass die URL immer mit http:// beginnt. Aber du kannst sie ja noch ausbauen das das die Funktion das auch noch abtestet.

PHP:
<?php
	function get_base_url($url){
		$part = explode("/", $url);
		$base_url = $part[0]."//".$part[2]."/";
		return $base_url;
	}
	
	echo get_base_url("http://www.tutorials.de/php/379577-base-url-einer-externen-seite.html");
?>
 
So wird nun immer der letzte Ordner als BASE-URL angegeben

PHP:
<?php
	function get_base_url($url){
		$part = explode("/", $url);
		$num = count($part)-1;
		$base_url = "";
		$i = 0;
		do{
			$base_url = $base_url.$part[$i]."/";
			$i++;
		}while($i < $num);
		return $base_url;
	}
	
	echo get_base_url("http://www.tutorials.de/php/379577-base-url-einer-externen-seite.html");
?>
 
Versuch doch mal das hier:
PHP:
print_r(parse_url('http://www.tutorials.de/php/379577-base-url-einer-externen-seite.html');

Im Prinzip ist es recht einfach, Ihr ermittelt alle Links eines Dokument.
Wenn ein Link absolut ist also mit '/' und nicht mit einem FQDN beginnt muss nur noch der Host Anteil ergänzt werden.
Ist er relativ den Wert des Base Tags mit parse_url zerlegen. Beginnt der relative Link mit './' kann die URL direkt ergänzt werden, beginnt er mit '../' muss man entsprechen oft zur nächst höheren ebene wechseln. Ist der Base-Tag nicht gesetzt ergänzt ihr mit der Dokument URL.
 
Ich habe es nun anders gelöst:
Sobald der Nutzer eine URL angibt, wird er nun per header("Location: pdf.php?url=".$_POST["url"]);
an die Erzeugungsmethode für das PDF weitergeleitet.

Per $url = urldecode($_REQUEST['url']); ermittel ich die Adresse mit der ich arbeite und auch den HTML Teil auslese, bevor ich dann den Erstellungsvorgang der PDF einleite, überprüfe ich aber nun auch noch ob ein <base> Tag vorhanden ist.

Da hat mir diese Funktion sehr weitergeholfen:
http://www.alant.com/php/348-php-html-xml-tag-attribute-ermitteln.html

Wenn ein <base> Tag vorhanden ist, nutze ich die angegebene URL, sonst nehme ich die übergebene URL als BasePath.

Bisher funktioniert es zumindest (:

MfG Alaitoc

PS: Trotzdem vielen Dank für alles!
 
Zurück