Skip to content

Commit

Permalink
Update master to output generated at ce7de73
Browse files Browse the repository at this point in the history
  • Loading branch information
abenevaut committed Feb 10, 2024
1 parent 5d0769a commit 7cc9c65
Show file tree
Hide file tree
Showing 14 changed files with 2,228 additions and 661 deletions.
18 changes: 9 additions & 9 deletions README.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"php": "^8.0.2"
},
"require-dev": {
"abenevaut/laravel-one": "^0.2"
"abenevaut/laravel-one": "^0.3"
},
"autoload-dev": {
"psr-4": {
Expand Down
2,384 changes: 1,734 additions & 650 deletions composer.lock

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
| Title block | |
|-------------|------------|
| created at | 2023-01-01 |
| updated at | 2023-01-01 |

Dans un système d'exploitation (_OS, pour operating system_), l'environnement est une suite de variables qui définit une configuration de l'OS et qui est accessible à l'ensemble des logiciels installé sur cet OS.

Vous pouvez personnaliser ces variables à l'échelle de l'OS ou à l'échelle de son terminal.

> Si vous souhaitez essayer, je vous recommande de vérifier la documentation de votre OS ainsi que celle de votre terminal
Les variables les plus populaires sont généralement:

- `PATH` qui indique les repertoires ou sont stockés l'ensemble des logiciels de l'OS
- `USER` qui indique l'utilisateur connecté
- `HOME` qui indique le repertoire principale de l'utilisateur connecté
- `PWD` (_print working directory_) qui indique le repertoire courant où l'utilisateur connecté se situe

Tous les logiciels qui s'executer sur l'OS peuvent injecter des variables d'environments qui seront accessibles durant l'execution du logiciel (la session du logiciel) et accessible dans la stack memoire de ce logiciel. Par exemple, un terminal pourra ajouter des variables d'environments qui seront accessibles depuis le terminal par les logiciels exécutés dans celui-ci.

> **Environment variables** are variables that are available system-wide and are inherited by all spawned child processes and shells.
>
> **Shell variables** are variables that apply only to the current shell instance. Each shell such as `zsh` and `bash`, has its own set of internal shell variables.
>
> https://linuxize.com/post/how-to-set-and-list-environment-variables-in-linux/
1. Windows

- https://docs.oracle.com/en/database/oracle/machine-learning/oml4r/1.5.1/oread/creating-and-modifying-environment-variables-on-windows.html#GUID-DD6F9982-60D5-48F6-8270-A27EC53807D0
- sysdm.cpl
- dif cmd / powershell
- msys2/bash ?

2. Linux / Mac

- with zsh https://linuxhint.com/set-environment-variable-zsh/
- with bash
- `/etc/environment`

# Resources

- https://kinsta.com/fr/base-de-connaissances/variables-environnement/#questce-quune-variable-denvironnement-
88 changes: 88 additions & 0 deletions readme/2023‐01‐12-dotenv-environment-management-on-laravel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
| Logs | |
|------------|------------|
| created at | 2023-01-12 |
| updated at | 2023-01-12 |

# Résumé

Cet article présente le cadre d'utilisation du fichier DotEnv (_.env_) disponible sur Laravel pour configurer votre application avec des variables d'environements fournies par la machine qui l'heberge.

# Préambule

[Create and modify environment variables on operating system](/abenevaut.dev/abenevaut.dev/Articles%20Staging/Create%20and%20modify%20environment%20variables%20on%20operating%20system.md)

Tous les logiciels qui se placent entre votre OS et votre code, notamment pour les languages de scripts (PHP, Python etc..), peuvent eux aussi injecter des variables d'environments. C'est le cas pour NGINX et Apache2.

- [Create and modify environment variables on NGINX](/abenevaut.dev/abenevaut.dev/Articles%20Staging/Create%20and%20modify%20environment%20variables%20on%20NGINX.md)
- [Create and modify environment variables on Apache2](/abenevaut.dev/abenevaut.dev/Articles%20Staging/Create%20and%20modify%20environment%20variables%20on%20Apache2.md)

# L'implémentation Laravel

Laravel exploite la librairie [vlucas/phpdotenv](https://github.com/vlucas/phpdotenv) qui a la fonction d'aller chercher la valeur d'une variable d'environnement et dont l'utilisation a été rendu très simple grâce à la classe `Illuminate\Support\Env` et à la fonction `env()` (qui exploite la classe `Env`).

Ainsi, la fonction `env()` va:

- tenter de trouver une variable dans le fichier `.env`
- si elle existe, la fonction vous retournera sa valeur trouvée dans le `.env`
- si elle n'existe pas
- va tenter de trouver cette variable dans l'environnement de l'OS
- si elle existe, la fonction vous retournera sa valeur fournie par l'OS
- si elle n'existe pas, vous retournera `null`

En cas de recherche infructueuse, la fonction vous permet d'ajouter une valeur par défaut qui vous sera alors retournée.

```javascript
function env($key, $default = null);
```

Pour renseigner des variables dans votre fichier DotEnv, la syntaxe est la suivante:

```javascript
MY_VAR = MY_VALUE;
APP_NAME = "My Application";
BOT_NAME = "My Bot";
```

!! Les variables sont en majuscule et les espaces combles par des underscores ("\_"), cette syntaxe est inspire de celle utilisee sur les systemes d'exploitations.
!! Notez l'utilisation des simples ou doubles guillemets lorsqu'une valeur contient des espaces. Lorsque vous récupérerez la variable, elle sera disponible sans ces guillemets.

# L'utilisation

Créons un nouveau projet Laravel via composer, comme suit:

```javascript
composer create-project laravel/laravel example-app
```

Le fichier composer de votre nouveau projet (`example-app/.composer.json`) a deux instructions post création:

- `post-root-package-install` qui va copié le fichier `.env.example` en un fichier `.env`
- `post-create-project-cmd` qui va configurer la variable d'env `APP_KEY`

!! Le fichier `.env.example` sert de model pour la construction de votre fichier `.env`; je vous conseils de maintenir à jour ce fichier et de le documenter pour que votre application puisse fonctionner correctement lorsque vous l'installez sur un nouvel environment, comme sur un nouveau serveur de production par exemple.

!! Plus d'information sur l'APP_KEY ici
!! - <https://laravel.com/docs/master/encryption#configuration>
!! - <https://tighten.com/insights/app-key-and-you/>

!! À ce stade, vous pouvez faire une pause dans la lecture de cette article et commencer à jouer avec votre fichier DotEnv. Pour les plus curieux, paramètres quelques variables d'environnements sur votre machine 😉

Jusqu'ici nous avons décortiquer le fonctionnement de l'utilisation de ce fichier, et vous avez maintenant assez de théorie pour faire quelques tests sur votre OS et votre projet Laravel avec le fichier DotEnv mais dans le fond, à quoi sert-il ?

Sans trop de surprise, **c'est un fichier de configuration** qui permettra le paramètrage de votre application. Les différences notables avec les fichiers de configurations que vous rencontrerez dans le repertoire `config/` sont:

- ce fichier est destiné a etre une passerelle entre votre application et le serveur qui la sert
- ce fichier n'est pas obligatoire et peut etre remplace par des variables d'environments du serveur qui la sert ou encore des variables d'environments injectees par un service d'hebergement cloud (comme laravel vapor et laravel forge)
- ce fichier n'a pas de "scope", il n'y a qu'un fichier d'environement alors qu'il peut exister une infinite de fichier de configuration
- ce fichier n'est generalement pas commite sur les gestionnaires de versions (GIT etc..) ainsi les informations qu'il contient peuvent etre des donnees sensibles comme des clefs d'API pour un service que vous payez
- Si vous souhaitez tout de meme commit ce fichier, il est possible de l'encrypter pour qu'il soit indechiffrable sur votre gestionnaire de version <https://blog.laravel.com/laravel-new-environment-encryption-commands>
- ce fichier permet l'isolation entre les environements de votre application ( `local` pour le developement et les tests et `production` pour votre app en ligne) des donnees qui ne sont attachees qu'a un environement precis pour assurer par exemple que les donnees de tests ne seront pas transmisent a une API de production

# Resources

- https://laravel.com/docs/master/installation#environment-based-configuration
- https://laravel.com/docs/master/configuration
- https://laravel.com/docs/master/encryption#configuration
- https://blog.laravel.com/laravel-new-environment-encryption-commands
- https://github.com/vlucas/phpdotenv
- https://tighten.com/insights/app-key-and-you/
74 changes: 74 additions & 0 deletions readme/2023‐06‐02-compile-PHP-on-windows.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
| Logs | |
|------------|------------|
| created at | 2023-06-02 |
| updated at | 2023-06-02 |

# Le problème

Nous utilisons l’extension PHP “YAF” <https://pecl.php.net/package/yaf> qui manque de support sur PHP 8.2.

Nous souhaitons soit:

- réussir a compiler une version de YAF 3.3.5 pour PHP 8.2 (soit une dll fonctionnel sur PHP 8.2)
- réussir a compiler une version de PHP 8.2 qui embarquerai l’extension YAF 3.3.5

La compilation de YAF doit se faire a partir des sources de la PR: <https://github.com/laruence/yaf/pull/579> qui fixe la compatibilité de YAF pour PHP 8.2

# Prérequis

- les sources PHP de sont disponible ici <https://github.com/php/php-src> **mais seront récupérée d’une autre manière**

Contexte de distribution de PHP:

- les livrables officiels PHP sont fournis ici <https://windows.php.net/download/>, on trouve:
- la distribution compile: “Zip“
- une version est proposée en plusieurs format
- thread safe (TS) / no thread safe (NTS)
- le thread safe est utilise lorsque le serveur qui invoque PHP est multi-threaded (exemple Apache MPM Worker)
- nginx, IIS, utiliser php en ligne de commande, utiliser php en CGI… ne nécessite pas l’utilisation du thread safe
- x64 ou x86 : l’architecture de la machine sur laquelle a ete compile mais egalement l’architecture de la machine qui va utiliser le binaire PHP (sur windows php.exe etc..)
- une information important va aussi nous guider “VS16“ qui apparait dans le titre du package
- cette ligne indique avec quelle version de visual studio PHP a ete compile; Nous utiliserons la meme version de visual studio pour nos compilations → Si cela n’est pas respecter des warning apparaitront dans les logs PHP expliquant qu’il ne parvient pas a charger certaines librairies car un numero de version (sans certitude l’id du compilateur) n’est pas similaire entre PHP et l’extention
- le code source: “**Download source code**
- un sous-package “**Development package (SDK to develop PHP extensions)**", ce package met a disposition un utilitaire nommé “phpize.bat“ qui nous sera utile pour la compilation de YAF

Avec ces informations, nous pouvons déterminer que:

- nous souhaitons compiler YAF 3.3.5 via la PR <https://github.com/laruence/yaf/pull/579>
- nous allons poursuivre l’utilisation de PHP NTS x64
- il nous est impose d’utiliser VS16 (visual studio 2019) pour la compilation
- le package redistribuable est disponible ici <https://learn.microsoft.com/fr-FR/cpp/windows/latest-supported-vc-redist?view=msvc-170#visual-studio-2015-2017-2019-and-2022>

# La mise en œuvre

- la team PHP windows, met a disposition un sdk pour faciliter la compilation <https://github.com/php/php-sdk-binary-tools>
- a bien lire <https://github.com/php/php-sdk-binary-tools/tree/master#requirements>
- exemple d’utilisation pour compiler PHP <https://github.com/php/php-sdk-binary-tools/tree/master#basic-usage-example>
- Choisir le tag nécessaire pour la compilation (php8.2 => php-sdk-2.2.0)
- On se note dans un coin phpsdk-vs16-x64.bat
- see also <https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2>

# Mise en place de l’environnement de compilation

git clone https://github.com/php/php-sdk-binary-tools.git c:\php-sdk
cd c:\php-sdk
git checkout php-sdk-2.2.0
// On invoque
.\phpsdk-vc16-x64.bat
// telecharge les resources necessaire a la compilation dans `c:\php-sdk\phpmaster\vs16\x64\deps\`
phpsdk_buildtree phpmaster

Télécharger “**Development package (SDK to develop PHP extensions)**” de la version 8.2.6 et l’extraire dans C:\\php-8.2.6-devel-vs16-x64

# Comment compiler YAF

- télécharger les sources de YAF de la PR <https://github.com/remicollet/php-yaf/tree/issue-php82>
- extraire les sources a ce path cd c:\\php-sdk\\phpmaster\\vs16\\x64


// On invoque le SDK
.\phpsdk-vc16-x64.bat
cd c:\php-sdk\phpmaster\vs16\x64\yaf
C:\php-8.2.6-devel-vs16-x64\phpize.bat
configure --enable-yaf
nmake
27 changes: 27 additions & 0 deletions readme/2023‐08‐01-PHP-request-lifecycle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
| Logs | |
|------------|------------|
| created at | 2023-08-01 |
| updated at | 2023-08-01 |

# L'explication technique

This cycle in PHP describes the way that a browser and a web server communicate to process user requests. It may seem simple, but it’s important to keep it in mind while developing with PHP because things like header redirection, output buffering and setting cookies are all affected by this cycle.

<https://drive.google.com/file/d/147y_6SgHF2yOiJP7IFoGKg0ct7OOkYkn/view?usp=sharing>

[\[https://drive.google.com/file/d/147y_6SgHF2yOiJP7IFoGKg0ct7OOkYkn/view?usp=sharing\]](https://drive.google.com/file/d/147y_6SgHF2yOiJP7IFoGKg0ct7OOkYkn/view?usp=sharing)

1. To start with, we have our browser and the web server.
2. The browser makes a request to the web server, e.g. you typed in the domain of a site.
3. On that web server, a software will need to intercept that request and that software is called “Apache”.
4. Apache then sees the request and will search the file that corresponds to it.
5. Afterwards, it then goes to the file system and looks for that file. When found, it checks if that file has a `.php` extension and if there is, the PHP code in that file will be processed.
6. During the processing, Apache may need to go back and forth to the database a couple of times, it may be to request some information from the database, store information in the database, etc.
7. Once the processing is done, there’s one final step in which it assembles the HTML markup that’s going to be returned and then sends that back to the browser and that’s the response that the user sees.

Source: <https://kennyalmendral.github.io/php-request-response-cycle/>

# Pour aller plus loin

- Approche PHP Lifecycle en C: <https://www.phpinternalsbook.com/php7/extensions_design/php_lifecycle.html>
- Laravel Request lifecycle <https://laravel.com/docs/master/lifecycle>
Loading

0 comments on commit 7cc9c65

Please sign in to comment.