Helferfunktion: GetDir

13. Januar 2008

2 Kommentare

Dieses Szenario haben PHP-Entwickler sicher das eine oder andere Mal: Ein Verzeichnis auslesen. Unter PHP gibt es dafür eine Reihe von Funktionen, welche aber meist einiges an Arbeit machen. Zuerst das Verzeichnis öffnen, dann Eintrag für Eintrag auslesen und dann die virtuellen Verzeichnisse . und .. ausfiltern. Mit einer Funktion lässt sich das viel einfacher lösen. Hier ist meine GetDir():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Reads a dir and returns it as array
 * @author Michael Mayr (http://michfrm.net)
 * @param string $path Path to read (absolute preferred)
 * @param bool $absolute Return absolute or relative paths? (Default: false)
 * @return mixed
 */
function GetDir($path, $absolute = false)
{
    if ( substr($path, -1, 1) != '/' ) $path .= '/';
 
    $files = array();
    $dir = opendir($path);
 
    if ( $dir === false ) return false;
 
    while ( ( $file = readdir($dir) ) !== false )
    {
        if ( substr($file, 0, 1) != '.' && $file != '..' )
        {
            $files[] = ($absolute === false) ? $file : $path . $file;;
        }
    }
    return $files;
}

Die Funktion stammt aus der functions.php von Yanix und ist daher GPL v2

Im Detail: Der Paramter ist der Pfad $path, welcher ausgelesen werden soll. Wenn der 2. Parameter $absolute auf true steht, gibt die Funktion absolute Pfade zurück, ansonsten relative. Es werden keine Unterverzeichnisse untersucht!

Hier ein praktisches Beispiel:

1
2
3
4
5
6
7
8
9
10
$dir = dirname(__FILE__);
 
// Check, ob das Verzeichnis existiert
if ( is_dir($dir) )
{
    foreach ( GetDir($dir) as $file )
    {
        echo "Datei {$file} gefunden!";
    }
}

Im Beispiel von foreach sollte immer ein Check erfolgen, denn falls die Funktion false zurück gibt, falls das Öffnen der Verzeichnisses fehl schlägt (z.B. wenn es nicht existiert), wirft foreach einen Fehler.

¬ geschrieben von Michael in Helferfunktionen, PHP

Helferfunktion: SimpleBacktrace

10. Januar 2008

0 Kommentare

Nun beginne ich meine schon lang geplante Reihe: Helferfunktionen. Ich meine damit Funktionen, die nicht groß sind aber sehr bei der Entwicklung und im allgemeinen Betrieb helfen können. Angefangen mit SimpleBacktrace.

Jeder der einmal mit Exceptions gearbeitet hat kennt die Backtraces. Damit kann man bequem den Stacktrace (welche Funktion hat welche aufgerufen) nutzen und ihn auch ausgeben. Es gibt jedoch keine Funktion, damit PHP dies auch ohne Exceptions ausgeben kann. Mit debug_backtrace() erhält man zwar einen Backtrace, jedoch nur ein riesen Array. Diese Funktion formatiert diesen ähnlich wie bei Exceptions.

Der Parameter $jumpover ist dazu da, um eine bestimmte Anzahl von Einträgen zu überspringen. Standard ist 1, damit die Funktion selbst nicht im Trace auftaucht. Bei Funktionen die das PHPsche Error-Reporting ersetzen, sollte man diesen Wert auf mind. 2 setzen.

Diese Funktione funktioniert vielleicht mit PHP4, gestetet hab ich es nicht.
Code anzeigen

Als ich diesen Beitrag fast fertig hatte, kam mir eine noch bessere Idee. Nutz Exceptions!Nachteile: Überspringen von Zeilen und eigene Anpassungen sind nicht möglich.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * Rückgabe eines formatierten Stacktraces von jedem Ort aus.
 * @author Michael Mayr (http://michfrm.net)
 * @return	string
 */
function SimpleBacktrace()
{
	try
	{
		throw new Exception('SimpleBacktrace');
	}
	catch ( Exception $e )
	{
		return $e->getTraceAsString();
	}
}

Code extern anzeigen

¬ geschrieben von Michael in Helferfunktionen, PHP

Theme von BenediktRB • Powered by Wordpress • Abonniere den RSS Feed