PHP-Tricklein von Thomas Lüthi

Hier zeige ich ein paar "Tricklein", die ich mit HTML gemacht habe.

Manche Dinge könnte man viel einfacher lösen, wenn man die Dateien nur online veröffentlicht und alle PHP-Befehle auf jeden Fall interpretiert würden.

Mein Ziel ist jedoch, die Dinge so zu machen, dass auch der Dateien mit "rohem", nicht interpretiertem Quellcode (HTML und PHP gemischt) im Browser anständig angezeigt werden. Dies ist nicht nur für die Entwicklungsperiode angenehmer, sondern es macht es auch möglich, dass man die Dateien so, wie sie sind, als ZIP-File zum Download anbieten kann oder sie auf eine CD brennen und so weitergeben kann.

Trick #1 - URL der aktuellen Seite als Link anbieten

Ziel: Wenn die Datei lokal angezeigt wird, d.h. der Quellcode inklusive PHP beim Browser ankommt, so soll ein Link zur Online-Hauptseite angezeigt werden. Wenn die Datei aber vom Server angezeigt wird und somit PHP interpretiert wird, so soll ein Link auf die aktuelle Seite angezeigt werden (für den Fall, dass jemand die Seite ausdruckt oder vom Server zu sich herunterlädt). Dabei soll noch unterschieden werden, ober die URL mit https:// oder einfach mit http:// anfängt.

Beispiel:

http://www.tiptom.ch/tests/phpssi/tricklein1.php

Der Quellcode:

<script language="php">if (false) {</script>
<a href="http://www.tiptom.ch/" title="Zur Online-Hauptseite">http://www.tiptom.ch/</a>
<script language="php">} else {
$fullurl=(($HTTPS=="on") ? "https" : "http")."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo "<a href=\"$fullurl\" title=\"Diese Seite vom Internet neu laden\">$fullurl</a>\n"; }</script>

Erklärung:

Hier wird die Technik "Jumping in and out of PHP" angewendet. Man kann ohne weiteres in einem ersten Häppchen PHP eine Bedingungs-Struktur anfangen, diese durch HTML unterbrechen, und in einem zweiten Block PHP die Struktur weiterführen.

Fall A:

Die Datei wird offline angezeigt, und der Browser kriegt den gesamten, nicht interpretierten Quelltext zu sehen. Für den Browser ist einzig der Link interessant, der Rest ist für ihn eine unbekannte Skriptsprache, die er ignorieren sollte.

<script language="php">if (false) {</script>
<a href="http://www.tiptom.ch/" title="Zur Online-Hauptseite">http://www.tiptom.ch/</a>
<script language="php">} else {
$fullurl=(($HTTPS=="on") ? "https" : "http")."://"..$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo "<a href=\"$fullurl\" title=\"Diese Seite vom Internet neu laden\">$fullurl</a>\n"; }</script>

Fall B:

Die Datei wird vom Webserver zum Browser geschickt. Dabei werden alle PHP-Befehle interpretiert, und der Browser kriegt nur noch das reine HTML zu sehen.
Das sieht der Webserver (PHP-Engine):

<script language="php">if (false) {</script>
<a href="http://www.tiptom.ch/" title="Zur Online-Hauptseite">http://www.tiptom.ch/</a>
<script language="php">} else {
$fullurl=(($HTTPS=="on") ? "https" : "http")."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo "<a href=\"$fullurl\" title=\"Diese Seite vom Internet neu laden\">$fullurl</a>\n";

}
</script>

Die Bedingung if (false) { ergibt immer den Wert "falsch", also wird automatisch die Aktion nach else { ausgeführt.

Der Programmcode nach else { enthält eine verkürzte Schreibweise einer Bedingung, um das "https" bzw. "http" automatisch zu wählen, je nachdem, ob die Seite gesichert (verschlüsselt) übertragen wird oder nicht.

Man könnte alles auch viel ausführlicher schreiben:

if ($HTTPS=="on") { $fullurl="https"; } else { $fullurl="http"; }
$fullurl=$fullurl."://"..$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];}

Das heisst, die ganze URL setzt sich zusammen aus dem Protokoll (http bzw. https), den Zeichen "://", dem Servernamen (Domain) $_SERVER['HTTP_HOST'] und dem Pfad zur Datei $_SERVER['PHP_SELF'].

Hinweis: in PHP werden Strings (Buchstabenketten) mit dem "." Punkt aneinandergefügt (und nicht mit dem "+" Pluszeichen wie etwa in JavaScript).

Diese ganze URL wird dann in Form eines Links in die Datei geschrieben und an den Browser geschickt:

<a href="" title="Diese Seite vom Internet neu laden"></a>

Das Attribut title="Diese Seite vom Internet neu laden" bewirkt, dass dieser Text in neueren Browsern als "ToolTip" angezeigt wird, wenn der Besucher mit dem Mauszeiger über dem Link ist.

Wenn Sie auf Ihrer Website keine Verschlüssung haben, d.h. wenn alle Seiten mit dem http-Protokoll übertragen werden, können Sie die Variable $fullurl auch viel einfacher definieren:

$fullurl="http://"..$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

Trick #2 - URL der aktuellen Seite als Parameter im mailto:-Link anbieten

Dieses Tricklein macht die URL wie oben beschrieben und schreibt diese als Parameter in ein mailto:-Link-Tag:

info@tomogramm.ch

Quellcode:

<script language="php">if (false) {</script>
<a href="mailto:info@tomogramm.ch" title="Mail an Thomas Luethi schreiben">info@tomogramm.ch</a>
<script language="php">} else { $fullurl=(($HTTPS=="on") ? "https" : "http")."://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo "<a href=\"mailto:info@tomogramm.ch?subject=Feedback". $_SERVER['PHP_SELF']."&amp;body=Feedback $fullurl\" title=\"Mail an Thomas Luethi schreiben\">info@tomogramm.ch</a>\n"; }
</script>

Erklärung:

Wie die URL zusammengebastelt wird, steht oben.
An ein mailto: in einem E-Mail-Link kann man vorgegebene Parameter anhängen für folgende Dinge: Kopie (CC, BCC), Subject, Body. Das geht so: Anhängen mit dem Fragezeichen (?), mehrere Parameter mit der Zeichenfolge &amp; (HTML-Code fuer das "kaufmännische Und" (&), dann "amp;") aneinanderreihen:

<a href="mailto:name@example.com?cc=kopie@example.com&amp;bcc=verstecktekopie@example.com
&amp;subject=Vorgeschlagenes Betreff&amp;body=Vorgeschlagener Mailtext">Link-Text, der im Browser erscheint</a>

Hier werden also die ganze URL im Body und noch der letzte Teil davon, $_SERVER['PHP_SELF'], automatisch im Subject eingefügt. Das erspart dem Benutzer das Cut-and-Paste der URL aus der Browser-Adresszeile ins Mailfenster.


<= Zurück zum Inhaltsverzeichnis PHP + SSI