PHP-Codeschnipsel
Ich übernehme für die hier angebotenen Codeschnipsel keinerlei Verantwortung, natürlich bin ich auch nur ein Mensch und deswegen können in diesen Schnipseln auch Fehler enthalten sein.
Die Benutzung erfolgt also auf eigene Gefahr.
- Rekursives auslesen eines Verzeichnisses
- Limitierte Ausgabe für Verzeichnisse
- Valentinstag-überprüfung
- Einfacher Kalender
- Limitierte Ausgabe in MySQL (Blätterfunktion)
- Formatierte Ausgabe mit Tidy
Hier findest du einige PHP-Code-Schnipsel, welche teilweise (oder teilweise auch nicht) recht nützlich sein können.
Rekursives Auslesen eines Verzeichnisses mit Ausgabe des Dateiinhaltes
<?php //Verzeichnis, das ausgelesen werden soll $dir = './'; session_start(); $absoluteUrl = 'http://'. $_SERVER['HTTP_HOST'] . htmlspecialchars($_SERVER['PHP_SELF']); //Prüfen ob closeAll gesetzt ist und auf 1, wenn ja, wird das komplette dir array gelöscht, und somit alle Verzeichnisse geschlossen if(isset($_GET['closeAll']) && $_GET['closeAll'] == '1') { unset($_SESSION['dir']); } //Prüfen ob der index 'dir' in der session gesetzt ist, wenn nicht wird ein leeres array erzeugt $_SESSION['dir'] = (isset($_SESSION['dir'])) ? $_SESSION['dir'] : array(); //Prüfen ob $_GET['dir'] gesetzt ist if(isset($_GET['dir'])) { //Ist das Verzeichnis im Array schon vorhanden $key = array_search($_GET['dir'], $_SESSION['dir']); //Wenn das Verzeichnis bereits existiert, wird er aus dem Array gelöscht, andernfalls gesetzt if($key !== false) { unset($_SESSION['dir'][$key]); } else { $_SESSION['dir'][] = $_GET['dir']; } header("Location: http://". $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .'/'. basename($_SERVER['PHP_SELF']) .'#'. $_GET['dir']); } function recDir($iterator) { static $depth = 0; //Die aktuelle Tiefe um eins erhöhen $depth++; //Durchlaufen des Iterators foreach($iterator as $value) { //Einen Hash vom Pfad+Dateinamen erzeugen $hash = md5($iterator->getPathName()); if(is_numeric($hash{0})) { $hash = "a". $hash; } //Ausgabe der/des Dateien/Verzeichnis if($iterator->isDir()) { echo str_repeat('---', $depth) .'<a href="'. $absoluteUrl .'?dir='. $hash .'" id="'. $hash .'">'. $value ."</a> (Verzeichnis) \n"; } else { echo str_repeat('---', $depth) .'<a href="'. $absoluteUrl .'?filename='. urlencode($iterator->getPathName()) .'" id="'. $hash .'">'. $value ."</a> \n"; } //Wenn das Verzeichnis noch weitere Element hat, und der Hash in dem Array 'dir' ist, wird diese Funktion nochmals aufgerufen if($iterator->hasChildren() && in_array($hash, $_SESSION['dir'])) { recDir($iterator->getChildren()); } } //Die aktuelle Tiefe um eins verringern $depth--; } echo '<style type="text/css">a { color: blue; text-decoration: none; } a:hover {color: orange; text-decoration: underline;}</style>'; echo '<a href="'. $absoluteUrl .'?closeAll=1">Alle Verzeichnise schließen</a> '; $foo = new RecursiveDirectoryIterator($dir); echo ' <div style="float: left; width: 25em;">'; recDir($foo); echo "</div>"; //Falls der Dateiname eine Zeichenkette mit '..' enthält, wird diese durch ein / ersetzt um Zugriffe auf andere Dateien zu verhindern $filename = (isset($_GET['filename'])) ? str_replace('..', '/', $_GET['filename']) : false; $filename = ($filename{0} == '.') ? $filename : '.'. $filename; if(($filename !== false) && file_exists($filename) && is_file($filename)) { echo $filename; ?> <form method="post"> <textarea cols="100" rows="30"><?php echo htmlspecialchars(file_get_contents($filename)); ?></textarea> </form> <?php } ?>
Limitierte Ausgabe des Inhaltes eines Verzeichnisses
<?php $foo = new DirectoryIterator('./'); $page_s = (isset($_GET['page'])) ? $_GET['page'] : 1; $number = 0; foreach($foo as $key => $val) { if(!$val->isDot()) { $number++; } } $page = (isset($_GET['page'])) ? abs((int)$_GET['page']) - 1 : 0; //Anzahl pro Seite $filesPerSite = 10; $offset = $page * $filesPerSite; //Anzahl der Seiten brechnen und Aufrunden $numberOfPages = ceil($number / $filesPerSite); //Wenn offset = 0 dann wird es auf 2 gesetzt, damit . und .. nicht Angezeigt wird if($offset == 0) { $offset = 2; } //Ab Index 0 10 Indizies holen $limit = new LimitIterator($foo, $offset, $filesPerSite); //Ausgabe der Dateien/Verzeichnisse foreach($limit as $value) { echo $value ." "; } //Ausgabe der Seitenzahlen for($i = 1; $i <= $numberOfPages; $i++) { //Wenn $i = aktuelle Seite, wird es hervorgehoben if($i == (abs($page_s))) { echo " <strong>[". $i ."]</strong> "; } else { echo ' <a href="?page='. $i .'">'. $i .'</a>'; } } ?>
Überprüfung auf Valentinstag
Hinweis: Diesen Schwachsinn hat sich übrigens Slashlife (aus dem IRC-Netzwerk quakenet) aus den Fingern gezogen. Den ganzen Ruhm also bitte ihm widmen ;)
<?php $o='check for valentines day'; $o=$o{(1>>3)+(3|1)}.$o{(1>>3)|(3>>1)}.$o{(1|(3*3))-1}; $ö=$o((13<<(3*1))^13^(3&1)).$o(((13^(3&1))<<(1|3))|(3>>1)) . $o(((13^3)<<1)*(1+3)+3+1).$o((13<<(3|1))^(13|(3+1))); if ($ö($o((13<<(3*1))+(1*(3<<(3>>1)))).$o((13<<(3|1))^13^(3&1)))== (13<<(3+1))+(13>>(3>>1))) { echo 'Happy Valentines Day!'; } else { echo 'Try again tomorrow...'; } ?>
Der (meiner Meinung nach) einfachste Kalender der Welt. (Benutzung auf eigene Gefahr)
<?php $month = (isset($_GET['month'])) ? (int)$_GET['month'] : date("m"); $year = date("Y"); $day = date("d"); $first_day_timestamp = mktime(0, 0, 1, $month, 1, $year); $first_weekday = date("w", $first_day_timestamp); $last_day_timestamp = mktime(0, 0, 1, $month, date("t", $first_day_timestamp), $year); $last_weekday = date("w", $last_day_timestamp); $array = array('Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.', 'So.'); $html = '<pre>'."\t\t ".'<a href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?month='. ($month-1) .'"><<</a>'."\t "; $html .= '<a href="'. htmlspecialchars($_SERVER['PHP_SELF']) .'?month='. ($month+1) .'">>></a>'."\n\n"; $html .= "\t\t ". date("M", $first_day_timestamp) .' - '. date("Y", $first_day_timestamp) ."\n"; for($i = 0; $i < 7; $i++) { $html .= '<span>'. $array[$i] ."</span>\t"; } $html .= "\n"; $num = 1; $start = ($first_weekday != 0) ? 2-$first_weekday : -5; $last = date("t", $first_day_timestamp) +(8-$last_weekday); $last = (($last - 8) == date("t", $first_day_timestamp)) ? $last - 7 : $last; for($i = $start; $i < $last; $i++) { $timestamp = mktime(0, 0, 0, $month, $i, $year); $color = (date("m", $timestamp) == date("m", $first_day_timestamp)) ? '#000000' : '#ADADAD'; $color = (date("d.m.Y", $timestamp) == date("d.m.Y")) ? '#ff0000' : $color; $color = (date("w", $timestamp) == 0 || date("w", $timestamp) == 6) ? '#fff000' : $color; $html .= '<span style="color: '. $color .';">'. date("d", $timestamp) ."</span>\t"; if($num % 7 == 0) { $html .= "\n"; } $num++; } $html .= '</pre>'; echo $html;
Limitierte Ausgabe mit MySQL (Blätterfunktion)
<?php //mysql_connect... $page = (isset($_GET['page'])) ? (int)$_GET['page'] : 1; $limit = 10; $offset = abs(($page - 1)) * $limit; //Datensätze auslesen $res = mysql_query("SELECT foo FROM bar LIMIT ". $offset .", ". $limit) or die(mysql_error()); while($row = mysql_fetch_assoc($res)) { echo $row['foo']; } //Komplette Anzahl an Datenzsätzen holen $res2 = mysql_query("SELECT COUNT(*) AS anzahl FROM bar") or die(mysql_error()); $row = mysql_fetch_assoc($res2); $number_of_sites = ceil($row['anzahl'] / $limit); for($i = 1; $i <= $number_of_sites; $i++) { if($i == $page) { echo '<strong>[ '. $i .' ]</strong>'; } else { echo '<a href="foo.php?page='. $i .'">'. $i .'</a>'; } } ?>
Den (X)HTML-Text mit Tidy “reparieren”
<?php $output = '<html> .... </html>'; $config = array('indent' => true, 'indent-spaces' => 4, 'wrap' => 200, 'output-xhtml' => true); $tidy = new tidy; $tidy->parseString($output, $config); $tidy->cleanRepair(); echo $tidy; ?>