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
Vor dem Ausführen von Vorgängen mit einer Datei muss häufig sichergestellt werden, dass die angegebene Datei überhaupt vorhanden ist. Das macht die Funktion file_exists. Wie Sie verstehen, kann diese Funktion nur zwei Werte zurückgeben: TRUE (wenn die angegebene Datei vorhanden ist) und FALSE. Normalerweise sieht die Verwendung dieser Funktion so aus:
if ( !file_exists("somefile.txt") ) exit("Указанный файл не существует");
Beachten Sie, dass die Funktion nur auf lokale Dateien angewendet wird. Wenn Sie also überprüfen möchten, ob Yandex die Datei robot.txt erworben hat, sind Ihre Bemühungen vergeblich. Es ist jedoch möglich, alle auf dem lokalen Server befindlichen Dateien unabhängig von ihrem Standortverzeichnis zu überprüfen.

Dateigröße

Wie der Name schon sagt, bestimmt die Funktion die Dateigröße und gibt sie in Bytes zurück. Dies ist nützlich, wenn Sie die Datei auf das Vorhandensein von Informationen überprüfen möchten (wie Sie verstehen, enthält eine leere Datei 0 Byte). Sie können auch überprüfen, ob die Dateigröße eine bestimmte Grenze überschreitet.


Datei

Diese Funktion funktioniert bereits direkt mit der Datei. Es gibt den Inhalt der angegebenen Datei in Form eines Arrays zurück, wobei jedes seiner Elemente eine Zeichenfolge der Datei ist. Diese Funktion ist nützlich, wenn Sie in derselben Datei mehrere unterschiedliche Werte speichern müssen, die sich nicht überschneiden dürfen. Dann wird jeder Wert in einer separaten Zeile gespeichert und von der Dateifunktion gelesen, die ein Array zurückgibt, wodurch der Verweis auf die angegebene Variable erfolgt, indem der Wert des Array-Elements 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 zu einer Variablen zusammenzufassen. Dies geschieht mit der Funktion implode array. $text_file = implode("", file("somefile"));
echo $text_file;



readfile

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, wie Sie möchten, da ein Zeichen einem Byte entspricht). Beachten Sie jedoch, dass diese Funktion im Gegensatz zu file nicht die Zuweisung des Leseinhalts einer Datei zu einer Variablen ermöglicht. Wenn Sie dies versuchen, wird der Variablen nur die Anzahl der gelesenen Zeichen zugewiesen. $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";



fopen

Wenn die vorherige Funktion autark ist und sich im Allgemeinen nicht auf andere Funktionen bezieht, funktionieren die nachfolgenden Funktionen zur Dateibehandlung in Verbindung mit fopen. Diese Funktion öffnet die angegebene Datei und gibt die Verbindungs-ID an die Datei zurück, die für Servicezwecke verwendet wird. Diese Funktion ist nicht mit dem Inhalt der Datei verknüpft.

Die fopen-Funktion hat mehrere Betriebsarten mit einer Datei. Sie erscheinen nach dem Dateinamen und haben folgende Schreibweise:
    "r" Die Datei wird nur zum Lesen ihres Inhalts geöffnet.
    "r +" Öffnen einer Datei zum Lesen und Schreiben.
    "w" Die Datei wird zum Zwecke der Aufnahme geöffnet.
    "w +" Datei zum Lesen und Schreiben öffnen.
    "a" Die Datei wird zum Schreiben an das Ende der Datei (Datensatz) geöffnet.
    "a +" Öffnet zum Aufnehmen und Lesen.


fgets

Die Funktion zum Lesen der Datei, die mit der Funktion fopen geöffnet wurde. Im Gegensatz zu file gibt diese Funktion bei jeder Ausführung nur eine Zeile der Datei zurück, während sie den internen Dateizeiger in die nächste Zeile verschiebt, 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 einer Schleife verwenden.

Beachten Sie, dass die Funktion fgets den optionalen Parameter length verwendet, der die maximale Länge der zu lesenden Dateizeichenfolge angibt. Wenn das Volumen der Zeichenfolge diese Zahl überschreitet, gibt die Funktion sie in einer "abgeschnittenen" Form mit einer Länge von einem Byte zurück. Standardmäßig ist dieser Parameter auf 1024 Byte oder ein Kilobyte festgelegt. Achten Sie außerdem auf diesen Parameter, wenn Sie große Dateien verwenden, da das Lesen dieser Dateien zu einem Überlauf des PHP-Ausführungspuffers führen kann (die Größe wird in der Konfigurationsdatei angegeben), was zu einem Absturz führt.



PHP und HTTP: Header



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

Lassen Sie uns zunächst einige Worte zu den HTTP-Headern selbst sagen.

Dieses Protokoll unterstützt gemäß der HTTP-Spezifikation die Übertragung von Dienstinformationen vom Server zum Browser, die in Form von speziellen Headern gestaltet sind.

HTTP-Header sind daher ein Kommunikationsmittel zwischen einem Server und einem Remote-Client. Jede Überschrift besteht normalerweise aus einer einzelnen Zeile ASCII-Text mit einem Namen und einem Wert. Die Überschriften selbst werden im Browserfenster in keiner Weise angezeigt, können jedoch die Anzeige des Begleitdokuments häufig erheblich verändern.

Der Mechanismus zum Senden von HTTP-Headern in PHP.

Der Mechanismus zum Senden von Headern in PHP wird durch die Funktion header () dargestellt. Die Besonderheit des HTTP-Protokolls besteht darin, dass der Header vor dem Senden anderer Daten gesendet werden sollte. Daher sollte die Funktion ganz am Anfang des Dokuments aufgerufen werden und folgendermaßen aussehen:
header("HTTP заголовок", необязательный параметр replace);

Der optionale Ersetzungsparameter kann Werte vom Typ bool (true oder false) annehmen und gibt an, ob der vorherige Header dieses Typs ersetzt werden soll, oder fügt diesen Header dem vorhandenen hinzu.

In Bezug auf die Funktion header () wird häufig die Funktion headers_sent () verwendet, die true zurückgibt, wenn der Header erfolgreich gesendet wurde, andernfalls false.

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

Cache-Kontrolle.

"Cache-Steuerung:" Wert

Überschriftensteuerung für das Caching von Seiten. Im Allgemeinen ist diese Funktion eine der am häufigsten verwendeten Überschriften.

Dieser Header kann mit den folgenden Werten verwendet werden:

* no-cashe - Verbot des Zwischenspeicherns. Wird in häufig aktualisierten Seiten und Seiten mit dynamischem Inhalt verwendet. Seine Aktion ähnelt dem META-Tag "Pragma: no-cache".
* public - Ermöglicht das Zwischenspeichern von Seiten durch den lokalen Client und den Proxy-Server.
* privat - Zwischenspeicherung nur durch den lokalen Client zulassen.
* max-age - Ermöglicht die Verwendung eines zwischengespeicherten Dokuments für eine bestimmte 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 betrachtet wird. Das Datum sollte in folgendem Format vorliegen (auf Englisch):

Wochentag (abgekürzt) Zahl (zweistellig) Monat (abgekürzt) Jahr Stunden: Minuten: Sekunden GMT

Beispiel: Freitag, 9. Januar 2002, 12:00:00 Uhr GMT

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

Mit diesem HTTP-Header kann das Caching deaktiviert werden. 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 dasselbe Format haben wie der Expires-Header. Dieser Header kann nicht für dynamische Seiten verwendet werden, da viele Server (z. B. Apache) das Änderungsdatum für solche Seiten selbst festlegen.

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

Lage

"Ort:" absolute URL

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

Dieser Header kann beispielsweise folgendermaßen 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 der HTTP-Header untersucht. In dieser Lektion werden wir einen weiteren spezifischen HTTP-Header einführen - ein Cookie.

Was sind Cookies?
Tatsache ist, dass bei der Entwicklung von WWW-Technologien und der Einführung von Programmiersprachen im Internet Softwareentwickler vor ein sehr ernstes Problem gestellt wurden - wie können die Ergebnisse des Algorithmus für jeden einzelnen Benutzer für eine lange Zeit gespeichert werden? Das HTTP-Protokoll selbst kann die Ergebnisse von Softwareprozessen nicht erfassen. Die Verwendung von Sitzungen ist auch keine Lösung für das Problem, da sie sofort beendet werden, nachdem die Verbindung zum Server unterbrochen wurde.

Das Problem wurde mit der Einführung des Cookies-Mechanismus (auf Englisch „Cookies“) behoben. Cookies haben eine bemerkenswerte Eigenschaft - sie werden auf der Festplatte des Benutzers gespeichert und können dort für fast unbegrenzte Zeit gespeichert werden.

Cookies sind im Wesentlichen reine Textdateien, die in einem speziellen Verzeichnis gespeichert werden, das vom Browser verwendet wird (normalerweise heißt dieser Ordner Temporäre Internetdateien), und Sie können sie anzeigen, indem Sie in dieses Verzeichnis gehen (IE ermöglicht den schnellen Zugriff über das Menü Extras). -> Internetoptionen -> Temporäre Internetdateien -> Einstellungen -> Dateien anzeigen).

Die Implementierung von Cookies in PHP.
Die Implementierung des Cookies-Mechanismus wird durch eine einzige setcookie () -Funktion dargestellt. Wie im Fall von HTTP-Headern muss diese Funktion aufgerufen werden, bevor Daten an den Remote-Client gesendet werden, selbst "leere" Zeichen, d. H. Leerzeichen, neue Zeilenzeichen usw., sind nicht zulässig.

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

Alle Parameter mit Ausnahme des Cookie-Namens sind optional. Wenn ein Cookie nur mit diesem Parameter gesendet wird, wird es vom Remote-Client sofort zerstört, sodass dieser Parameter alleine nicht die Informationslast trägt. Ein Cookie mit vollem Funktionsumfang wird mit den folgenden zwei Parametern erstellt: dem im Cookie festgelegten Wert und der Zeit, bis zu der dieses Cookie verwendet werden kann.

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


Beachten Sie, dass die gesendeten Daten als Zeichenfolge formatiert sein sollten. Der Versuch, das zuvor gesendete Array von Werten zu lesen, führt zu nichts.

Das im obigen Beispiel gesetzte Cookie wird sofort nach dem Schließen des Browsers durch den Benutzer gelöscht, da die Standard-Cookie-Lebensdauer auf Null gesetzt ist. Um diese Reihenfolge zu ändern, müssen Sie den dritten Parameter expire angeben. Dieser Parameter kann auf zwei Arten bestimmt werden:

* Stellen Sie das Ablaufdatum mit der Funktion time () ein, zu der die Zeit in Sekunden hinzugefügt wird, um das Cookie zu speichern. Um beispielsweise ein Cookie für zwei Stunden zu definieren, müssen Sie setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе schreiben: setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе

* Die zweite Methode ist das Festlegen des absoluten Ablaufdatums des Cookies. Sie wird mit der Funktion mktime () festgelegt, die ein bestimmtes Datum zum Löschen von Cookies zurückgibt. Wenn Sie die Lebensdauer eines Cookies am 1. September 2003 bis Mitternacht festlegen müssen, sollten Sie ein Cookie wie setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003); definieren: setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003);

Ein optionaler Pfadparameter begrenzt den Umfang von Cookies in bestimmten Verzeichnissen. Außerdem enthält dieser Bereich alle Pfade, die mit dem Wert in diesem Parameter beginnen. Zum Beispiel:
setcookie("test 3, "", 0, "/mus");

Wir setzen den Cookie, überspringen die Wert- und Zeitparameter und definieren den Gültigkeitsbereich auf alle Arten, beginnend mit der Zeichenfolge "/ mus", dh dies schließt das Verzeichnis "/ music /" und "/ museums /" ein. Um den Pfad eindeutig zu identifizieren, müssen Sie den Pfad mit einem Schrägstrich abschließen. Das heißt, um das Cookie auf das Verzeichnis "/ mus" zu beschränken, musste der Parameter "/ mus /" eingegeben werden.

Der nächste optionale Parameter ist die Option, eine Cookie-Aktion innerhalb der angegebenen Domäne zu definieren. Außerdem entspricht der Wert dieses Parameters "someserver.com" nur der Site mit der Adresse http://someserver.com , und der Wert ".someserver.com" entspricht bereits sowohl http://someserver.com als auch http: //mail.someserver. com und http://my-someserver.com , dh alle Domänen, die mit einer bestimmten Zeichenfolge enden.

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

Einen Keks lesen.
Appell an das gesetzte Cookie geht ü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 in einem Cookie gespeichert sind, kann auch über das Array $ HTTP_COOKIE_VARS erfolgen. Es ähnelt anderen ähnlichen Arrays, z. B. $ HTTP_POST_VARS und anderen, und enthält alle aus dem Cookie gelesenen Werte.

Cookie löschen.
Ein Cookie wird gelöscht, indem ein neues Cookie mit dem zu löschenden Namen 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 Klassen, sondern wurde "unter öffentlichem Druck", dh auf Wunsch der Leser, erstellt und widmet sich den regulären Ausdrücken und Funktionen der Arbeit mit ihnen. Meine Berechnungen, dass der Artikel von Alexander Grimalovsky "Reguläre Ausdrücke" ausreichen würde, um dieses Thema zu verstehen, haben sich wahrscheinlich als falsch herausgestellt.

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

Reguläre Ausdrücke selbst sind in PHP nicht neu. In der einen oder anderen Form werden sie ziemlich lange verwendet und sind ein sehr leistungsfähiger Mechanismus für die Arbeit mit Zeichenfolgendaten.

Ein regulärer Ausdruck ist ein Muster, das für verschiedene Aktionen verwendet wird, abhängig von der Funktion, die diesen regulären Ausdruck verwendet. Zum Einstellen der Vorlage werden Sonderzeichen verwendet.

Funktionen zum Arbeiten mit regulären Ausdrücken.
Es muss erwähnt werden, dass PHP sowohl über einen eigenen Mechanismus für reguläre Ausdrücke (POSIX) verfügt als auch von einer anderen Perl-Server-Programmiersprache entlehnt ist. Äußerlich sind sie leicht anhand des Funktionsnamens zu unterscheiden: Funktionen des ersten Typs beginnen mit den Zeichen "ereg" und des zweiten mit "preg".

Funktionsnamen sind jedoch nicht der einzige Unterschied. Erstens enthalten sie einige Unterschiede in der Syntax regulärer Ausdrücke. Perl-ähnliche Funktionen erfordern also Trennzeichen: $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, verwenden wir die Funktionen zum Ersetzen eines Teils einer Zeichenfolge mit regulären Ausdrücken. Beachten Sie die Funktionsvorlage preg_replace: Die Schrägstriche werden hier als Trennzeichen angezeigt, wobei der Modifikator i nach dem schließenden Trennzeichen angibt, dass bei der Vorlage die Groß- und Kleinschreibung nicht beachtet wird. Der gleiche Effekt wird mit der POSIX-Funktion mit dem Suffix i (eregi_replace) erzielt.

Die Funktion preg_replace in unserem Beispiel zeigte die sogenannte "Gier" und deckte die gesamte Zeile ab, die mit dem Buchstaben "p" beginnt und mit "e" endet. Die Funktion nicht "gierig" zu machen, hilft dem Modifikator U.

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

Die eregi_replace-Funktion zeigte ebenfalls "Habgier", aber diese Reihenfolge kann nicht mehr geändert werden, da POSIX-Funktionen die Verwendung von Modifikatoren nicht vorsehen.

Beispiele für reguläre Ausdrücke.

Zeitumstellung auf Standard-Unix-Zeit.

Angenommen, wir haben ein Datum in der Datenbank oder in einer anderen Quelle im folgenden Format:
Stunden: Minuten: Sekunden - Tag.Monat.Jahr
Aus irgendeinem Grund (zum Beispiel wurde die Site neu gestaltet) mussten wir das Datum wie folgt anzeigen:
Tag.Monat.Jahr Stunden: Minuten

Wie Sie verstehen, ist es verrückt, dies manuell zu tun. Daher schreiben wir ein Skript, das in der ersten Phase das Datum in Stunden: Minuten: Sekunden, Monat / Tag / Jahr umwandelt und dann die Funktion strtotime () verwendet, um diesen Eintrag in die Standard-UNIX-Zeit umzuwandeln was wir anzeigen können, wie wir wollen.

Das interessanteste ist die erste Stufe. Er interessiert sich für die Verwendung von regulären Ausdrücken. $str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату
$str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\\2/\\1/\\3", $str);

Mit Hilfe eines regulären Ausdrucks ändern wir das Format von Tag, Monat und Jahr, wobei jedes Element durch eckige Klammern getrennt wird. Im zweiten Parameter der Funktion verweisen wir auf die Übereinstimmungen in Klammern. So geht's:

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


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


Jetzt können Sie die Variable $ time verwenden, wie Sie möchten.