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

PHP-Sitzung (Dateien, Verzeichnisse und PHP, Arbeiten mit Dateien)



file_exists
Bevor Sie Operationen an einer Datei ausführen, müssen Sie oft sicherstellen, dass die angegebene Datei überhaupt existiert. Dies ist die Funktion von file_exists. Diese Funktion kann nur zwei Werte zurückgeben, wie Sie verstehen: TRUE (falls die angegebene Datei existiert) und FALSE. Normalerweise sieht die Verwendung dieser Funktion so aus:
if ( !file_exists("somefile.txt") ) exit("Указанный файл не существует");
Beachten Sie, dass die Funktion nur für lokale Dateien funktioniert. Wenn Sie also prüfen möchten, ob Yandex eine robots.txt-Datei hat, sind Ihre Bemühungen nutzlos. Es ist jedoch möglich, jede Datei auf dem lokalen Server zu überprüfen, unabhängig vom Verzeichnis des Standorts.

Dateigröße

Wie der Name schon sagt, bestimmt die Funktion die Größe der Datei und gibt sie in Bytes zurück. Nützlich, wenn Sie die Datei auf das Vorhandensein von Informationen überprüfen möchten (die leere Datei enthält 0 Bytes) und es ist auch möglich, die Dateigröße auf ein bestimmtes Limit zu prüfen.


Datei

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

Außerdem ist es möglich, alle Elemente des zurückgegebenen Arrays in einer Variablen wieder zu vereinen. Dies wird mit der Funktion der Arbeit mit implodierten Arrays gemacht. $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, die jeder hat, da ein Zeichen gleich einem Byte ist). Bedenken Sie jedoch, dass diese Funktion im Gegensatz zu einer Datei die gelesenen Inhalte einer Variablendatei nicht zuweisen kann. Wenn Sie dies versuchen, wird der Variablen nur die Anzahl der gelesenen Zeichen zugewiesen. $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";



fopen

Wenn die vorherige Funktion in sich abgeschlossen ist und in der Regel nicht mit anderen Funktionen zusammenhängt, arbeiten die nachfolgenden Funktionen der Arbeit 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. Diese Funktion ist mit dem Inhalt der Datei in keiner Weise verknüpft.

Die Funktion fopen hat mehrere Modi, um mit der Datei zu arbeiten. Sie werden nach dem Dateinamen angegeben und stellen die folgende Notation dar:
    "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 +" Zum Überspielen und Lesen.


Fgets

Funktion zum Lesen einer durch die Funktion fopen geöffneten Datei. Im Gegensatz zur Datei gibt diese Funktion jedoch bei jeder Ausführung nur eine Zeile der Datei zurück und verschiebt den internen Zeiger auf 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 fgets-Funktion den optionalen length-Parameter verwendet, der die maximale Länge der Zeile der zu lesenden Datei angibt. Wenn das Volumen der Zeichenfolge diese Zahl überschreitet, gibt die Funktion sie in der Form "abgeschnitten" durch das Volumen in der Anzahl der Längenbytes zurück. Standardmäßig ist dieser Parameter auf 1024 Bytes oder ein Kilobyte festgelegt. Achten Sie besonders auf diesen Parameter, wenn Sie große Dateien verwenden, denn beim Lesen solcher Dateien kann der PHP-Ausführungspuffer überlaufen (sein Volume ist in der Konfigurationsdatei angegeben), was zu einem Auflegen führt.



PHP und HTTP: Header



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

Zunächst einmal ein paar Worte über die HTTP-Header selbst.

In Übereinstimmung mit der HTTP-Spezifikation unterstützt dieses Protokoll die Übertragung von Dienstinformationen vom Server an den Browser, die als spezielle Header konzipiert sind.

Somit sind HTTP-Header ein Mittel zur Kommunikation eines Servers mit einem entfernten Client. Jeder Header besteht normalerweise aus einer einzelnen ASCII-Textzeile mit einem Namen und einem Wert. Die Kopfzeilen selbst werden nicht im Browserfenster angezeigt, sie 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 () dargestellt. Die Besonderheit des HTTP-Protokolls besteht darin, dass der Header gesendet werden sollte, bevor andere Daten gesendet werden. Daher sollte die Funktion am Anfang des Dokuments aufgerufen werden und sollte 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 zu einem vorhandenen hinzufügen.

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

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

Cache-Kontrolle.

"Cache-Steuerung:" Wert

Header der Cachingseiten. Im Allgemeinen ist diese Funktion eine der am häufigsten verwendeten Kopfzeilen.

Dieser Header kann mit den folgenden Werten verwendet werden:

* no-cashe - Verbot des Cachens. Wird in häufig aktualisierten Seiten und Seiten mit dynamischem Inhalt verwendet. Sein Betrieb ist ähnlich dem META-Tag "Pragma: no-cache".
* public - Ermöglicht das Zwischenspeichern der Seite sowohl vom lokalen Client als auch vom Proxyserver.
* private - Aktivieren Sie das Zwischenspeichern nur vom lokalen Client.
* max-age - Ermöglicht 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 der das Dokument als veraltet gilt. Das Datum muss im folgenden Format (in Englisch) sein:

Wochentag (Abk.) Nummer (2 Stellen) Monat (abgekürzt) Jahr Stunden: Minuten: Sekunden GMT

Zum Beispiel, Fri, 09 Jan 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 gleichen Format angegeben werden wie im Fall des Header Expires. Dieser Header kann nicht für dynamische Seiten verwendet werden, da viele Server (z. B. Apache) für solche Seiten selbst das Änderungsdatum verfügbar machen.

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

Lage

"Ort:" absolute URL

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

Beispielsweise 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 speziellen HTTP Header kennen.

Was sind Cookies?
Der Punkt ist, dass Softwareentwickler bei 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 jeden einzelnen Benutzer für eine lange Zeit speichern? Das HTTP-Protokoll hat selbst keine Möglichkeit, die Ergebnisse von Softwareprozessen 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 der Cookies (dh in der Übersetzung aus dem Englischen, "Cookies") gelöst. Cookies haben eine bemerkenswerte Eigenschaft - sie werden auf der Festplatte des Benutzers gespeichert und können dort nahezu unbegrenzt gespeichert werden.

Im Wesentlichen sind Cookies gewöhnliche Textdateien, die in einem vom Browser verwendeten speziellen Verzeichnis gespeichert werden (in der Regel wird dieser Ordner Temporary Internet Files genannt), und Sie können sie sehen, indem Sie in dieses Verzeichnis gehen (der schnelle Zugriff auf IE-Browser erfolgt über die Menüpunkte Service -> Internetoptionen -> Temporäre Internetdateien -> Einstellungen -> Dateien anzeigen.

Implementierung des Mechanismus von Cookies in PHP.
Die Implementierung des Cookies-Mechanismus wird durch die einzige Funktion setcookie () dargestellt. 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 es sofort vom Remote-Client zerstört, sodass dieser Parameter alleine nicht die Informationslast trägt. Ein voll funktionsfähiges Cookie enthält die folgenden zwei Parameter: den im Cookie gespeicherten Wert und die Zeit, zu der dieser Cookie verwendet werden kann.

Der Wert, den der Cookie führt, ist eine Zeichenfolge von ASCII-Zeichen. Sie können beispielsweise ein Cookie mit Vor- und Nachname des Besuchers setzen, den er zuvor in das Formularfeld eingegeben hat.
$data = $name."||".$surname;
setcookie("username", $data);


Beachten Sie, dass die gesendeten Daten in Form eines Strings vorliegen müssen. Ein Versuch, das zuvor gesendete Array von Werten zu lesen, führt zu nichts.

Der im obigen Beispiel festgelegte Cookie wird sofort nach dem Schließen des Browsers durch den Benutzer gelöscht, da die Lebensdauer des Cookies standardmäßig 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 mit der Funktion time () fest, zu der die Zeit in Sekunden hinzugefügt wird, um das Cookie zu speichern. Um beispielsweise ein Cookie für zwei Stunden zu definieren, muss man 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 das Cookie festzulegen. Es wird mit der Funktion mktime () festgelegt, die ein bestimmtes Datum zum Löschen des Cookies zurückgibt. Wenn Sie die Cookie-Lebensdauer vor dem 1. September 2003 um Mitternacht festlegen möchten, sollten Sie das Cookie wie folgt definieren: setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003);

Ein optionaler Pfadparameter begrenzt den Gültigkeitsbereich des Cookies in bestimmten Verzeichnissen. 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 Werte und Zeitparameter weglassen und den Bereich aller Pfade beginnend mit der Zeile "/ mus", also dem Verzeichnis "/ music /" und "/ museums /" definieren. Um den Pfad eindeutig zu bestimmen, müssen Sie den Pfad mit einem Schrägstrich abschließen. Das heißt, um den Effekt des Cookies auf das Verzeichnis "/ mus" zu beschränken, schreiben Sie den Parameter "/ mus /".

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 Website mit der Adresse http://someserver.com und der Wert ".someserver.com" entspricht bereits und http://someserver.com und http: //mail.someserver. com und http://my-someserver.com , dh alle Domains, die mit dieser Zeile enden.

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

Cookies lesen.
Der Zugriff auf das installierte Cookie durchläuft 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 im Cookie gespeicherte Daten 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 aus dem Cookie gelesen werden.

Löschen Sie das Cookie.
Der Cookie wird gelöscht, indem ein neuer 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", dh auf Wunsch der Leser, erstellt und wird den regulären Ausdrücken und Funktionen der Arbeit mit ihnen gewidmet. Wahrscheinlich sind meine Berechnungen, dass die Artikel von Alexander Grimalovsky "Reguläre Ausdrücke" ausreichen werden, um dieses Thema zu verstehen, falsch.

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 sehr lange benutzt und sind ein sehr leistungsfähiger Mechanismus zum Arbeiten mit Zeichenkettendaten.

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 zum Angeben einer Vorlage verwendet.

Funktionen der Arbeit mit regulären Ausdrücken.
Es muss gesagt werden, dass PHP sowohl einen eigenen Mechanismus für die Arbeit mit regulären Ausdrücken (POSIX) als auch von einer anderen Serverprogrammiersprache Perl entlehnt hat. Ä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 ihr einziger Unterschied. Zuallererst enthalten sie einige Unterschiede in der Syntax regulärer Ausdrücke. Perl-ähnliche Funktionen benötigen 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 Funktion, Teile eines Strings durch reguläre Ausdrücke zu ersetzen. Beachten Sie das Muster der Funktion preg_replace: Die Schrägstriche hier sind die Schrägstriche, wobei der Modifikator i dem schließenden Trennzeichen folgt und angibt, dass das Muster nicht zwischen Groß- und Kleinschreibung unterscheidet. Der gleiche Effekt wird erreicht, wenn die POSIX-Funktion mit dem Suffix i (eregi_replace) verwendet wird.

Die Funktion preg_replace in unserem Beispiel zeigt die so genannte "Gier" und deckt die gesamte Zeile ab, die mit dem Buchstaben "p" beginnt und mit "e" endet. Machen Sie die Funktion nicht "gierig" hilft Modifier U.

Die Funktion hat den minimalen Abstand zwischen den Buchstaben "p" und "e" gefunden und durch den angegebenen String ersetzt.

Die Funktion eregi_replace zeigt auch "Gier" an, aber diese Reihenfolge kann nicht mehr geändert werden, da POSIX-Funktionen keine Modifizierer verwenden.

Beispiele für reguläre Ausdrücke

Zeitkonvertierung in Standard-Unix-Zeit.

Angenommen, wir haben ein Datum in der Datenbank oder eine andere Quelle im folgenden Format:
Stunden: Minuten: Sekunden - Tag.Monat.Jahr
Aber aus irgendeinem Grund (zum Beispiel, die Website neu zu gestalten), mussten wir das Datum in der folgenden Form anzeigen:
Tag.Monat.Jahr: Minuten

Wie Sie wissen, ist es verrückt, also schreiben wir ein Skript, das in der ersten Stufe das Datum in das Formular bringt: Stunden: Minuten: Sekunden pro Monat / Tag / Jahr und dann mit der Funktion strtotime () , die wir anzeigen können, wie Sie wollen.

Am interessantesten ist die erste Stufe. Das interessiert uns an 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 dem regulären Ausdruck ändern wir das Format der Tages-, Monats- und Jahreseinträge und jedes Element wird durch eckige Klammern getrennt. Im zweiten Parameter der Funktion verweisen wir auf die Übereinstimmungen in Klammern. So sieht es aus:

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


In dieser Phase bekommen 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 $ time -Variable beliebig verwenden.