Initialisation
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
====== PHP 8.2, JSON est inclus dans PHP core ======
|
||||
{{ :dummy.png?75x75|}}
|
||||
|
||||
Depuis la version 8.2 de PHP, la fonctionnalité JSON est incluse dans le cœur de PHP. Cela signifie que vous n'avez plus besoin d'installer une extension externe pour manipuler des données JSON en PHP.
|
||||
|
||||
La prise en charge native de JSON dans PHP 8.2 offre de nombreux avantages, notamment une meilleure performance, une meilleure sécurité et une syntaxe plus simple pour la manipulation de données JSON.
|
||||
|
||||
Pour utiliser la fonctionnalité JSON de PHP 8.2, vous pouvez utiliser les fonctions intégrées de PHP telles que **json_encode()** pour convertir des données PHP en JSON, et **json_decode()** pour convertir des données JSON en PHP. Il existe également d'autres fonctions JSON disponibles dans la documentation de PHP pour vous aider à manipuler les données JSON en PHP.
|
||||
|
||||
Voici des exemples de la façon dont vous pouvez utiliser les fonctions **json_encode()** et **json_decode()** en PHP 8.2.
|
||||
|
||||
===== Exemple d'utilisation de json_encode() =====
|
||||
|
||||
La fonction **json_encode()** permet de convertir un tableau PHP en chaîne de caractères JSON :
|
||||
|
||||
<code PHP>
|
||||
|
||||
$data = array(
|
||||
'name' => 'John Doe',
|
||||
'email' => 'johndoe@example.com',
|
||||
'age' => 30
|
||||
);
|
||||
|
||||
$json = json_encode($data);
|
||||
|
||||
echo $json; // Affiche : {"name":"John Doe","email":"johndoe@example.com","age":30}
|
||||
</code>
|
||||
|
||||
Dans cet exemple, nous avons créé un tableau PHP contenant des informations sur une personne, puis nous avons utilisé la fonction **json_encode()** pour convertir ce tableau en une chaîne de caractères JSON.
|
||||
|
||||
|
||||
===== Exemple d'utilisation de json_decode() =====
|
||||
|
||||
La fonction **json_decode()** permet de convertir une chaîne de caractères JSON en un objet ou un tableau PHP :
|
||||
|
||||
<code PHP>
|
||||
|
||||
$json = '{"name":"John Doe","email":"johndoe@example.com","age":30}';
|
||||
|
||||
$data = json_decode($json);
|
||||
|
||||
echo $data->name; // Affiche : John Doe
|
||||
echo $data->email; // Affiche : johndoe@example.com
|
||||
echo $data->age; // Affiche : 30
|
||||
</code>
|
||||
|
||||
Dans cet exemple, nous avons créé une chaîne de caractères JSON contenant des informations sur une personne, puis nous avons utilisé la fonction **json_decode()** pour convertir cette chaîne de caractères en un objet PHP. Nous pouvons ensuite accéder aux propriétés de cet objet en utilisant la syntaxe ''->''.
|
||||
|
||||
--- //[[user:cedricabonnel]]//
|
||||
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
====== Afficher l'heure en français ======
|
||||
{{ :informatique:langage:php:php-lc_time-setlocale-strftime.png?nolink&75x75|PHP > Afficher l'heure en français}}
|
||||
|
||||
Cette fonction est OBSOLÈTE à partir de PHP 8.1.0. Il est fortement recommandé de les éviter.
|
||||
|
||||
|
||||
<panel type="default" title="Code">
|
||||
<code PHP [enable_line_numbers="true", start_line_numbers_at="1"]>
|
||||
setlocale(LC_TIME, 'fr_FR');
|
||||
echo strftime('%A %d %B %Y, %H:%M');
|
||||
</code>
|
||||
</panel>
|
||||
|
||||
|
||||
<panel type="default" title="Résultat">
|
||||
<PHP>
|
||||
setlocale(LC_TIME, 'fr_FR');
|
||||
echo strftime('%A %d %B %Y, %H:%M');
|
||||
</PHP>
|
||||
</panel>
|
||||
18
data/pages/informatique/langage/php/composer.txt
Normal file
18
data/pages/informatique/langage/php/composer.txt
Normal file
@@ -0,0 +1,18 @@
|
||||
====== Composer ======
|
||||
{{ :informatique:langage:php:logo-composer-transparent.png?75x75|Composer}}
|
||||
|
||||
|
||||
===== - Installer =====
|
||||
|
||||
<code BASH>
|
||||
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
|
||||
|
||||
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
|
||||
|
||||
php composer-setup.php
|
||||
|
||||
php -r "unlink('composer-setup.php');"
|
||||
|
||||
sudo mv composer.phar /usr/local/bin/composer
|
||||
</code>
|
||||
|
||||
20
data/pages/informatique/langage/php/index.txt
Normal file
20
data/pages/informatique/langage/php/index.txt
Normal file
@@ -0,0 +1,20 @@
|
||||
====== PHP ======
|
||||
|
||||
{{ :informatique:langage:711px-php-logo.svg.png?nolink&300x|Langage PHP}}
|
||||
|
||||
|
||||
===== Les pages =====
|
||||
|
||||
<nav stacked="true" fade="true">
|
||||
<nspages . -h1 -nbCol=1 -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
|
||||
</nav>
|
||||
|
||||
===== Les sous-catégories =====
|
||||
|
||||
<nav stacked="true" fade="true">
|
||||
<nspages . -h1 -nbCol=1 -noPages -subns -textNS=" " -textPages=" " -simpleList -exclude:cookie: -exclude:user: -exclude:playground: -exclude:[sidebar index start rightsidebar navbar topheader header help pageheader pagefooter legal-notices footer 404]>
|
||||
</nav>
|
||||
|
||||
|
||||
~~NOTOC~~
|
||||
~~NOCACHE~~
|
||||
@@ -0,0 +1,80 @@
|
||||
====== Afficher les dossiers courants ======
|
||||
{{ :informatique:langage:php:pasted:20230317-002026.png?300|Script PHP}}
|
||||
|
||||
Voici un script en PHP qui scanne tous les dossiers de l'arborescence courante (à l'exception des dossiers cachés) et affiche des liens vers ces dossiers dans une page HTML5. Le rendu utilise Bootstrap pour un style plus élégant.
|
||||
|
||||
<WRAP clear/>
|
||||
|
||||
|
||||
<code PHP>
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Liste des dossiers</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Liste des dossiers</h1>
|
||||
<?php
|
||||
$dir = '.';
|
||||
$folders = array_diff(scandir($dir), array('..', '.', '.DS_Store'));
|
||||
foreach ($folders as $folder) {
|
||||
if (is_dir($folder)) {
|
||||
echo '<p><a href="'.$folder.'">'.$folder.'</a></p>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</code>
|
||||
|
||||
Ce script commence par inclure les en-têtes HTML nécessaires, notamment la feuille de style Bootstrap. Ensuite, il utilise la fonction PHP **scandir**() pour récupérer la liste de tous les fichiers et dossiers dans le répertoire courant. La fonction **array_diff**() est utilisée pour exclure les éléments spéciaux tels que ''..'', ''.'' et ''.DS_Store'' (sur Mac). Ensuite, le script parcourt tous les dossiers de la liste avec une boucle **foreach** et utilise la fonction **is_dir**() pour vérifier s'il s'agit bien d'un dossier. Si c'est le cas, il affiche un lien vers ce dossier avec la fonction **echo**.
|
||||
|
||||
===== Evolution =====
|
||||
|
||||
Pour afficher le titre **title** du fichier index.html contenu dans chaque dossier scanné, vous pouvez utiliser la fonction **file_exists**() pour vérifier si le fichier existe et la fonction **file_get_contents**() pour obtenir le contenu du fichier et extraire le titre **title**. Voici le code mis à jour :
|
||||
|
||||
<code PHP>
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Liste des dossiers</title>
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<h1>Liste des dossiers</h1>
|
||||
<?php
|
||||
$dir = '.';
|
||||
$folders = array_diff(scandir($dir), array('..', '.', '.DS_Store'));
|
||||
foreach ($folders as $folder) {
|
||||
if (is_dir($folder)) {
|
||||
$index_file = $folder.'/index.html';
|
||||
if (file_exists($index_file)) {
|
||||
$content = file_get_contents($index_file);
|
||||
if (preg_match('/<h1>(.*?)<\/h1>/', $content, $matches)) {
|
||||
$title = $matches[1];
|
||||
} else {
|
||||
$title = 'Titre non trouvé';
|
||||
}
|
||||
} else {
|
||||
$title = 'Fichier index.html non trouvé';
|
||||
}
|
||||
echo '<p><a href="'.$folder.'">'.$folder.'</a> - '.$title.'</p>';
|
||||
}
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</code>
|
||||
|
||||
Ce script commence par inclure les mêmes en-têtes HTML que précédemment. Ensuite, il utilise les mêmes fonctions pour récupérer la liste des dossiers à scanner.
|
||||
|
||||
Pour chaque dossier, le script vérifie si un fichier **index.html** existe en utilisant la variable **$index_file** qui contient le chemin complet vers le fichier. Si le fichier existe, le script utilise la fonction **file_get_contents**() pour obtenir le contenu du fichier et utilise une expression régulière pour extraire le texte entre les balises ''<title>''. Si le titre **title** est trouvé, il est stocké dans la variable **$title**, sinon la variable contient le texte "**Titre non trouvé**". Si le fichier **index.html** n'existe pas, la variable **$title** contient le texte "**Fichier index.html non trouvé**".
|
||||
|
||||
Enfin, le script affiche un lien vers le dossier ainsi que le titre **title** récupéré (ou un message d'erreur si le fichier index.html n'a pas été trouvé).
|
||||
44
data/pages/informatique/langage/php/simuler-tail-en-php.txt
Normal file
44
data/pages/informatique/langage/php/simuler-tail-en-php.txt
Normal file
@@ -0,0 +1,44 @@
|
||||
====== Simuler tail en PHP ======
|
||||
{{ :dummy.png?75x75|Simuler tail en PHP}}
|
||||
|
||||
{{tag>php}}
|
||||
|
||||
<code PHP>
|
||||
<?php
|
||||
$handle = popen("tail -f /etc/httpd/logs/access.log 2>&1", 'r');
|
||||
while(!feof($handle)) {
|
||||
$buffer = fgets($handle);
|
||||
echo "$buffer<br/>\n";
|
||||
ob_flush();
|
||||
flush();
|
||||
}
|
||||
pclose($handle);
|
||||
</code>
|
||||
|
||||
|
||||
<code PHP>
|
||||
function follow($file)
|
||||
{
|
||||
$size = 0;
|
||||
while (true) {
|
||||
clearstatcache();
|
||||
$currentSize = filesize($file);
|
||||
if ($size == $currentSize) {
|
||||
usleep(100);
|
||||
continue;
|
||||
}
|
||||
|
||||
$fh = fopen($file, "r");
|
||||
fseek($fh, $size);
|
||||
|
||||
while ($d = fgets($fh)) {
|
||||
echo $d;
|
||||
}
|
||||
|
||||
fclose($fh);
|
||||
$size = $currentSize;
|
||||
}
|
||||
}
|
||||
|
||||
follow("file.txt");
|
||||
</code>
|
||||
@@ -0,0 +1,104 @@
|
||||
====== Programmer un site Internet en PHP ======
|
||||
{{ :dummy.png?75x75|}}
|
||||
|
||||
===== Avertissements =====
|
||||
|
||||
Bien que **Composer** soit un outil puissant pour les dépendances et les classes externes, certaines personnes préfèrent toujours créer leurs propres classes pour des raisons telles que :
|
||||
|
||||
* **Contrôle sur le code** : En créant ses propres classes, on peut contrôler le code source et le personnaliser pour répondre à ses besoins spécifiques.
|
||||
|
||||
* **Meilleure compréhension** : En créant ses propres classes, on peut mieux comprendre comment elles fonctionnent et les adapter à ses propres projets.
|
||||
|
||||
* **Prise en charge des anciens projets** : Si on a déjà utilisé ses propres classes pour la gestion de la base de données ou d'autres tâches dans d'autres projets, il peut être plus facile de les utiliser dans un nouveau projet plutôt que d'adopter un nouvel outil.
|
||||
|
||||
* **Exigences personnalisées** : Certaines personnes peuvent avoir des exigences spécifiques qui ne sont pas prises en charge par les bibliothèques externes existantes. La création de leurs propres classes leur permet de satisfaire ces besoins.
|
||||
|
||||
Le choix entre l'utilisation de **Composer** et la création de ses propres classes dépend des besoins et des préférences individuelles.
|
||||
|
||||
<WRAP center round important 60%>
|
||||
en cours de rédaction
|
||||
</WRAP>
|
||||
|
||||
|
||||
===== Structure des dossiers d un projet php =====
|
||||
|
||||
Dans la plupart des cas, il est recommandé de créer un dossier **public** pour séparer les fichiers publics du code source. Le dossier **public** devrait contenir les fichiers accessibles directement via un navigateur web, tels que les fichiers **HTML**, **JavaScript**, **CSS** et **images**. Les autres fichiers, tels que les **classes PHP**, les **fichiers de configuration** et les **fichiers d'enregistrement**, devraient être placés dans un dossier séparé pour une meilleure sécurité.
|
||||
|
||||
Pour structurer un projet PHP avec des **classes**, **JavaScript** et **CSS**, voici une structure de dossiers suggérée :
|
||||
|
||||
<code>
|
||||
web
|
||||
|-- public
|
||||
| |-- css
|
||||
| | |-- style.css
|
||||
| |-- js
|
||||
| | |-- script.js
|
||||
| |-- images
|
||||
| | |-- image1.jpg
|
||||
| | |-- image2.png
|
||||
| |-- index.php
|
||||
|-- classes
|
||||
| |-- class1.php
|
||||
| |-- class2.php
|
||||
|-- config
|
||||
| |-- config.php
|
||||
|-- tests
|
||||
| |-- Database
|
||||
| |-- DatabaseConnectorTest.php
|
||||
|-- logs
|
||||
| |-- application.log
|
||||
|-- vendor
|
||||
| |-- ..
|
||||
|-- composer.json
|
||||
|-- .env
|
||||
</code>
|
||||
|
||||
Dans un projet PHP, les dossiers **classes**, **css** et **js** peuvent être utilisés pour organiser les fichiers associés à ces technologies.
|
||||
* ''classes/'' : ce dossier peut contenir toutes les classes PHP utilisées pour la logique de l'application.
|
||||
* ''css/'' : ce dossier peut contenir tous les fichiers CSS pour la mise en forme de l'interface utilisateur.
|
||||
* ''js/'' : ce dossier peut contenir tous les fichiers JavaScript pour la logique client-side et l'interaction utilisateur.
|
||||
* ''images/'' : ce dossier devrait être placé dans le dossier public pour être accessible directement via un navigateur web. Il contient les images.
|
||||
|
||||
|
||||
Il est courant de placer les fichiers de configuration dans un dossier nommé ''config'' et les fichiers d'enregistrement dans un dossier nommé ''logs''.
|
||||
|
||||
Cependant, la structure de dossiers dépend fortement des besoins spécifiques de chaque projet, il n'y a donc pas de solution universelle. Il est important de choisir une structure de dossiers qui facilite la maintenance et la compréhension de votre projet pour vous et les autres développeurs qui peuvent travailler dessus.
|
||||
|
||||
===== Créer un autoloader pour les classes =====
|
||||
|
||||
Un **autoloader** est une fonction en PHP qui charge automatiquement les classes nécessaires à l'exécution du code. Vous pouvez créer un **autoloader** en définissant une fonction qui inclura le fichier associé à une classe spécifique lorsque cette classe est utilisée pour la première fois.
|
||||
|
||||
Voici un exemple d'implémentation d'un **web/autoload** :
|
||||
<code PHP autoload.php>
|
||||
<?php
|
||||
spl_autoload_register(function ($className) {
|
||||
$classFile = 'classes/' . str_replace('\\', '/', $className) . '.php';
|
||||
require_once $classFile;
|
||||
});
|
||||
</code>
|
||||
|
||||
Cet exemple utilise la fonction ''spl_autoload_register'' de PHP pour définir l'**autoloader**. La fonction ''spl_autoload_register'' accepte une fonction anonyme qui sera appelée chaque fois qu'une classe non trouvée sera utilisée.
|
||||
|
||||
La fonction anonyme convertit le nom de la classe en un nom de fichier en remplaçant les antislashs (\) par des slashs (/) et ajoute l'extension ''.php'' pour former le nom du fichier associé à la classe. Enfin, le fichier associé est inclu en utilisant ''require_once'' précédé du chemin pour accéder au classes (''/classes'').
|
||||
|
||||
Ce code suppose que les noms de classes correspondent aux noms de fichiers et que les classes sont rangées dans des dossiers hiérarchiques correspondant à leur **namespace**. Il peut être nécessaire de personnaliser cette implémentation en fonction de la structure de dossiers de votre projet.
|
||||
|
||||
|
||||
<code PHP index.php>
|
||||
<?php
|
||||
|
||||
// Chargement de l'autoloader
|
||||
require_once '../autoload.php';
|
||||
|
||||
// Utilisation des classes
|
||||
$object = new MyClass();
|
||||
|
||||
</code>
|
||||
|
||||
===== Créer un fichier de configuration =====
|
||||
|
||||
===== Créer des fichiers de log =====
|
||||
|
||||
===== Créer une connexion à la base de données =====
|
||||
|
||||
--- //[[user:cedricabonnel]], [[user:CPT]] //
|
||||
@@ -0,0 +1,17 @@
|
||||
====== Utiliser PHP en ligne de commande ======
|
||||
{{ :dummy.png?75x75|Nom de la section}}
|
||||
{{tag>php}}
|
||||
|
||||
===== PHP =====
|
||||
|
||||
La commande PHP, une fois validée, attendra du code PHP. Il faudra indiquer la code de fin de fichier (EOF, <kbd>Ctrl</kbd> + <kbd>D</kbd>) pour que le code PHP s’exécute.
|
||||
|
||||
{{:informatique:pasted:20220320-063404.png}}
|
||||
|
||||
===== PHP -r =====
|
||||
|
||||
On peut utiliser l'option ''-r'', qui execute le code PHP sans utiliser les tags ''<? ... ?>''
|
||||
|
||||
<code>
|
||||
php -r 'echo date("c");'
|
||||
</code>
|
||||
Reference in New Issue
Block a user