Systemvoraussetzung
- Linux
- Windows
- PHP 4 >= 4.0.1
- PHP 5
Datei(en)
file_number.php
Problem
Sie möchten den Besuchern Ihrer Seite gerne Ihren PHP-Code
erklären und zur
Verfügung stellen. Programmcode zu erklären ist wesentlicher einfacher, wenn
man sich auf Zeilennummern berufen kann. Zusätzlich soll die Syntax farbig
hervorgehoben werden.
Lösung
Die Lösung besteht aus zwei Teilen. Zum einen benutzen wir die interne
Funktion highlight_file() von PHP für die farbige Syntaxhervorhebung,
zum anderen durchlaufen wir eine FOR-Schleife
für die Zeilennummern.
Selbstverständlich soll der Programmcode kopierbar bleiben, also ohne eine
Aufnahme der Zeilennummern. Dieses erreichen wir, indem wir unsere
Ausgabe in einer Tabelle darstellen.
function lineNumber($file, $table, $print=false)
@param string $file
@param string $table
@param bool $print
@return mixed
Die Funktion lineNumber() erwartet als Parameter den Dateinamen für die
farbige Syntax-Darstellung,
die Tabellenstruktur für die Ausgabe und einen
booleschen Wert für den Rückgabewert. Sie können entweder die Ausgabe direkt
ausgeben ($print = true) oder diese in eine Variable speichern ($print
= false).
Wir lesen zuerst mit der Funktion highlight_file() (36) die komplette Datei
ein, die Syntax wird dabei direkt farbig hervorgerufen. Da wir keine direkte
Ausgabe benötigen, sondern den Inhalt zwischenspeichern wollen, setzen wir
bei der Funktion den optionalen Parameter auf „TRUE“. Im weiteren Verlauf
benötigen wir noch die Zeilenmenge, daher lesen wir die Datei mit file() (38)
in ein Array ein und zählen dann nur noch das Array selbst (40).
Da wir unsere Zeilenzahlen vernünftig formatieren wollen, errechnen wir die
Länge (42) der Zeilenmenge. Hat also unsere Datei genau 872 Zeilen, ergibt sich
für diese Zahl eine Länge von 3. Wir benötigen diesen Wert, um die kleineren
Zahlen mit Nullen aufzufüllen.
Beispiel:
001
002
003
.
.
098
099
100 |
Wir durchlaufen jetzt unserer Array mit dem Dateiinhalt (44) und erstellen
dabei nur die Zeilenzahlen. Wie erwähnt, füllen wir jetzt die Zahlen mit Nullen
auf (45), sodass wir eine einheitliche Darstellung erhalten. Der Parameter
STR_PAD_LEFT sorgt dafür, dass die Ausgabe von links her aufgefüllt wird.
Wir wollen dafür sorgen, dass die farbig markierte Syntax noch kopierbar
bleibt. Aus diesem Grund haben wir der Funktion in eine Tabelle übergeben,
indem wir Platzhalter für unsere Ausgaben definiert haben. Diese Platzhalter
werden wir mit der Syntax (50) und mit den Zeilenzahlen (49) ersetzen.
Zum Schluss müssen wir noch die Entscheidung treffen, ob die Funktion die
Tabelle direkt ausgeben soll (54) oder als Variable (53) an die aufrufende Stelle.
034:
035: 036: 037: 038: 039: 040: 041: 042: 043: 044: 045: 046: 047: 048: 049: 050: 051: 052: 053: 054: 055: 056: 057: 058: |
function lineNumber($file, $table, $print=false)
{
$content = highlight_file($file,TRUE); $ex_line = file($file); $lines = count($ex_line); $length = strlen($lines);
for($x=1;$x<=$lines;$x++) {
$ausgabe .= str_pad($x, $length, "0", STR_PAD_LEFT); $ausgabe .= ":<br>"; } $table = @preg_replace('/{lineNumber}/',$ausgabe,$table); $table = @preg_replace('/{phpHighlight}/',$content,$table);
if($print === false) {
return $table;
} else {
return $table; } }
|
Beispiel 6.8: file_number.php
Der restliche Programmcode besteht hauptsächlich aus der Variable (60-65)
für
die Tabelle. Sie können diese Tabelle nach Ihren Wünschen anpassen, müssen
aber die Platzhalter wieder mit integrieren. Wenn Sie die fertige Tabelle in
einer Variablen von der Funktion zurückbekommen möchten, müssen Sie
lediglich beim Funktionsaufruf (67) den booleschen Wert auf „TRUE“ setzen
oder ihn einfach weglassen, da er ein optionaler Wert ist und „FALSE“ als
Grundeinstellung nutzt.
060: 061: 062: 063: 064: 065: 066: 067: |
$table .= '<table><tr>';
$table .= '<td><code>'; $table .= '<span style="color: #AAAAAA;">{lineNumber}</span>'; $table .= '</code></td>'; $table .= '<td>{phpHighlight}</td>'; $table .= '</tr></table>';
$lineNum = highlight_string("file_number.php",$table,true);
|
Beispiel 6.9: file_number.php
Nachfolgend sehen Sie die Ausgabe im Browser. Der Besucher kann jetzt den
kompletten Programmcode markieren und kopieren – ohne die Zeilenzahlen.
Sie sollten die Zeilenzahlen allerdings in einem hellen Grauton gestalten, da
sie so besser zur Geltung kommen.
001: 002: 003: 004: 005: 006: 007: 008: 009: 010: 011: 012: 013: 014: 015: 016: 017: 018: 019: 020: 021: 022: 023: 024: 025: 026: 027: 028: 029: 030: 031: 032: 033: 034: 035: 036: 037: 038: 039: 040: 041: 042: 043: |
<?PHP
function lineNumber($file, $table, $print=false) { $content = highlight_file($file,TRUE); $ex_line = file($file); $lines = count($ex_line); $length = strlen($lines); for($x=1;$x<=$lines;$x++) { $ausgabe .= str_pad($x, $length, "0", STR_PAD_LEFT); $ausgabe .= ":<br>"; } $table = @preg_replace('/{lineNumber}/',$ausgabe,$table); $table = @preg_replace('/{phpHighlight}/',$content,$table); if($print === false) { return $table; } else { return $table; } }
$table .= '<table><tr>';
$table .= '<td><code>';
$table .= '<span style="color: #AAAAAA;">{lineNumber}</span>';
$table .= '</code></td>';
$table .= '<td>{phpHighlight}</td>';
$table .= '</tr></table>';
$lineNum = highlight_string("file_number.php",$table,true);
?> |
Abbildung 6.3: Programmcode farbig hervorheben
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
|