Teil von  SELFPHP
Professional CronJob-Service

Suche

International PHP Conference


WebTech Conference


:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 
PHP Summit


Software Architecture Summit


:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
HTML5 Days


JavaScript Days


:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Programmcode farbig hervorheben inkl. Zeilennummern

Am Ende der Seite finden Sie das komplette Beispiel als Download.

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.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   973.00 Byte 1.13 Kilobyte 1.05 Kilobyte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

Profihost AG weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Kaspersky Labs GmbH weitere Sponsoren
 

:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


Datei in mehrere Dateien aufsplitten

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


Quersumme einer Ganzzahl (Integer) errechnen

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2014 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt
© 2005-2014 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de