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 mit einer Datei ausführen, müssen Sie oft sicherstellen, dass die angegebene Datei überhaupt existiert. Dies ist die Funktion 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 auf lokale Dateien wirkt, dh wenn Sie überprüfen möchten, ob Yandex die robot.txt-Datei erworben hat, werden Ihre Bemühungen umsonst sein. Es ist jedoch möglich, jede Datei, die auf dem lokalen Server liegt, unabhängig vom Verzeichnis ihres Standorts zu überprüfen.

Dateigröße

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


Datei

Diese Funktion funktioniert bereits direkt mit der Datei. Sie gibt den Inhalt der angegebenen Datei zurück und zwar in Form eines Arrays, wobei jedes seiner Elemente eine Zeichenfolge der Datei ist. Die Funktion ist nützlich, wenn Sie in derselben Datei mehrere verschiedene Werte speichern müssen, die sich nicht überschneiden sollten. 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 auftritt, 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 mithilfe der Implod-Array-Funktion. $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, wie Sie möchten, da ein Zeichen ein Byte ist). Beachten Sie jedoch, dass diese Funktion im Gegensatz zur Datei keine Möglichkeit bietet, den gelesenen Inhalt einer Datei einer Variablen zuzuordnen. 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 im Allgemeinen nicht mit anderen Funktionen verknüpft ist, arbeiten die nachfolgenden Dateibehandlungsfunktionen in Verbindung mit fopen. Diese Funktion öffnet die angegebene Datei und gibt die ID der Verbindung mit der Datei zurück, die für geschäftliche Zwecke verwendet wird. Diese Funktion ist nicht mit dem Inhalt der Datei verknüpft.

Die fopen-Funktion hat mehrere Betriebsmodi 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 Aufzeichnung 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 Aufzeichnen und Lesen.


fgets

Die Funktion zum Lesen der von der Funktion fopen geöffneten Datei. Im Gegensatz zur Datei gibt diese Funktion bei jeder Ausführung nur eine Zeile der Datei zurück, während sie den internen Dateizeiger auf 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 die optionale Parameterlänge verwendet, die die maximale Länge der zu lesenden Dateizeichenfolge angibt. Wenn das Volumen der Zeichenfolge diese Anzahl überschreitet, gibt die Funktion es in einer "abgeschnittenen" Form der Ein-Byte-Länge zurück. Standardmäßig ist dieser Parameter auf 1024 Byte oder ein Kilobyte festgelegt. Beachten Sie außerdem diesen Parameter, wenn Sie große Dateien verwenden, da das Lesen dieser Dateien den PHP-Ausführungspuffer überlaufen kann (seine Größe ist in der Konfigurationsdatei angegeben), was zu einem Hängenbleiben 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 in Form von speziellen Headern gestaltet sind.

So ist HTTP-Header ein Mittel der Kommunikation zwischen einem Server und einem Remote-Client. Jede Überschrift besteht normalerweise aus einer einzelnen Zeile ASCII-Text mit einem Namen und einem Wert. Die Kopfzeilen selbst werden im Browser-Fenster in keiner Weise angezeigt, können aber oft die Darstellung 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 folgendermaßen aussehen:
header("HTTP заголовок", необязательный параметр replace);

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

In Bezug auf die Funktion header () wird oft die Funktion headers_sent () verwendet, die als Ergebnis 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

Der Header des Seitencache-Steuerelements. Im Allgemeinen ist dieses Feature einer der am häufigsten verwendeten Header.

Dieser Header kann mit den folgenden Werten verwendet werden:

* no-cashe - Deaktivieren Sie das Caching. Wird in häufig aktualisierten Seiten und Seiten mit dynamischem Inhalt verwendet. Seine Aktion ähnelt dem META-Tag "Pragma: no-cache".
* public - Erlaube Seiten-Caching sowohl vom lokalen Client als auch vom Proxy-Server.
* privat - Erlaube das Zwischenspeichern nur durch den lokalen Client.
* max-age - Zulassen, dass ein zwischengespeichertes Dokument für eine bestimmte Zeit in Sekunden verwendet wird. 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 sollte das folgende Format haben (in Englisch):

Wochentag (Abk.) Anzahl (2 Ziffern) Monat (abgek.) Jahr Stunden: Minuten: Sekunden GMT

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

Die aktuelle Zeit in diesem Format wird von der Funktion gmdate () wie folgt 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. Zu diesem Zweck 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 wie der Expires-Header sein. Dieser Header kann nicht für dynamische Seiten verwendet werden, da viele Server (z. B. Apache) das Änderungsdatum für diese Seiten selbst festlegen.

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 Header, der den Browser an die angegebene Adresse weiterleitet. Seine Wirkung ist vergleichbar mit META Refresh-Tag:
<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 der HTTP-Header untersucht. In dieser Lektion stellen wir einen weiteren spezifischen HTTP-Header-Cookie vor.

Was sind Cookies?
Tatsache ist, dass bei der Entwicklung von www-Technologien und der Einführung von Programmiersprachen ins Internet ein sehr ernstes Problem für Softwareentwickler auftauchte - wie können die Ergebnisse des Algorithmus für einen bestimmten Benutzer für eine lange Zeit gespeichert werden? Das HTTP-Protokoll selbst ist nicht in der Lage, die Ergebnisse von Software-Prozessen zu erfassen. Die Verwendung von Sitzungen ist auch keine Lösung für das Problem, da ihre Aktion sofort nach dem Trennen der Verbindung mit dem Server beendet wird.

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

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

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

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 selbst keine Informationen lädt. Ein Cookie mit vollem Funktionsumfang wird durch die folgenden zwei Parameter erstellt: der im Cookie gesetzte Wert und die Zeit, bis zu der dieser Cookie verwendet werden kann.

Der Wert, der den Cookie enthält, kann eine beliebige Zeichenfolge aus ASCII-Zeichen sein. Sie können beispielsweise einen 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 als Zeichenfolge formatiert sein sollten. Wenn Sie versuchen, das zuvor gesendete Array mit Werten zu lesen, führt dies nicht zu etwas.

Der 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:

* Legen Sie das Ablaufdatum mithilfe der Funktion time () fest, zu der die Zeit in Sekunden hinzugefügt wird, um den Cookie zu speichern. 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 Methode legt das absolute Ablaufdatum des Cookies fest. Es wird mit der Funktion mktime () festgelegt, die ein bestimmtes Datum zum Löschen von Cookies zurückgibt. Wenn Sie die Lebensdauer eines Cookies bis Mitternacht des 1. September 2003 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, indem wir die Parameter Wert und Zeit überspringen und den Bereich auf alle Arten definieren, beginnend mit der Zeichenfolge "/ mus", also einschließlich des Verzeichnisses "/ music /" und "/ museums /". Um den Pfad eindeutig zu identifizieren, müssen Sie den Pfad mit einem Schrägstrich vervollständigen. Das heißt, um den Cookie auf das Verzeichnis "/ mus" zu beschränken, war es notwendig, in den Parameter "/ mus /" zu schreiben.

Der nächste optionale Parameter ist die Option, eine Cookie-Aktion innerhalb der angegebenen Domäne zu definieren. Darüber hinaus entspricht der Wert dieses Parameters "someserver.com" nur der Site mit der Adresse http://someserver.com , und der Wert von ".someserver.com" entspricht bereits sowohl http://someserver.com als auch http: //mail.someserver. com , und http://my-irgendeinserver.com , das heißt, alle Domains enden in einer gegebenen Zeichenfolge.

Der letzte Parameter der Funktion setcookie () gibt an, dass dieser Cookie über eine sichere Verbindung (HTTPS) gesendet werden soll. Dieser Parameter wird benötigt, 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 den gesetzten Cookie geht durch 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 wie $ HTTP_POST_VARS und anderen und enthält alle Werte, die vom Cookie gelesen werden.

Löschen Sie das Cookie.
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" erstellt, dh auf Wunsch der Leser, und wird regulären Ausdrücken und Funktionen der Arbeit mit ihnen gewidmet sein. Wahrscheinlich, meine Berechnungen, dass der Artikel von Alexander Grimalovsky "Reguläre Ausdrücke" genug sein würde, um dieses Thema zu verstehen, hat sich als falsch erwiesen.

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

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

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. Sonderzeichen werden verwendet, um das Muster festzulegen.

Funktionen zum Arbeiten mit regulären Ausdrücken.
Es ist notwendig zu sagen, dass PHP seine eigene Engine für reguläre Ausdrücke (POSIX) besitzt und von einer anderen Perl-Server-Programmiersprache entlehnt ist. Äußerlich sind sie leicht nach Funktionsnamen zu unterscheiden: Funktionen des ersten Typs beginnen mit den Zeichen "ereg" und die zweite - "preg".

Aber Funktionsnamen sind nicht der einzige Unterschied. Vor allem enthalten sie einige Unterschiede in der regulären Ausdruckssyntax. 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 die Funktionsschablone preg_replace: Die Schrägstriche erscheinen hier als Trennzeichen, wobei der Modifizierer i nach dem schließenden Trennzeichen folgt und angibt, dass bei der Vorlage die Groß- und Kleinschreibung nicht beachtet wird. 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 umfasste die gesamte Zeile, die mit dem Buchstaben "p" beginnt und mit "e" endet. Die Funktion nicht "gierig" zu machen hilft 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 "Gier", 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 in einer anderen Quelle im folgenden Format:
Stunden: Minuten: Sekunden - Tag.Monat.Jahr
Aber aus irgendeinem Grund (zum Beispiel wurde die Seite neu gestaltet), mussten wir das Datum wie folgt anzeigen:
Tag.Monat.Jahrstunden: Minuten

Wie Sie wissen, ist das manuell verrückt, also schreiben wir ein Skript, das in der ersten Phase das Datum in Stunden bringt: Minuten: Sekunden Monat / Tag / Jahr und dann die Funktion strtotime () verwenden, um diesen Eintrag in die Standard-UNIX-Zeit zu konvertieren die wir so anzeigen können, wie wir möchten.

Am interessantesten 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 ist. Im zweiten Parameter der Funktion verweisen wir auf die Übereinstimmungen in Klammern. So passiert es:

    \\ 0 - enthält eine Zeichenfolge, die der gesamten Vorlage entspricht (in unserem Beispiel "10.03.02").
    \\ 1 - enthält Zeichen, die nur dem ersten in Klammern eingeschlossenen Element entsprechen (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.