Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Externe Seite verlinken





Frage

Hallo, über <a href="..."></a> kann ich auf externe Seiten verlinken. Mit fopen und implode geht das zwar, aber damit würde ich die Seite bei mir komplett einbinden und deren Verlinkungen gehen nicht mehr. Wie kann ich das realisieren?

Antwort 1 von Nessus

Hi,

ich kann dir nicht ganz folgen, was willst du damit erreichen?
Wenn Du fremden Contend auf deiner Seite einstellst und ausgibst, machst du dich Strafbar.
Ansonsten sollte dir die Klasse Snoopy weiterhelfen.

Nessus

Antwort 2 von SGD-Daniel1

Ich erkläre das noch mal neu:

und zwar baue ich gerade an einem dynamischen Menü. Durch eine "root"-Variable setze ich den Wert auf "/", so das die Verlinkung dort startet.

Situation:
Im dyn. Menü klicke ich auf "Tabelle", die auf die "tab.php" verweist. In der "tab.php" habe ich eine Tabelle mit 2 Zellen erstellt. In der linken Zelle hole ich mir per "include" das Menü. In der rechten Zelle soll dann die Tabelle erscheinen.

Problem:
Mit "fopen", "implode" usw. lese ich die Seite komplett ein, so dass die Hyperlinks nicht mehr funktionieren, weil die Seiten direkt auf meine Domain eingelesen werden. Die Hyperlinks sollen aber weiterhin funktionieren.

@Nessus:
Mein Problem erklärt es, warum ich mich strafbar mache. Ich möchte nur die externen Seiten einbinden lassen. (Genehmigung eingeholt)

Welche "Klasse Snoopy"?

Antwort 3 von Nessus

Hi,

mal kurz gegoogelt:
http://www.m-software.de/section.php?c=6

Nessus

Antwort 4 von SGD-Daniel1

Funktioniert bei mir nicht. Habe folgendes eingegeben:

$snoopy->fetchtext(" ... ");
print ($snoopy->results);

Obwohl die Erklärung drüber mir erahnen lässt, dass man die Verlinkung auf der externen Seite ebenfalls nicht nutzen kann!

Antwort 5 von Nessus

Du hast innerhalb 9 Minuten die Klasse runtergelden, die Readme gelesen/verstanden, getestet und auf deinen Server übertragen?
Genial, ich habe hier einen 19 Bändigen Brockhaus stehen, den hätte ich gerne bis morgen im Word abgetippt, mit deiner Hilfe geht das sicherlich.

Übrigens funktioniert das mit Snoopy.
Wenn nicht, die Seite liegt in einem String vor, jetzt mußt du nur mir Regex die betreffenden Stellen filtern und ersetzen.

Nessus

Antwort 6 von SGD-Daniel1

Runterladen? Wo gibt´s dort ein Downloadlink?

Antwort 7 von SGD-Daniel1

Habe sie gerade gefunden. Mit welchem Programm kann man "*.tar.gz" öffnen?

Antwort 8 von IchProbiersMal

Auch wenn ich noch nicht so ganz raffe, wie das konkrete Problem nun aussieht, werfe ich einfach mal den Html-BASE-Tag in den Raum:
http://de.selfhtml.org/html/kopfdaten/basis.htm#adresse

Antwort 9 von SGD-Daniel1

<head>
<base href="http://aktuell.de.selfhtml.org">
<!-- ... andere Angaben im Dateikopf ... -->
</head>

Das habe ich gemacht, passieren tut aber nix.

Antwort 10 von IchProbiersMal

Wie gesagt, ich steig bei Deinem Prob bis jetzt nicht durch. Ich erklär einfach mal, wozu der Base-Tag benutzt werden kann, und Du kannst dann entscheiden, ob Dir das hilft.
Mit dem Base-Tag kann man relative Pfadangaben in einer Html-Seite mit einer anderen Basis versehen, als der, die normalerweise verwendet wird (nämlich die Adresse der Seite selbst). Beispiel:

Adresse der Seite:
http://www.test.de
Relativer Link im Dokument:
<a href="index.htm">link</a>
Der Browser baut daraus diese absolute Adresse:
http://www.test.de/index.htm
Wenn aber im Head steht:
<base href="http://AndereSeite.de">
Dann wird die absolute Adresse zu:
http://AndereSeite.de/index.htm


Antwort 11 von SGD-Daniel1

Achso ... das hilft mir nicht weiter.

Um mein Problem vielleicht anders zu erklären ... ich brauch ein Gegenstück von "include();"

Weil include bindet die "internen Dateien" ein. Ich brauche aber externe Dateien, die eingebunden werden. Aber weben so, dass alle Verlinkungen funktionieren.

Antwort 12 von IchProbiersMal

Zitat:
Ich brauche aber externe Dateien, die eingebunden werden. Aber weben so, dass alle Verlinkungen funktionieren.

Mit "fopen" oder auch "fsockopen" bzw Snoopy, je nach Anforderung, holst Du die Dateien, mit "explode()" trennst Du den Kopf vom Body (bei </head>), fügst an das Ende des Kopfes den entsprechenden Base-Tag an und implodest dann wieder mit implode("</head>",$array). Dann kannst Du das Dokument ausgeben.

Antwort 13 von SGD-Daniel1

Klingt gut, aber kannst du das mal anders erklären. Verstehe das nicht ganz.

Antwort 14 von IchProbiersMal

Wenn es sich um Seiten handelt, die man im Browser einfach durch Eingabe der URL aufrufen kann, dann reicht "fopen" aus, um sie zu öffnen und auszulesen. Wenn die Seiten nur durch Formulare oder mit Cookie oder Referrer - oder, oder .. - aufrufbar sind, benötigst Du "fsockopen", um die Seiten zu holen. Oder Du nimmst Snoopy, was im Kern nur eine Bedienungserleichterung von "fsockopen" darstellt.
Dann musst Du noch den Base-Tag in den Head des Html-Dokuments einfügen. Da gibt es verschiedenste Möglichkeiten das zu realisieren.
Angenommen das Dokument sieht so aus

<html>
<head>
...
...
</head>
<body>
...
...
</body>
</html>

dann würd ich es so machen:

$url="http://test.de";
$htm=getSite($url);
$a=explode("</head>",$htm);
$a[0].="<base href=\"".$url."\">";
$new_htm=implode("</head>",$a);

Die Funktion getSite() enthält das Auslesen der Datei mittels "fopen". Ich denk das kriegst Du selbst hin, deshalb hab ich es weggelassen.

Antwort 15 von SGD-Daniel1

Danke soweit ... ich versuch mich mal dort durchzufitzen.

Antwort 16 von SGD-Daniel1

Also, wenn ich das ...

echo $new_htm;

... hinzufüge, bringt er mir gar nichts aus.

Denn deine Variablen sind ja alle vollständig, sofern ich das nachvollziehen konnte.

Antwort 17 von IchProbiersMal

Mein Testskript:

<?php
$htm="
<html>
<head>
...
...
</head>
<body>
...
...
</body>
</html>";
$url="http://test.de";
$a=explode("</head>",$htm);
$a[0].="<base href=\"".$url."\">";
$new_htm=implode("</head>",$a);
echo $new_htm;
?>


Antwort 18 von SGD-Daniel1

Bei mir gibt er immer nur eine weiße Seite aus.

Antwort 19 von IchProbiersMal

Weil Du die HTML-Ansicht anschaust. ;-) Benutze die Quelltextanzeige des Browsers oder führe das Skript in der Konsole, statt auf dem Server aus.

Antwort 20 von SGD-Daniel1

Wie soll ich das denn jetzt verstehen?

Antwort 21 von IchProbiersMal

Also das, was das Skript an Text ausgibt, wird vom Browser ja nicht 1:1 angezeigt, sondern als Html-Befehle interpretiert und ausgeführt. Um zu sehen, wie der "Befehlstext" aussieht, musst Du beim Browser in die entsprechende Ansicht wechseln. Bei jedem Browser solltest Du die Quelltextansicht im Menü "Ansicht" finden.

Antwort 22 von SGD-Daniel1

Wozu das Ganze, wenn man das "normal" im Browser sehen will?
Was ist, wenn die externe Seite sich ändert?

Anders, ist die Seite weiß, lässt sich der Quelltext nicht öffnen. Hole ich eine leere Seite vor (Nue Seite), dann ist Quelltext "grau" im Menü Ansicht hinterlegt und nicht anklickbar.

Antwort 23 von IchProbiersMal

Zitat:
Wozu das Ganze, wenn man das "normal" im Browser sehen will?
Was ist, wenn die externe Seite sich ändert?

Es geht hier nur um einen Test mit einer Seite, die, da einfach gehalten, nichts Darstellbares enthält.
Zitat:
Anders, ist die Seite weiß, lässt sich der Quelltext nicht öffnen.

Keine Ahnung, was Du da machst, dass Du nix sehen kannst. Bleibt nur der Tip, das Skript in der Konsole auszuführen. Du startest die php.exe, wie einen Dos-Befehl, und gibst das Skript, welches ausgeführt werden soll, als Argument an.
Beispiel:
c:\php5\php.exe d:\test\text.php

Antwort 24 von SGD-Daniel1

Achso, dass habe ich die ganze Zeit gemacht ... da bringt er mir folgendes:

$url=" ..."; $htm=getSite($url); $a=explode("",$htm); $a[0].=""; $new_htm=implode("",$a); echo $new_htm; ?>

... steht für die externe Seite

Antwort 25 von IchProbiersMal

Zitat:
Achso, dass habe ich die ganze Zeit gemacht

In der Konsole? Wie haste dann ne weisse Seite gekriegt? Langsam kapier ich nix mehr.
Aber wie auch immer, dann ist das Problem, dass PHP nicht ausgeführt wird oder Du hast den PHP-Anfangstag vergessen (<?php).

Antwort 26 von SGD-Daniel1

Die weiße Seite habe ich bekommen, wenn ich "dein Testscript" online aufgerufen habe.

Das mit der Konsole habe ich Lokal und nicht online gemacht.

Antwort 27 von IchProbiersMal

Zitat:
Das mit der Konsole habe ich Lokal und nicht online gemacht.

Haste denn PHP bei Dir lokal überhaupt installiert? Sonst kann das in der Konsole nämlich nicht funzen. Einen lokalen Webserver scheinst Du ja nicht zu haben, oder doch? Wäre jedenfalls zu empfehlen, weil das wesentlich praktischer fürs Entwickeln ist, als ein externer Server. Und dann klappts auch in der Konsole:
http://www.apachefriends.org/de/xampp.html

Antwort 28 von SGD-Daniel1

Nee, lokal habe ich kein lokalen Webserver. Wozu auch, wenn ich das online teste, was ich testen will.

Aber mein Problem wird doch auch ohne dem lösbar sein oder?

Antwort 29 von SGD-Daniel1

Ich lass das nun mit php ... werde das erstmal mit iframes einbinden.

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: