Sebastian Becker: Tell a friend

Hallo,

ich möchte in meine statischen Seiten eine Empfehlungsfunktion einbauen, die auch unabhängig von JavaScript mit PHP funktioniert.

Das Auslesen des Referrers ist ja auch kein Problem. Auf welche Weise komme ich aber an den Titel der Referrer-Seite. Muß ich dazu die Seite per PHP öffnen und den Titel "grabben"? Wie mache ich das am besten oder gibt es elegantere Lösungen?

Vielen Dank für die Hilfe,

Grüße,

Sebastian

  1. Hi,

    [...] die auch unabhängig von JavaScript mit PHP funktioniert.

    das ist schon mal ein sehr nützlicher Ansatz.

    Das Auslesen des Referrers ist ja auch kein Problem.

    Ach, tatsächlich? Komisch, ich sehe das anders. Du weißt nämlich nicht, ob der HTTP-Referer auch Daten enthält, die irgendwas mit der Realität zu tun haben. Sehr beliebt sind z.B. die Werte "nichts", "Homepage des Besuchers" und "Request-URL".

    Auf welche Weise komme ich aber an den Titel der Referrer-Seite.

    Nachdem Du die URL aus dem Parameter ermittelt hast, in dem Du sie abgelegt hast, kannst Du das von Dir definierte Format (z.B. symbolische Namensvergabe, nur der Localpart der URI) verwenden, um in Deinem Filesystem nach der Angabe zu suchen; wobei ich davon ausgehe, dass Du den Titel nicht z.B. generierst. Sowas macht die Sache komplizierter.

    Sollten sich die Seiten nicht in Deinem Filesystem oder anderen lokalen Quellen befinden, sprich: liegen sie auf anderen Servern, so musst Du einen HTTP-GET (oder -POST) durchführen und die Rückgabe analysieren. Idiotischerweise kannst Du dies ebenfalls mit fopen() tun.

    Muß ich dazu die Seite per PHP öffnen und den Titel "grabben"?

    Es gibt meines Wissens kein magisches "getTitleByFileOrRessource" oder so. PHP nimmt Dir nicht _jede_ Denkarbeit ab.

    Wie mache ich das am besten oder gibt es elegantere Lösungen?

    Da Du bereits die URL (bzw. einen Hinweis darauf) in den Link schreibst, kannst Du den Seitentitel gleich hinzusetzen.

    Cheatah

    1. Hallo, Cheatah,

      danke für die Antwort.

      Du weißt nämlich nicht, ob der HTTP-Referer auch Daten enthält, die irgendwas mit der Realität zu tun haben. Sehr beliebt sind z.B. die Werte "nichts", "Homepage des Besuchers" und "Request-URL".

      Mit $HTTP_REFERER habe ich bislang eigentlich immer die aufrufende Seite ausfindig machen können. Wann klappt das denn nicht und wie kann ich dieses Problem umgehen?

      Nachdem Du die URL aus dem Parameter ermittelt hast, in dem Du sie abgelegt hast, kannst Du das von Dir definierte Format (z.B. symbolische Namensvergabe, nur der Localpart der URI) verwenden, um in Deinem Filesystem nach der Angabe zu suchen; wobei ich davon ausgehe, dass Du den Titel nicht z.B. generierst. Sowas macht die Sache komplizierter. Sollten sich die Seiten nicht in Deinem Filesystem oder anderen lokalen Quellen befinden, sprich: liegen sie auf anderen Servern, so musst Du einen HTTP-GET (oder -POST) durchführen und die Rückgabe analysieren. Idiotischerweise kannst Du dies ebenfalls mit fopen() tun. Da Du bereits die URL (bzw. einen Hinweis darauf) in den Link schreibst, kannst Du den Seitentitel gleich hinzusetzen.

      Entschuldigung, ich bin zu dumm, das zu verstehen - oder wir reden aneinander vorbei. Also ich will einfach nur den Seitentitel auslesen und versenden. Bei einer JavaScript-PopUp-Lösung würde ich das machen mit window.opener.document.title. Dafür suche ich ein PHP-Äquivalent.

      Grüße,

      Sebastian

      1. Hi,

        Mit $HTTP_REFERER

        benutze bitte ausschließlich getenv(), $HTTP_GET_VARS, $HTTP_POST_VARS und ähnliche vordefinierte(!) Funktionen und Methoden, anstatt Dich auf willkürlich in den globalen Namespace gehauene Variablennamen zu verlassen. Was mag wohl das Ergebnis sein, wenn Dein Script mit "?HTTP_REFERER=blablub" aufgerufen wird? Stichwort Sicherheistrisiko.

        habe ich bislang eigentlich immer die aufrufende Seite ausfindig machen können.

        Du meinst: In Deinen wenigen Testfällen, die in definierter Umgebung stattfanden. Tja, bei _Dir_ mag wirklich ausnahmslos jeder Test erfolgreich sein - Du lässt Deinen Referer vermutlich auch von keinem Proxy verändern.

        Bei anderen ist dem _nicht_ so, und viele haben nicht mal einen Einfluss darauf.

        Wann klappt das denn nicht

        Wenn irgendein System den Referer verändert, oder vielleicht der Browser ihn gar nicht oder falsch setzt. Der Referer ist von jedem, der den Request in die Hand bekommt, beliebig veränderbar; und genau das wird auch rege praktiziert.

        und wie kann ich dieses Problem umgehen?

        Verwende nicht den Referer.

        Nachdem Du die URL aus dem Parameter ermittelt hast, in dem Du sie abgelegt hast, [...]
        Entschuldigung, ich bin zu dumm, das zu verstehen

        Damit wollte ich Dir mitteilen, dass Du die Information, welche Seite empfohlen werden soll, nicht automatisch erhalten kannst. Bringe sie also in dem Link unter, der auf Dein Empfehlungs-Script leitet.

        Also ich will einfach nur den Seitentitel auslesen und versenden.

        Dies wird leider schon dadurch erschwert, dass Dein Script in den Grundlagen fehlerhaft ist, weil es sich auf den Referer verlässt.

        Bei einer JavaScript-PopUp-Lösung würde ich das machen mit window.opener.document.title. Dafür suche ich ein PHP-Äquivalent.

        Ein solches Äquivalent gibt es nicht, weil serverseitig das HTML-Dokument zunächst nicht vorhanden, und später nicht analysiert ist, wie es ein Browser tut. Am einfachsten hast Du es, wenn Du dem Link zusätzlich zur URL auch gleich den Titel mitgibst.

        Cheatah

        1. Hi, Cheatah,

          danke für die Erläuterungen zu $HTTP_REFERER. Ich werd' mal sehen, was mir dazu noch einfällt ...

          Welche "falschen" Werte kann $HTTP_REFERER denn enthalten? Dann kann ich ja nach denen suchen und in diesem Falle einfach die Hompage als Link verschicken ...

          Bringe sie also in dem Link unter, der auf Dein Empfehlungs-Script leitet. [...] Am einfachsten hast Du es, wenn Du dem Link zusätzlich zur URL auch gleich den Titel mitgibst.

          Gerade das wollte ich eigentlich vermeiden, da ich sonst ca. 200 statische Seiten individuell ändern müßte.

          Grüße,

          Sebastian

          1. Hi,

            Welche "falschen" Werte kann $HTTP_REFERER denn enthalten?

            beispielsweise "Roses are read, violets are blue, I'm a schizophrenic and so am I." oder "http://www.deine-domain.de/" oder "http://www.deine-domain.de/empfehlung.php" oder "http://www.meine-coole-homepage.de/" oder "bei Obi".

            Dann kann ich ja nach denen suchen

            Sie können für einen Automatismus (sprich: für jemanden ohne menschliche Intelligenz) vollkommen normal aussehen.

            Bringe sie also in dem Link unter,
            Gerade das wollte ich eigentlich vermeiden, da ich sonst ca. 200 statische Seiten individuell ändern müßte.

            Ja. Du hast die Wahl: Entweder Du vermeidest es, oder es funktioniert.

            Übrigens: Auch statische Seiten lassen sich "editorseitig" automatisch anpassen. Das ist eine Frage der verwendeten Tools und/oder Projektverwaltung. Und: Statische Seiten kann man recht einfach zu dynamischen machen, z.B. mit SSI (was sich anschließend hochoptimieren lässt).

            Cheatah

            1. Hi, Cheatah,

              "Roses are read, violets are blue, I'm a schizophrenic and so am I."

              LOL

              Ja. Du hast die Wahl: Entweder Du vermeidest es, oder es funktioniert.

              Ich bin zwar eigentlich kein Freund von faulen Kompromissen, aber im Falle eines solchen Luxusfeatures wäre ich durchaus bereit, einigen wenigen Nutzern nicht die volle Funktionalität anzubieten ...

              Übrigens: Auch statische Seiten lassen sich "editorseitig" automatisch anpassen. Das ist eine Frage der verwendeten Tools und/oder Projektverwaltung.

              Dazu müßte ich ein Tool haben, daß die URL und den Titel ausliest, ggf. konvertiert und in den Link schreibt. Bis ich das gefunden oder geschrieben habe, mach ich's lieber von Hand ...

              Grüße,

              Sebastian

              1. Hi,

                Ich bin zwar eigentlich kein Freund von faulen Kompromissen, aber im Falle eines solchen Luxusfeatures wäre ich durchaus bereit, einigen wenigen Nutzern nicht die volle Funktionalität anzubieten ...

                es ist zwar schwer, irgendwelche Prozentzahlen zu nennen, zumal sowas nicht unbeträchtlich von der Klientel abhängig ist... aber würdest Du, sagen wir, 50% als "einige wenige" bezeichnen?

                Bei durchschnittlichen Sites ist es sicher kein so hoher Wert. Dennoch ist die Zahl der Betroffenen in jedem Fall bemerkenswert.

                Dazu müßte ich ein Tool haben, daß die URL und den Titel ausliest, ggf. konvertiert und in den Link schreibt. Bis ich das gefunden oder geschrieben habe, mach ich's lieber von Hand ...

                Oder mit einem kleinen Script, welches Deiner Sitestruktur angepasst entwickelt wurde.

                Cheatah

                1. Hi,

                  es ist zwar schwer, irgendwelche Prozentzahlen zu nennen, zumal sowas nicht unbeträchtlich von der Klientel abhängig ist... aber würdest Du, sagen wir, 50% als "einige wenige" bezeichnen?

                  Einspruch, Euer Ehren, Suggestivfrage!

                  Bei durchschnittlichen Sites ist es sicher kein so hoher Wert. Dennoch ist die Zahl der Betroffenen in jedem Fall bemerkenswert.

                  Man tut den "Betroffenen" aber sicherlich nichts Schlimmes an, wenn man ihnen eine verzichtbare Funktion - ohne daß sie es überhaupt merken - vorenthält.

                  Oder mit einem kleinen Script, welches Deiner Sitestruktur angepasst entwickelt wurde.

                  Auf das Prinzip eines solchen Skriptes zielten meine Fragen ja ab ...

                  Vielleicht klappt's ja noch. ;-) Danke jedenfalls für Deine Mühe.

                  Grüße,

                  Sebastian

        2. Hi,

          benutze bitte ausschließlich getenv(), $HTTP_GET_VARS, $HTTP_POST_VARS und ähnliche vordefinierte(!) Funktionen und Methoden, anstatt Dich auf willkürlich in den globalen Namespace gehauene Variablennamen zu verlassen. Was mag wohl das Ergebnis sein, wenn Dein Script mit "?HTTP_REFERER=blablub" aufgerufen wird? Stichwort Sicherheistrisiko.

          da der Referrer, wie du im folgenden ja ausführlich erwähnst, sowieso vom Client verfälscht sein kann, ist das in diesen Fall irrelevant.

          [...] bei _Dir_ mag wirklich ausnahmslos jeder Test erfolgreich sein [...] Bei anderen ist dem _nicht_ so, und viele haben nicht mal einen Einfluss darauf.

          viele? eher wenige. (nicht keine!)

          Wann klappt das denn nicht
          [...] Der Referer ist von jedem [...] beliebig veränderbar;

          => einigen wenigen Eingeweihten. (nicht niemandem!)

          der den Request in die Hand bekommt, beliebig veränderbar; und genau das wird auch rege praktiziert.

          rege=von einigen wenigen freaks.

          http://webalizer.teamone.de/selfforum/ref_200204.htm
          die erste 'gefälschte' Position dürfte sich unter unknown origin bei 0.03% finden...
          Sicherlich verfüge ich nicht über Cheatahs Zugriffsmöglichkeiten auf Webserverstatistiken, aber die Statistik aufs Selfforum dürfte doch einge der originellsten sein die man im Web so antreffen kann, und somit eine einermassen passable Fehlerrateneingrenzung ermöglichen.

          Der häufigste Fall dürfte übrigens ein schlichtweg fehlender Referrer sein, weshalb die von Cheatah vorgeschlagene Lösung mit der im Link ubergebenen URL die einzig praktikable sein dürfte.

          Gruss,
            Carsten

      2. Moin!

        Mit $HTTP_REFERER habe ich bislang eigentlich immer die aufrufende Seite ausfindig machen können. Wann klappt das denn nicht und wie kann ich dieses Problem umgehen?

        Das klappt bei mir nicht, weil mein Opera keinen Referrer sendet. Dagegen kannst du nichts unternehmen.

        Entschuldigung, ich bin zu dumm, das zu verstehen - oder wir reden aneinander vorbei. Also ich will einfach nur den Seitentitel auslesen und versenden. Bei einer JavaScript-PopUp-Lösung würde ich das machen mit window.opener.document.title. Dafür suche ich ein PHP-Äquivalent.

        <a href="/empfehlung.php?title=Der+Seitentitel&url=seitenurl.html">Diese Seite empfehlen</a>

        Das Empfehlungsskript muß dann nur noch die fehlenden Kontaktdaten wie EMail-Adresse etc. entgegennehmen und dann eine schöne EMail versenden. Beachte, daß die Informationen, welche du per URL-Parameter sendest, URL-encoded sein müssen (wie ich durch das Pluszeichen in "Der+Seitentitel" andeuten wollte).

        - Sven Rautenberg

        1. Hallo, Sven,

          <a href="/empfehlung.php?title=Der+Seitentitel&url=seitenurl.html">Diese Seite empfehlen</a>

          Gerade das will ich ja vermeiden, denn ich will jetzt nicht in ca. 200 Seiten (die dann später vielleicht mal von DAUs verwaltet werden) manuell codierte Links eingeben müssen. Etwas anderes wäre es natürlich, wenn ich mit dynamisch erzeugten Seiten arbeiten würde, dann könnte ich die Werte gleich in den Link schreiben ...

          Grüße,

          Sebastian

          1. Moin! :)

            <a href="/empfehlung.php?title=Der+Seitentitel&url=seitenurl.html">Diese Seite empfehlen</a>

            Gerade das will ich ja vermeiden, denn ich will jetzt nicht in ca. 200 Seiten (die dann später vielleicht mal von DAUs verwaltet werden) manuell codierte Links eingeben müssen. Etwas anderes wäre es natürlich, wenn ich mit dynamisch erzeugten Seiten arbeiten würde, dann könnte ich die Werte gleich in den Link schreiben ...

            Du kannst natürlich die Links dynamisch generieren lassen. Die dafür benötigten Informationen stehen in PHP ja grob zur Verfügung.

            Nur: Wenn an den Seiten DAUs rumfummeln werden, sind sie sowieso nicht mehr zu retten. DAUs machen durch Unwissen mehr kaputt, als man durch vorausschauende Programmierung jemals auffangen kann. Wenn du also davon ausgehst, daß Idioten die Seiten zerfummeln - nimms hin. Und regel' irgendwie, daß du dafür dann nicht verantwortlich gemacht wirst. :)

            - Sven Rautenberg