Datei Info
Alles was man über eine Datei erfahren kann, wird hier ausgegeben. Zwei Lösungsansätze werden vorgestellt: eine eigene Funktion und eine eigene Klasse. Diese beiden Beispiele sind exemplarisch zum Verständniss von Funktionen und Klassen.
Die darin verwendeten PHP Sprachelemente sind:
is_file(), is_dir()
is_readable(), is_writable(), is_executable() und filesize()
fileatime(), filemtime(), und filectime()
Eine Funktion
function()
Im folgenden Beispiel erstellt Matt Zandstra eine eigene Funktion, um alle möglichen Informationen aus einer Datei auszulesen.
<?php
# Dank an Matt Zandstra
function FileInfo( $file ) { // Funktion benennen und Variable für erwarteten Parameter bereitstellen
if ( ! file_exists( $file ) ) {
print "$file existiert nicht.<br/>";
return;
}
print "$file ist ".( is_file( $file )?"":"k")."eine Datei.<br/>";
print "$file ist ".( is_dir( $file )?"":"k")."ein Verzeichnis.<br/>";
print "$file ist ".( is_readable( $file )?"":"nicht ")."lesbar.<br/>";
print "$file ist ".( is_writable( $file )?"":"nicht ")."schreibbar.<br/>";
print "$file ist ".( is_executable( $file )?"":"nicht ")."ausführbar.<br/>";
print "$file ist ".( filesize($file))." bytes gross.<br/>";
print "$file wurde am "
.date( "D d M Y g:i A", fileatime( $file ) )." zuletzt dargestellt.<br/>";
print "$file wurde am "
.date( "D d M Y g:i A", filemtime( $file ) )." modifiziert.<br/>";
print "$file wurde am "
.date( "D d M Y g:i A", filectime( $file ) )." erstellt.<br/>";
}
?>
Die Funktion wird aufgerufen, indem ich ihren Namen nenne und ihr den Parameter zur Verarbeitung übergebe.
<?php
FileInfo("datei.php");
?>
Erklärungen
Zum Beispiel die Zeile:
print "$file ist ".( is_file( $file )?"":"k")."eine Datei<br/>";
verwendet einen ternären Operator. Wenn die Funktion is_file() TRUE zurück gibt, ist der Wert ein leerer String "", andernfalls ist der Wert "k" und aus 'eine' würde 'keine' werden. (Ein ternärer Operator ist eine verkürzt geschriebene if-else Bedingung.)
Das Gleiche kann auch etwas verständlicher geschrieben werden:
$is_it=is_file($f)?"":"k";
print "$f ist $is_it"."eine Datei";
Am längsten aber verständlichsten ist die Formulierung mit einer if-Schleife:
if(is_file($f)) {
print "$f ist eine Datei<br/>;
} else {
print "$f ist keine Datei<br/>";
}
datei.php ist kein Verzeichnis.
datei.php ist lesbar.
datei.php ist schreibbar.
datei.php ist nicht ausführbar.
datei.php ist 671 bytes gross.
datei.php wurde am Sat 19 May 2012 5:20 PM zuletzt dargestellt.
datei.php wurde am Sat 19 May 2012 5:20 PM modifiziert.
datei.php wurde am Sun 20 May 2012 8:37 AM erstellt.
Mehr zu Funktionen.
Eine Klasse
new KlasseName()
Im folgenden Beispiel erstellt Mark Lubkowitz eine eigene Klasse mit einer eigenen Methode um Dateiinformationen auszugeben. (Eine Methode ist eine Funktion einer Klasse.) Er verwendet dabei die oben beschriebenen, von PHP vorgegebenen Sprachelemente.
<?php
# Dank an Mark Lubkowitz
class DateiInfo
{
public $filename;
public $size;
public $type;
public $lastChange;
public $lastChangeUnix;
public $owner;
public $readable;
public $writeable;
public $executable;
function DateiInfo($filename)
{
$this->filename = $filename;
$this->size = filesize($filename);
$this->type = filetype($filename);
$this->lastChange = strftime("%d.%m.%Y %H:%M",filemtime($filename));
$this->lastChangeUnix = filemtime($filename);
$this->owner = fileowner($filename);
$this->readable = is_readable($filename);
$this->writeable = is_writeable($filename);
$this->executable = is_executable($filename);
}
}
?>
Und so wird eine Instanz der Klasse deklariert und genutzt.
<?php
$fi = new DateiInfo('datei.php'); // Datei nennen für welche Info gewünscht wird
echo "Dateiname: $fi->filename<br />\n";
echo "Größe: $fi->size Byte<br />\n";
echo "Type: $fi->type<br />\n";
echo "Letzte Änderung: $fi->lastChange<br />\n";
echo "Besitzer: $fi->owner<br />\n";
echo "Lesbar: $fi->readable<br />\n";
echo "Schreibbar: $fi->writeable<br />\n";
echo "Ausführbar: $fi->executable";
?>
Größe: 671 Byte
Type: file
Letzte Änderung: 19.05.2012 17:20
Besitzer: 12055
Lesbar: 1
Schreibbar: 1
Ausführbar: