PHP session (fichiers, répertoires et PHP, le travail avec des fichiers)



file_exists
Avant d'effectuer des opérations sur un fichier, il est souvent nécessaire de faire en sorte que le fichier existe. Cette traite également des file_exists de fonction. Cette fonction ne peut retourner deux valeurs, comme vous pouvez l'imaginer, TRUE (si le fichier existe) et FALSE. En règle générale, l'utilisation de cette fonction est la suivante:
if ( !file_exists("somefile.txt") ) exit("Указанный файл не существует");
Notez que la fonction ne fonctionne que sur des fichiers locaux, qui est, si vous êtes voulu vérifier si Yandex acquis le fichier robots.txt, vos efforts seront vains. Mais il est possible de vérifier un fichier qui se trouve sur le serveur local indépendamment de l'emplacement du répertoire.

filesize

Comme son nom l'indique, la fonction détermine la taille du fichier et il retourne en octets. Utile si vous voulez vérifier le fichier pour les informations qu'il contient (comme vous le savez, un fichier vide contient 0 octets), aussi bien que possible pour vérifier la taille du fichier dépasse une certaine limite.


fichier

Cette fonctionnalité fonctionne déjà directement avec le fichier. Il renvoie le contenu du fichier, et il le fait dans un tableau, où chaque élément est une ligne dans le fichier. La fonction est utile quand un seul fichier est nécessaire pour maintenir plusieurs valeurs différentes qui ne doivent pas être franchies. Ensuite, chaque valeur est stockée sur une ligne distincte et le fichier fonction qui retourne un tableau, de sorte que la référence à une variable spécifiée est fait en lisant les valeurs de l'élément de tableau avec l'indice correspondant à la ligne dans le fichier lu.

En outre, tous les éléments possibles du tableau de réunion retournés en une seule variable. Ceci est fait en utilisant des fonctions avec des tableaux implode. $text_file = implode("", file("somefile"));
echo $text_file;
fichier ( "somefile")); $text_file = implode("", file("somefile"));
echo $text_file;



readfile

Comme la fonction précédente, affiche readfile le contenu du fichier spécifié, et retourne le nombre de caractères dans un fichier (ou un certain nombre d'octets que vous le souhaitez, car un caractère est un octet). Mais notez que, contrairement au fichier, cette fonctionnalité ne prévoit pas l'affectation de lire le contenu du fichier variable. Si vous essayez ceci, vous n'attribuer un nombre variable de caractères lus. $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";
); $bytes = readfile ("somefile");
echo "Итого - ".$bytes." символов";



fopen

Si une fonction précédente est autonome et ne sont généralement pas associée à d'autres caractéristiques, les fonctions de gestion de fichiers suivants fonctionnent conjointement avec fopen. Cette fonction ouvre le fichier spécifié et retourne un identifiant de connexion avec le fichier qui est utilisé à des fins commerciales. Avec le contenu du fichier, cette fonctionnalité est en aucune façon liée.

fonction fopen dispose de plusieurs modes de fonctionnement avec le fichier. Ils précisent le nom du fichier et sont des désignations suivantes:
    fichier "R" est ouvert seulement pour la lecture de son contenu.
    "R +" Ouvrir un fichier pour la lecture et l'écriture.
    "W" Le fichier est ouvert dans le but de l'enregistrement.
    "W +" Ouvrir un fichier pour la lecture et l'écriture.
    "A" fichier est ouvert en écriture dans le fichier (ajouter).
    "A +" Ouvre en lecture et ajout.


fgets

déposer fonction de lecture, la fopen fonction ouverte. Mais contrairement à un fichier, cette fonction pour chaque fois que son exécution ne renvoie qu'une seule ligne du fichier, alors qu'il déplace le pointeur de fichier interne à la ligne suivante, qu'elle lut sur le prochain appel à la fonction. Par conséquent, si vous avez besoin de lire l'intégralité du fichier, vous devez utiliser cette fonction dans une boucle.

Notez que la fonction utilise fgets option de longueur de paramètre, qui spécifie la longueur maximale de la ligne dans le fichier pour la lecture. Si le volume de la ligne dépasse ce nombre, la fonction Retour à "couper" un volume dans le nombre d'octets de longueur. Par défaut, ce paramètre est réglé à 1024 octets, ou un kilo-octet. Surtout payer l'attention sur cette option si vous utilisez des fichiers volumineux, car la mémoire tampon d'exécution de PHP peut déborder lors de la lecture de ces fichiers (le champ d'application est spécifié dans le fichier de configuration), il va se planter.



PHP et HTTP: les en-têtes



PHP, étant le vebprogrammirovaniya de langue, prend en charge la mise en œuvre des en-têtes HTTP pour envoyer mécanisme.

Tout d'abord, quelques mots sur le HTTP eux-têtes.

Selon la spécification HTTP, le protocole prend en charge le transfert des informations de service à partir du serveur vers le navigateur, conçu sous la forme de titres spéciaux.

Ainsi, en-têtes HTTP - un moyen de communication avec le serveur d'un client distant. Chaque en-tête se compose généralement d'une seule ligne de texte ASCII avec le nom et la valeur. titres Sami ne figuraient pas dans la fenêtre du navigateur, mais souvent peut fortement modifier l'affichage du document d'accompagnement.

Le mécanisme d'envoi d'en- têtes HTTP en PHP.

Le mécanisme d'envoi d'en-têtes en PHP représenté la fonction header (). La fonctionnalité du protocole HTTP est que le titre doit être envoyé avant d'envoyer d'autres données, de sorte que la fonction doit être appelée au début du document et devrait être le suivant:
header("HTTP заголовок", необязательный параметр replace);

Le paramètre optionnel remplacer peut avoir une valeur de type booléen (vrai ou faux), et indique que l'en-tête précédente doit être si ce type à être substitué ou ajouté à l'en-tête de l'existant déjà.

En ce qui concerne en-tête) est fonction headers_sent souvent utilisé () fonction, (qui à la suite retourne vrai en cas de succès l'envoi d'un en-tête et false sinon.

Considérez-têtes HTTP les plus courants.

Cache-control.

"Cache-control:" valeur

Intitulé commande la mise en cache des pages. En général, cette fonction est l'une des plus courantes dans l'utilisation des rubriques.

Cet en-tête peut être utilisé avec les valeurs suivantes:

* Non-cashe - Interdiction de mise en cache. Utilisé dans les pages fréquemment mises à jour et des pages avec du contenu dynamique. Son deysvtie comme une balise META "Pragma: no-cache".
* Public - la mise en cache de la résolution de page en tant que client local et le serveur proxy.
* Privée - Autoriser uniquement client de cache local.
* Max-âge - Activation de documents mis en cache dans le délai spécifié en secondes. header("Cache-control: private, max-age = 3600") /* Кеширование локальными клиентами и использование в течение 1 часа */ , max-age = header("Cache-control: private, max-age = 3600") /* Кеширование локальными клиентами и использование в течение 1 часа */

Expire.

"Expire:" HTTP jour

Régler la date et l'heure après laquelle le document est considéré comme obsolète. La date doit être spécifié dans le format suivant (en anglais):

Jour de la semaine, le nombre (2 chiffres) Mois (abbr.) Année heures (abbr.): Minutes: secondes GMT

Par exemple, vendredi, 9 janvier 2002 12:00:00 GMT

L'heure à cette fonction retourne format gmdate () comme suit:
echo gmdate("D, d MY H:i:s")."GMT";

Peut-être l'utilisation de l'en-tête HTTP pour désactiver la mise en cache. Pour ce faire, vous devez spécifier la date dans le passé.

Last-Modified.

"Last-Modified:" HTTP - jour

Indique la dernière date de modification du document. La date doit être spécifié dans le même format que dans le cas de l'en-tête Expires. Ce titre ne peut pas être utilisé pour les pages dynamiques, autant de serveurs (par exemple, Apache) pour ces pages font exposer la date de modification.

Peut-être faire une page toujours mise à jour:
header("Last-Modified: ".gmdate("D, d MY H:i:s")." GMT");

Localisation.

"Location:" une URL absolue

header utile qui redirige le navigateur vers l'adresse indiquée. Son effet est comparable à la balise META Refresh:
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=someURL">

Par exemple, le titre peut être utilisé comme suit:
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 et HTTP: cookie.



Dans la leçon précédente, nous avons discuté de la relation entre le protocole HTTP et le langage PHP sur les titres de niveau HTTP. Dans cette leçon, nous allons introduire encore un autre en-têtes HTTP spécifiques - cookie.

Que sont les cookies?
Le fait qu'il y avait un problème très sérieux dans le développement de www-technologies et l'introduction de langages de programmation Internet pour programmer les développeurs - comment garder les résultats de l'algorithme pour chaque utilisateur spécifique pendant une longue période? En soi, le protocole HTTP n'a aucun moyen de fixation des résultats des processus logiciels. Utilisation des sessions et ne sont pas une solution, car leur action est terminée immédiatement après la connexion au serveur.

Le problème a été résolu avec la mise en place du mécanisme de cookies (c.-à traduction de l'anglais - «cookies»). Les cookies ont une propriété remarquable - ils sont stockés sur le disque dur de l'utilisateur et peuvent y être stockés presque indéfiniment.

A ses cookies de coeur - ceux-ci sont des fichiers texte ordinaires qui sont stockés dans un répertoire spécial utilisé par le navigateur (généralement le dossier appelé Temporary Internet Files), et vous pouvez les voir en allant dans le répertoire (accès rapide à elle pour le navigateur IE via le Service des éléments de menu -> options Internet -> fichiers Internet temporaires -> Paramètres -> Afficher les fichiers).

mécanisme de mise en œuvre des cookies en PHP.
mécanisme de mise en œuvre des cookies représentés par une seule setcookie de fonction (). Comme cela est le cas avec les en-têtes HTTP, cette fonction doit être appelée avant d'envoyer des données au client distant, pas autorisés même les caractères "vides", à savoir l'espace, les sauts de ligne, et ainsi de suite.

La fonction a la syntaxe suivante:
setcookie(имя куки, значение, срок годности, информация о пути, домен, защищенность)

Tous les paramètres à l'exception du nom du cookie, sont facultatifs. Si le cookie est envoyé uniquement avec ce paramètre, il est immédiatement détruit par le client distant, de sorte que par lui-même cette option ne porte pas le trafic de données. biscuit complet faire les deux paramètres suivants: la valeur intrinsèque dans le cookie, et le temps auquel ce cookie peut être utilisé.

Valeur qui porte cookie peut être une chaîne de caractères ASCII. Par exemple, vous pouvez définir un cookie avec le nom et le prénom du visiteur, qu'il avait déjà conclu un champ de formulaire.
$data = $name."||".$surname;
setcookie("username", $data);


Notez que envoie des données doit être faite sous la forme d'une ligne, une tentative de lire le tableau des valeurs précédemment envoyé à rien de plomb.

Le Cookie, situé dans l'exemple ci-dessus, sera détruit immédiatement après la fermeture du navigateur de l'utilisateur que la durée de vie des cookies par défaut est mis à zéro. Pour changer cela, vous devez spécifier le troisième paramètre à expiration. La définition de ce paramètre peut être effectué de deux manières:

* Demandez otnostitelno validité de l'utilisation du temps (), à laquelle on ajoute le nombre de secondes que le stockage des cookies. Par exemple, pour déterminer le cookie pendant deux heures est nécessaire d'écrire: setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе setcookie("test 1", "это тестовая куки", time() + 3600 * 2); // 3600 - количество секунд в часе

* La deuxième façon - la tâche de la date absolue d'expiration du cookie. Il est installé à l'aide de la fonction mktime (), qui retourne une date précise pour la suppression des cookies. Si vous souhaitez définir le cookie à vie à minuit le 1er Septembre 2003, il est nécessaire de déterminer le cookie afin: setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003); les setcooikie("test 2", "куки с абсолютной датой удаления", mktime(0, 0, 0, 9, 1, 2003);

des moyens optionnels pour limiter le champ d'application du biscuit dans un certain répertoire. Et dans ce domaine comprend tous les chemins à partir de la valeur de ce paramètre. Par exemple:
setcookie("test 3, "", 0, "/mus");

Nous avons mis un cookie, passez une valeur de paramètre et le temps et la définition de la portée de toutes les façons qui commencent par la chaîne "/ MUS", qui est, ce qui inclut le répertoire "/ music /", et "/ musées /". Afin de déterminer le chemin, le chemin doit être complété par une barre oblique. C'est de limiter le répertoire cookie "/ MUS", il était nécessaire d'écrire dans le paramètre "/ MUS /".

Un autre paramètre optionnel est le paramètre déterminant le cookie dans un domaine spécifié. Et la valeur de ce paramètre "someserver.com" correspond uniquement au site avec l'adresse http://someserver.com , et la valeur ".someserver.com" correspondance déjà http://someserver.com et http: //mail.someserver. com , et http://my-someserver.com , qui est, tous les domaines se terminant par cette ligne.

Dernier paramètre à setcookie () indique que le cookie doit être envoyé via une connexion sécurisée (HTTPS). Ce paramètre est requis lorsque vous installez cookie avec la confidentialité des données.
setcookie("my_cookie", $value, time() + 3600 * 24 * 5, "/", ".myphp.dem.ru", 1);

Lecture cookie.
Appel à mettre en biscuit passe par son nom. Par exemple, en continuant avec l'exemple ci-dessus, vous pouvez lire le cookie comme suit:
echo "У вас сохранены следующие данные:<br>";
echo $my_cookie;


L'accès aux données stockées dans le cookie, peut également se produire à travers le tableau $ HTTP_COOKIE_VARS. Il est similaire à d'autres réseaux similaires, tels que $ HTTP_POST_VARS et d'autres, et contient toutes les valeurs ont été lues à partir du cookie.

Suppression de cookie.
Suppression de cookies fait l'envoi d'un nouveau cookie avec le nom enlevé sans aucun réglage supplémentaire.

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

Une application régulière.



Cette leçon est un peu ne rentre pas dans une chaîne logique de nos classes, et a été créé par "la pression du public", qui est, à la demande des lecteurs, et sera consacrée aux expressions et fonctions régulières de travailler avec eux. Probablement mes calculs, que l'article Alexander Grimalovskogo "Regular Expressions" sera suffisante pour comprendre le sujet avéré être faux.

Donc, dans l'espoir que vous avez lu l'article ci-dessus, nous commençons la leçon d'aujourd'hui.

Les expressions régulières elles-mêmes ne sont pas nouvelles, PHP prevnesennoy. Sous une forme ou une autre, ils ont été utilisés pendant un temps assez long et sont un mécanisme très puissant pour travailler avec les données de chaîne.

Une expression régulière est une sorte de modèle qui est utilisé pour différentes actions, en fonction de la fonction qui utilise une expression régulière. les caractères spéciaux sont utilisés pour spécifier un modèle.

Les fonctions fonctionnent avec des expressions régulières.
Il faut dire que les deux PHP a son propre mécanisme pour travailler avec des expressions régulières (POSIX), et emprunté à un autre serveur du langage de programmation Perl. Extérieurement, ils sont faciles à distinguer par les noms de fonctions: la première fonction du type commence par les caractères "ereg", et le second - "preg".

Cependant, les noms de fonctions ne sont pas la seule différence entre eux. Tout d'abord, elles contiennent quelques différences dans la syntaxe des expressions régulières. Donc, Perl comme Funk nécessite délimiteurs: $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;

Comme vous pouvez le voir, nous utilisons la fonction de remplacement de la chaîne en utilisant des expressions régulières. Faites attention à la fonction de modèle preg_replace: comme délimiteur barres apparaissent ici, et après le délimiteur de fermeture doit être le modificateur i, ce qui indique que le modèle est insensible à la casse. Le même effet est obtenu en utilisant des fonctions POSIX avec le suffixe i (eregi_replace).

fonction preg_replace dans l'exemple représenté le soi-disant «cupidité» et couvrait toute la ligne qui commence par la lettre "p" et se termine par "e". Faire la fonction est pas modificateur "gourmand" aide U.

Fonction trouver la distance minimale entre les lettres «p» et «f» et le remplacer par la chaîne spécifiée.

fonction eregi_replace a également montré la «cupidité», mais changer cet ordre ne peut pas être, comme dans POSIX fonction fournie par l'utilisation de modificateurs.

Exemples d'expressions régulières.

Le temps de transfert à l'heure standard Unix.

Supposons que nous ayons une base de données ou d'autres données source sont stockées dans le format suivant:
heures: minutes: secondes - jour.mois.année
Mais pour une raison quelconque (par exemple, fait refonte du site), nous avons besoin d'afficher la date sous la forme suivante:
heures jour.mois.année: minutes

Comme vous pouvez l'imaginer, faire manuellement ce - fou, de sorte que nous écrivons un script qui sera la première date de plomb de scène pour la forme heures: minutes: secondes mois / jour / année, puis utiliser strtotime () traduit cet enregistrement dans les fonctions de temps UNIX standard que nous serons en mesure d'afficher que vous le souhaitez.

Le plus intéressant - la première étape. Il est quelque chose que nous sommes intéressés à l'utilisation des expressions régulières. $str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату
$str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\\2/\\1/\\3", $str);
; $str = "12:57:43 - 10.03.02"; // $str содержит некоторую дату
$str = preg_replace("!(\d{2})\.(\d{2})\.(\d{2})!", "\\2/\\1/\\3", $str);

Avec l'aide de l'expression régulière nous changeons le format d'enregistrement du jour, le mois et l'année, chaque élément qui sépare les crochets. Dans le second paramètre de la fonction, on se réfère aux résultats de conformité entre parenthèses. Voici comment cela fonctionne:

    \\ 0 - contient une chaîne correspondant à l'ensemble du motif (dans notre exemple, "03/10/02").
    \\ 1 - contient seulement des symboles correspondant au premier élément, entre les crochets (par exemple "10").
    \\ 2 - contient des symboles correspondant à seulement le deuxième élément, entre les crochets (par exemple "03").
    et ainsi de suite.


A ce stade, nous obtenons une date "12:57:43 - 10/03/02." Maintenant, nous amener à la fin.
$str = str_replace("-", "", $str); // вырезаем знак "-"
$time = strtotime($str);


Maintenant, vous pouvez utiliser le temps variable $, comme il lui plaît.