This page has been robot translated, sorry for typos if any. Original content here.

PHP Session (Dateien, Verzeichnisse und PHP, Arbeiten mit Dateien)



file_exists
Bevor Sie Operationen für eine Datei ausführen, müssen Sie häufig sicherstellen, dass die angegebene Datei überhaupt existiert. Dies ist die Funktion von file_exists. Diese Funktion kann nur zwei Werte zurückgeben, wie Sie wissen, TRUE (falls die angegebene Datei existiert) und FALSE. Normalerweise sieht die Verwendung dieser Funktion folgendermaßen aus:
if ( !file_exists("somefile.txt") ) exit("Указанный файл не существует");
Beachten Sie, dass die Funktion nur für lokale Dateien funktioniert, dh wenn Sie überprüfen möchten, ob Yandex eine robot.txt-Datei hat, sind Ihre Bemühungen nutzlos. Es ist jedoch möglich, jede Datei auf dem lokalen Server ungeachtet des Verzeichnisses ihres Standorts zu überprüfen.

Dateigröße

Wie der Name schon sagt, bestimmt die Funktion die Größe der Datei und gibt sie in Bytes zurück. Es ist nützlich, wenn Sie die Datei auf das Vorhandensein von Informationen darin überprüfen möchten (wie Sie verstehen, die leere Datei enthält 0 Bytes), und es ist auch möglich, die Dateigröße für das Überschreiten einer bestimmten Grenze zu überprüfen.


Datei

Diese Funktion funktioniert bereits direkt mit der Datei. Es gibt den Inhalt der angegebenen Datei zurück, und zwar als Array, wobei jedes seiner Elemente die Zeichenfolge der Datei ist. Die Funktion ist nützlich, wenn Sie mehrere verschiedene Werte in einer Datei speichern müssen, die sich nicht überlappen sollten. Dann wird jeder Wert in einer separaten Zeile gespeichert und von der Funktionsdatei gelesen, die ein Array zurückgibt, so dass auf den Verweis auf die angegebene Variable zugegriffen wird, indem der Wert des Arrayelements mit dem Index gelesen wird, der der Zeile in der Datei entspricht.

Darüber hinaus ist es möglich, alle Elemente des zurückgegebenen Arrays in einer Variablen zusammenzufassen. Dies geschieht mit der Funktion, mit Implodarrays zu arbeiten. $text_file = implode("", file("somefile"));
echo $text_file;



Lesedatei

Wie die vorherige Funktion zeigt readfile den Inhalt der angegebenen Datei an und gibt auch die Anzahl der Zeichen in der Datei zurück (oder die Anzahl der Bytes, die jeder mag, da ein Zeichen einem Byte entspricht). Beachten Sie jedoch, dass diese Funktion im Gegensatz zur Datei keine Zuweisung der gelesenen Inhalte einer variablen Datei vorsieht. Wenn Sie dies versuchen, wird nur die Anzahl der gelesenen Zeichen der Variablen zugewiesen. $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";



fopen

Wenn die vorherige Funktion in sich abgeschlossen ist und im Allgemeinen keine Beziehung zu anderen Funktionen hat, funktionieren die nachfolgenden Funktionen des Arbeitens mit Dateien in Verbindung mit fopen. Diese Funktion öffnet die angegebene Datei und gibt die Verbindungs-ID der Datei zurück, die für geschäftliche Zwecke verwendet wird. Mit dem Inhalt der Datei ist diese Funktion in keiner Weise verknüpft.

Die fopen-Funktion verfügt über mehrere Modi zum Arbeiten mit der Datei. Sie sind nach dem Dateinamen angegeben und repräsentieren die folgende Schreibweise:
    "r" Die Datei wird nur zum Lesen ihres Inhalts geöffnet.
    "r +" Öffnen Sie die Datei zum Lesen und Schreiben.
    "w" Die Datei wird zum Schreiben geöffnet.
    "w +" Öffnen Sie die Datei zum Lesen und Schreiben.
    "a" Die Datei wird zum Schreiben an das Ende der Datei geöffnet (zusätzliche Aufnahme).
    "a +" Öffnet zum Überspielen und Lesen.


fgets

Funktion zum Lesen einer Datei, die von der Funktion fopen geöffnet wurde. Im Gegensatz zur Datei gibt diese Funktion bei jeder Ausführung nur eine Zeile der Datei zurück und verschiebt den internen Dateizeiger in die nächste Zeile, die beim nächsten Zugriff auf die Funktion gelesen wird. Wenn Sie also die gesamte Datei lesen müssen, müssen Sie diese Funktion in der Schleife verwenden.

Beachten Sie, dass die Funktion fgets den optionalen length-Parameter verwendet, der die maximale Länge der Zeile der zu lesenden Datei angibt. Wenn das Volumen der Zeichenfolge diese Anzahl überschreitet, gibt die Funktion es in der "abgeschnittenen" Form durch das Volumen in der Anzahl der Länge Bytes zurück. Standardmäßig ist dieser Parameter auf 1024 Byte oder ein Kilobyte festgelegt. Achten Sie besonders auf diesen Parameter, wenn Sie große Dateien verwenden, da beim Lesen solcher Dateien der PHP-Ausführungspuffer möglicherweise überläuft (sein Volume ist in der Konfigurationsdatei angegeben), was zu einem Aufhängen führt.



PHP und HTTP: Header



PHP als Sprache der Webprogrammierung unterstützt die Implementierung des Mechanismus zum Senden von HTTP-Headern.

Lassen Sie uns zunächst ein paar Worte über die HTTP-Header selbst sagen.

Gemäß der HTTP-Spezifikation unterstützt dieses Protokoll die Übertragung von Serviceinformationen vom Server zum Browser, die als spezielle Header konzipiert sind.

Daher ist HTTP-Header ein Mittel zur Kommunikation eines Servers mit einem Remote-Client. Jeder Header besteht normalerweise aus einer einzelnen Zeile ASCII-Text mit einem Namen und einem Wert. Die Kopfzeilen selbst werden nicht im Browserfenster angezeigt, können jedoch häufig die Anzeige des Begleitdokuments stark verändern.

Der Mechanismus zum Senden von HTTP-Headern in PHP.

Der Mechanismus zum Senden von Headern in PHP wird durch die Funktion header () repräsentiert. Die Besonderheit des HTTP-Protokolls ist, dass der Header gesendet werden sollte, bevor andere Daten gesendet werden. Daher sollte die Funktion ganz am Anfang des Dokuments aufgerufen werden und wie folgt aussehen:
header("HTTP заголовок", необязательный параметр replace);

Der optionale Parameter replace kann Werte vom Typ bool (true oder false) annehmen und angibt, ob der vorherige Header eines ähnlichen Typs ersetzt werden soll, oder diesen Header einem vorhandenen Header hinzufügen.

In der Funktion header () wird oft headers_sent () verwendet, was true zurückgibt, wenn der Header erfolgreich gesendet wurde, andernfalls false.

Betrachten Sie die am häufigsten verwendeten HTTP-Header.

Cache-Kontrolle.

"Cache-Kontrolle:" Wert

Header der Cache-Seiten. Im Allgemeinen ist diese Funktion einer der am häufigsten verwendeten Header.

Dieser Header kann mit den folgenden Werten verwendet werden:

* no-cashe - Verbot der Zwischenspeicherung. Wird in häufig aktualisierten Seiten und Seiten mit dynamischem Inhalt verwendet. Seine Funktionsweise ähnelt der META-Markierung "Pragma: no-cache".
* public - Erlaubt das Caching der Seite sowohl vom lokalen Client als auch vom Proxy-Server.
* privat - Aktivieren Sie das Zwischenspeichern nur durch den lokalen Client.
* max-age - Aktiviert die Verwendung eines zwischengespeicherten Dokuments innerhalb einer bestimmten Zeit in Sekunden. header("Cache-control: private, max-age = 3600") /* Кеширование локальными клиентами и использование в течение 1 часа */

Läuft ab.

"Läuft ab:" HTTP-Datum

Legt das Datum und die Uhrzeit fest, nach denen das Dokument als veraltet gilt. Das Datum muss im folgenden Format (in Englisch) sein:

Tag der Woche (Abk.) Anzahl (2 Ziffern) Monat (abgekürzt) Jahr Stunden: Minuten: Sekunden GMT

Zum Beispiel, Freitag, 09. Januar 2002 12:00:00 GMT

Die aktuelle Uhrzeit in diesem Format wird von der Funktion gmdate () in der folgenden Form zurückgegeben:
echo gmdate("D, d MY H:i:s")."GMT";

Es ist möglich, diesen HTTP-Header zu verwenden, um das Caching zu deaktivieren. Dazu müssen Sie das vergangene Datum angeben.

Zuletzt geändert.

"Zuletzt geändert": HTTP-Datum

Gibt das Datum an, an dem das Dokument zuletzt geändert wurde. Das Datum muss im selben Format angegeben werden wie im Falle des Headers Expires. Dieser Header kann nicht für dynamische Seiten verwendet werden, da viele Server (z. B. Apache) für solche Seiten selbst das Änderungsdatum angeben.

Es ist möglich, die Seite immer auf dem neuesten Stand zu halten:
header("Last-Modified: ".gmdate("D, d MY H:i:s")." GMT");

Standort

"Ort:" absolute URL

Ein nützlicher Titel, der den Browser an die angegebene Adresse weiterleitet. Seine Aktion ist vergleichbar mit dem META-Tag Refresh:
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=someURL">

Zum Beispiel kann dieser Header wie folgt verwendet werden:
if ($login != $admin_login) header("Location: http://www.server.com/login.php");
else header("Location: http://www.server.com/admin.php?login=$login");

if (!headers_sent()) exit("Произошла ошибка! Пройдите <a href='http://www.server.com/login.php'>авторизацию</a> заново");



PHP und HTTP: Cookie.



In der vorherigen Lektion haben wir die Beziehung zwischen dem HTTP-Protokoll und der PHP-Sprache auf der Ebene von HTTP-Headern zerlegt. In dieser Lektion lernen wir einen spezifischen HTTP-Header - Cookie kennen.

Was sind Cookies?
Der springende Punkt ist, dass Softwareentwickler im Prozess der Entwicklung von www-Technologien und der Einführung von Programmiersprachen im Internet ein sehr ernstes Problem hatten - wie kann man die Ergebnisse des Algorithmus für einen bestimmten Benutzer für eine lange Zeit speichern? Das HTTP-Protokoll ist nicht in der Lage, die Ergebnisse von Software-Prozessen zu erfassen. Die Verwendung von Sitzungen ist auch keine Lösung, da ihre Aktion sofort beendet wird, nachdem die Verbindung zum Server getrennt wurde.

Das Problem wurde mit der Einführung des Mechanismus von Cookies gelöst (das heißt, in der Übersetzung von Englisch, - "Cookies"). Cookies haben eine bemerkenswerte Eigenschaft - sie sind auf der Festplatte des Benutzers gespeichert und können dort nahezu unbegrenzt gespeichert werden.

Im Wesentlichen sind Cookies gewöhnliche Textdateien, die in einem speziellen Verzeichnis gespeichert sind, das vom Browser verwendet wird (üblicherweise heißt dieser Ordner Temporäre Internetdateien). Sie können sie in diesem Verzeichnis anzeigen (der Schnellzugriff auf den IE-Browser erfolgt über den Menüeintrag Dienst) -> Internetoptionen -> Temporäre Internetdateien -> Einstellungen -> Dateien anzeigen.

Implementierung des Mechanismus von Cookies in PHP.
Die Implementierung des Cookie-Mechanismus wird durch die einzige Funktion setcookie () repräsentiert. Wie bei HTTP-Headern muss diese Funktion aufgerufen werden, bevor Daten an den Remote-Client gesendet werden. Auch "leere" Zeichen, dh Leerzeichen, Zeilenumbrüche usw., sind nicht zulässig.

Die Funktion hat die folgende Syntax:
setcookie(имя куки, значение, срок годности, информация о пути, домен, защищенность)

Alle Parameter außer dem Namen des Cookies sind optional. Wenn ein Cookie nur mit diesem Parameter gesendet wird, wird er sofort vom Remote-Client zerstört, so dass dieser Parameter die Informationslast nicht alleine trägt. Ein voll funktionsfähiger Cookie gibt die folgenden zwei Parameter an: den im Cookie gespeicherten Wert und die Zeit, bis zu der dieser Cookie verwendet werden kann.

Der Wert, den der Cookie trägt, ist eine beliebige Zeichenfolge von ASCII-Zeichen. Sie können beispielsweise ein Cookie mit dem Vor- und Nachnamen des Besuchers festlegen, den er zuvor in das Formularfeld eingegeben hat.
$data = $name."||".$surname;
setcookie("username", $data);


Beachten Sie, dass die gesendeten Daten die Form einer Zeichenfolge haben müssen. Wenn Sie versuchen, das zuvor gesendete Wertefeld zu lesen, führt dies zu nichts.

Der Cookie im obigen Beispiel wird sofort nach dem Schließen des Browsers gelöscht, da standardmäßig die Lebensdauer des Cookies auf Null gesetzt ist. Um diese Reihenfolge zu ändern, müssen Sie den dritten expire-Parameter angeben. Die Definition dieses Parameters kann auf zwei Arten erfolgen:

* Legen Sie den Gültigkeitszeitraum mithilfe der Funktion time () fest, zu der die Zeit zum Speichern des Cookies in Sekunden hinzugefügt wird. Um beispielsweise einen Cookie für zwei Stunden zu definieren, müssen Sie schreiben: setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе

* Die zweite Möglichkeit besteht darin, das absolute Ablaufdatum für den Cookie festzulegen. Es wird mit der Funktion mktime () festgelegt, die ein bestimmtes Datum zum Löschen des Cookies zurückgibt. Wenn Sie die Cookie-Lebenszeit am 1. September 2003 vor Mitternacht setzen möchten, sollten Sie das Cookie wie folgt definieren: setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003);

Ein optionaler Pfadparameter begrenzt den Umfang des Cookies innerhalb bestimmter Verzeichnisse. Und in diesem Bereich sind alle Pfade enthalten, die mit dem Wert in diesem Parameter beginnen. Zum Beispiel:
setcookie("test 3, "", 0, "/mus");

Wir setzen den Cookie, indem wir die Parameter Wert und Zeit weglassen und den Umfang aller Pfade definieren, beginnend mit der Zeile "/ mus", also dem Verzeichnis "/ music /" und "/ museums /". Um den Pfad eindeutig zu bestimmen, müssen Sie den Pfad mit einem Schrägstrich vervollständigen. Das heißt, um die Aktion des Cookies auf das Verzeichnis "/ mus" einzuschränken, würden Sie in den Parameter "/ mus /" schreiben.

Der nächste optionale Parameter ist der Parameter zum Bestimmen der Aktion des Cookies innerhalb der angegebenen Domäne. Und der Wert dieses Parameters "someserver.com" entspricht nur der Site mit der Adresse http://someserver.com , und der Wert ".someserver.com" stimmt bereits mit http://someserver.com und http: //mail.irgendwererver überein. com , und http://my-irgendeinserver.com , das heißt, alle Domains enden mit dieser Zeile.

Der letzte Parameter der Funktion setcookie () gibt an, dass der Cookie über eine sichere Verbindung (HTTPS) gesendet werden muss. Dieser Parameter wird benötigt, wenn ein Cookie mit vertraulichen Daten installiert wird.
setcookie("my_cookie", $value, time() + 3600 * 24 * 5, "/", ".myphp.dem.ru", 1);

Lesen von Cookies.
Der Zugriff auf das installierte Cookie erfolgt über seinen Namen. Wenn Sie beispielsweise das obige Beispiel fortsetzen, können Sie das Cookie wie folgt lesen:
echo "У вас сохранены следующие данные:<br>";
echo $my_cookie;


Der Zugriff auf Daten, die im Cookie gespeichert sind, kann auch über das Array $ HTTP_COOKIE_VARS erfolgen. Es ähnelt anderen ähnlichen Arrays wie $ HTTP_POST_VARS und anderen und enthält alle Werte, die vom Cookie gelesen werden.

Löschen Sie den Cookie.
Der Cookie wird gelöscht, indem ein neues Cookie mit dem Namen des zu löschenden Cookies ohne zusätzliche Parameter gesendet wird.

Zum Beispiel:
$data = $my_cookie;
setcookie("my_cookie");
echo "Следующие данные были удалены:<br>" . $data;

Regelmäßige Anwendungen



Diese Lektion passt nicht in die logische Kette unserer Studien, sondern wurde "unter dem Druck der Öffentlichkeit" erstellt, dh auf Wunsch der Leser, und wird den regulären Ausdrücken und Funktionen der Arbeit mit ihnen gewidmet sein. Wahrscheinlich haben meine Berechnungen, dass die Artikel von Alexander Grimalovsky "Reguläre Ausdrücke" genug sein werden, um dieses Thema zu verstehen, sich als falsch erwiesen.

In der Hoffnung, dass Sie den obigen Artikel bereits gelesen haben, beginnen wir mit der heutigen Lektion.

Die regulären Ausdrücke selbst sind keine Neuheit, die von PHP eingeführt wurde. In der einen oder anderen Form werden sie seit längerer Zeit verwendet und sind ein sehr leistungsfähiger Mechanismus für das Arbeiten mit String-Daten.

Ein regulärer Ausdruck ist eine Vorlage, die für verschiedene Aktionen verwendet wird, abhängig von der Funktion, die diesen regulären Ausdruck verwendet. Sonderzeichen werden verwendet, um eine Vorlage anzugeben.

Funktionen zum Arbeiten mit regulären Ausdrücken.
Es muss gesagt werden, dass PHP sowohl einen eigenen Mechanismus für das Arbeiten mit regulären Ausdrücken (POSIX) als auch eine Entlehnung aus einer anderen Server-Programmiersprache Perl besitzt. Äußerlich können sie leicht durch die Namen von Funktionen unterschieden werden: Funktionen des ersten Typs beginnen mit den Zeichen "ereg" und die zweite - "preg".

Aber die Namen von Funktionen sind nicht der einzige Unterschied. Vor allem enthalten sie einige Unterschiede in der Syntax von regulären Ausdrücken. Perl-ähnliche Funktionen erfordern also Begrenzer: $str = "регулярное выражение"; // просто строка
$preg = preg_replace("/р.+е/i", "<i>[вырезано]</i>", $str);
$ereg = eregi_replace("р.+е", "<i>[вырезано]</i>", $str);
echo $preg."<br>".$ereg;
$str = "регулярное выражение"; // просто строка
$preg = preg_replace("/р.+е/i", "<i>[вырезано]</i>", $str);
$ereg = eregi_replace("р.+е", "<i>[вырезано]</i>", $str);
echo $preg."<br>".$ereg;

Wie Sie sehen können, verwenden wir die Funktion, einen Teil eines Strings durch reguläre Ausdrücke zu ersetzen. Beachten Sie das Muster der Funktion preg_replace: Die Schrägstriche sind die Schrägstriche, wobei der Modifier i dem abschließenden Begrenzer folgt und angibt, dass das Muster die Groß- / Kleinschreibung nicht beachtet. Der gleiche Effekt wird erreicht, wenn die POSIX-Funktion mit dem Suffix i (eregi_replace) verwendet wird.

Die Funktion preg_replace in unserem Beispiel zeigte die sogenannte "Gier" und überdeckte die gesamte Zeile, die mit dem Buchstaben "p" beginnt und mit "e" endet. Machen Sie die Funktion nicht "gierig" hilft Modifikator U.

Die Funktion hat den Mindestabstand zwischen den Buchstaben "p" und "e" gefunden und durch die angegebene Zeichenfolge ersetzt.

Die Funktion eregi_replace hat auch "greed" angezeigt, aber diese Reihenfolge kann nicht mehr geändert werden, da POSIX-Funktionen keine Modifikatoren verwenden.

Beispiele für reguläre Ausdrücke.

Zeitumwandlung in Standard-Unix-Zeit.

Angenommen, wir haben ein Datum in der Datenbank oder einer anderen Quelle im folgenden Format:
Stunden: Minuten: Sekunden - Tag.Monat.Jahr
Aber aus irgendeinem Grund (z. B. Neugestaltung der Site) mussten wir das Datum in der folgenden Form anzeigen:
Tag.Monat.Jahrstunden: Minuten

Wie Sie wissen, ist es verrückt, es manuell zu tun, also schreiben Sie ein Skript, das das Datum in das Format Stunden: Minuten: Sekunden pro Monat / Tag / Jahr bringt und dann mit strtotime () diesen Eintrag zur Standard-UNIX-Zeit übersetzt , die wir anzeigen können, wie Sie möchten.

Am interessantesten ist die erste Stufe. Es ist etwas, das uns in Bezug auf die Verwendung von regulären Ausdrücken interessiert. $str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату
$str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\\2/\\1/\\3", $str);

Mit dem regulären Ausdruck ändern wir das Format der Tages-, Monats- und Jahresdatensätze, und jedes Element wird durch eckige Klammern getrennt. Im zweiten Parameter der Funktion verweisen wir auf die in Klammern gefundenen Übereinstimmungen. So passiert es:

    \\ 0 - enthält den String, der der gesamten Vorlage entspricht (in unserem Beispiel "10.03.02").
    \\ 1 - enthält Zeichen, die nur mit dem ersten in Klammern eingeschlossenen Element übereinstimmen (d. H. "10").
    \\ 2 - enthält Zeichen, die nur dem in Klammern eingeschlossenen zweiten Element entsprechen (d. H. "03").
    usw.


Zu diesem Zeitpunkt erhalten wir das Datum "12:57:43 - 03/10/02". Jetzt bringen wir es zu Ende.
$str = str_replace("-", "", $str); // вырезаем знак "-"
$time = strtotime($str);


Jetzt können Sie die Variable $ time beliebig verwenden.