Betreiber dieses Archivs (Impressum)

Forum Strippenstrolch (Archiv)

Forums-Ausgangsseite

Board-Ansicht

Kleinen PHP-Code-Schnipsel umprogrammieren (E-Forum)

verfasst von Auge(R), 08.11.2019, 12:54

Hallo

<?php
/****************************************************************
Lastupdate --- Version 2.0
Copyright 2007 by Daniel Ranft (Version 1.0)
www.hobbyprogrammierer.de
 ***************************************************************
Copyright 2019 by H. August (Version 2.0)
https://github.com/auge8472
Das Copyright darf nicht entfernt werden.
*****************************************************************/

#ini_set('display_errors', 1);
#error_reporting(E_ALL);

clearstatcache();
/**
 * Konfiguration
 */
# Arbeitsverzeichnis
$verzeichnis = "../angebote/";
# Auflistung der zu berücksichtigenden Dateitypen
$filetypes = array('html', 'htm', 'png', 'js');
# maximale Anzahl der auszugebenden Elemente (Dateien)
$anzahl = 20;
# maximal zu betrachtender Zeitraum in Wochen (0 zum abschalten der Funktion)
$zeitraum = 0;

/**
 * explizite Initialisierung der Variablen
 */
$files = array();
$filelist = array();
$output = array();
$mintime = time() - ($zeitraum * 7 * 86400);

# lies das Arbeitsverzeichnis aus
if (is_dir($verzeichnis)) {
	$files = scandir($verzeichnis);
} else {
	$files = false;
}

if ($files !== false and !empty($files)) {
	foreach ($files as $file) {
		if (is_file($verzeichnis . $file) and in_array(pathinfo($verzeichnis . $file, PATHINFO_EXTENSION), $filetypes)) {
			if ($zeitraum > 0) {
				if (filemtime($verzeichnis . $file) > $mintime) {
					$filelist[$verzeichnis . $file] = @filemtime($verzeichnis . $file);
				}
			} else {
				$filelist[$verzeichnis . $file] = @filemtime($verzeichnis . $file);
			}
		}
	}
	# sortiere und beschneide die Ergebnismenge
	arsort($filelist);
	$filelist = array_slice($filelist, 0, $anzahl);
	if (!empty($filelist)) {
		$output[] = '   <ul>';
		foreach ($filelist as $fname => $ftime) {
			$output[] = '    <li><time datetime="'. htmlspecialchars(date('Y-m-d H:i:s', $ftime)) .'">'. htmlspecialchars(date('d.m.Y', $ftime)) .'</time>: <a href="./'. htmlspecialchars($fname) .'" target="_top">'. htmlspecialchars($fname) .'</a></li>';
		}
		$output[] = '   </ul>';
	} else {
		# nach der Filterung und Sortierung ist kein Eintrag übriggeblieben
		$output[] = '   <div class="fehlermeldung">';
		$output[] = '    <h2>Nichts gefunden</h2>';
		$output[] = '    <p>Es konnten keine geänderten Dateien gefunden werden.<p>';
		$output[] = '   </div>';
	}
} else {
	# das Verzeichnis konnte nicht ausgelesen werden
	$output[] = '   <div class="fehlermeldung">';
	$output[] = '    <h2>Nichts gefunden</h2>';
	$output[] = '    <p>Es konnten keine geänderten Dateien gefunden werden.<p>';
	$output[] = '   </div>';
}
?><!DOCTYPE html>
<html lang="de">
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta name="referrer" content="origin">
  <title>Zuletzt geänderte Dateien</title>
  <style>
body {
	color: #006600;
	font-family: Arial, sans-serif;
}
ul {
	list-style: none;
	padding: 0;
	margin: 1em 0;
}
.fehlermeldung {
	padding: 1em;
	border: 3px solid #bb0000;
	border-radius: 1em;
	background: #f8f8dd;
	color: #400;
}
.fehlermeldung > * {
	margin: 0.25em 0;
	margin: 0.25rem 0;
}
time {
	color: #000099;
}
a {
	color: blue;
	transition: color: .2s ease-out, background 1s ease-in;
	text-decoration: none;
}
a:focus, a:hover {
	text-decoration: underline;
	color: #eeee00;
}
a:active {
	color: #eeaa00;
}
  </style>
 </head>
 <body>
  <header>
   <div>
    <h1>Zuletzt geänderte Dateien</h1>
   </div>
  </header>
  <main>
<?php echo implode("\r\n", $output) . "\r\n"; ?>
  </main>
 </body>
</html>



>> "Pflichtenheftchen": :hungry:
>>
>> ***Ja, es soll nach der letzten Änderung sortiert werden.

Die Sortierung ist mit der weiteren Verwendung der Funktion arsort unangetastet geblieben.

>> ***Es soll die Endung im Script einstellbar werden.

Es können über das Array $filetypes mehrere zu berücksichtigende Dateiendungen angegeben werden.

>> ***Es soll die Anzahl der angezeigten Dateien im Script einstellbar werden

Das ist mit der Variable $anzahl möglich. Weiterhin kann als zusätzliche Einschränkung in der Variable $zeitraum ein Wert in Wochen angegeben werden, bis zu dem die geänderten Dateien überhaupt für die Liste in Betracht gezogen werden.

Es gilt also bei einem in $zeitraum angegebenen Zeitraum von 12 Wochen, dass Dateien, deren letzte Änderung nicht mehr als diese 12 Wochen zurück liegt, in die Liste aufgenommen werden, diese Liste aber nach der in $anzahl definierten Zahl von Einträgen auf jeden Fall abgeschnitten wird.

>> ***Eine Bedienoberfläche dafür ist unnötig

isso

>> ***Vielleicht (wenn der Aufwand nicht zu groß ist) könnte das auch gleich
>> auf PHP7.x angepasst werden, damit die äöüß richtig dargestellt werden.

Das ist keine Anpassung auf PHP7, sondern auf UTF-8. Sei's drum, das Script läuft unter PHP 7 und es ist in UTF-8 kodiert. Wenn dein Webserver von sich aus keine falsche Kodierungsangabe sendet, passt das alles.

Ich habe als Output auch gleich mal ein vollständiges HTML-Dokument erzeugt. Die CSS-Angaben habe ich, soweit ich mit den browsereigenen Entwicklertools an sie herangekommen bin, rekonstruiert. Die müsstest du bei Bedarf erweitern und anpassen.

>> ***Dein Name sollte (Wenn du magst) oben hinter dem Urheber erscheinen
>> ***Du darfst (und solltest) sehr gern einen Hinweis auf dein
>> MyLittleForum-Projekt oben im Script-Kopf mit Änderungsjahr hinterlassen.

isso

Es kann nachwievor nur ein Verzeichnis geprüft werden, dieses kann nun aber auch ein anderes Verzeichnis als das, in dem das Skript liegt, sein. Die Angabe erfolgt in der Variable $verzeichnis. Für die Angabe gelten die gleichen Regeln wie für die relativen Pfadangaben in Webseiten. Alternativ kann ein absoluter, vollständiger Pfad des Dateisystems angegeben werden.

Ist das Verzeichnis nicht lesbar oder sind nach der Filterung keine Dateien mehr in der Ergebnismenge (kein in $filetypes erlaubter Dateityp, letzte Änderungen sind sämtlichst länger her als es der in $zeitraum definierte Wert erlaubt), wird eine passende Fehlermeldung ausgegeben. Die Meldungen haben hier den gleichen Inhalt. Der kann aber auch an die jeweiligen Fälle angepasst werden.

Die Zeilenumbrüche sind in <?php echo implode("\r\n", $output) . "\r\n"; ?> als Windows-Umbrüche ("\r\n") definiert, da ich zuerst auf einem Windows-Server getestet habe. Die Browser haben damit kein Problem, auch wenn die Seite von einem Linux-Sefrver aus ausgeliefert wird, du kannst das aber auch auf "\n" ändern, wenn du willst. Das verursacht auch keine Probleme.

Falls du Fragen hast, frage.

Tschö, Auge

---
- My Github account

 

gesamter Thread:

zurueck zum Forum
Board-Ansicht
6120 Postings in 815 Threads, 5 registrierte User, 16 User online (0 reg., 16 G?ste)
Forum Strippenstrolch (Archiv) | Kontakt
RSS Feed
powered by my little forum