http(s)://example.com/hello
)Apache dans une VM
Si plusieurs requêtes de plusieurs clients différents au même moment, même programme exécuté plusieurs fois en parallèle
Exécution :
ou
Obsolète !
PHP « derrière » Apache, avec php-fpm
Exemple: avec FTP sur serveur Apache + PHP + SGBD
Git push vers un hébergement Cloud Platform as a Service
Exemple: avec commande symfony
CLI sur platform.sh
Modèle de programmation événementielle :
POST
)0
ou != 0
Construction de la Réponse HTTP
0 |
⇒ | 200 |
!= 0 |
⇒ | 5xx |
stdout
) telle-quelle dans réponse HTTP : attention au format
stderr
) : dans les logs du serveur ?Démarrage :
php -S localhost:8000 -t public/
public/
, (ou par défaut, par public/index.php
)Exemples :
URL | Programme | Args |
---|---|---|
http://localhost:8000/test.php |
public/test.php |
|
http://localhost:8000/test.php?hello |
public/test.php |
hello |
http://localhost:8000/ |
public/index.php |
|
http://localhost:8000/hello |
public/index.php |
hello |
http://localhost:8000/index.php?hello |
public/index.php |
hello |
class Application {
public run() {
//...
$command = new ListTodosCommand();
$res = $command->execute();
Identique dans beaucoup de systèmes de programmation d’interfaces (GUI, HTTP, …) :
Réception d’une requête HTTP => appel de méthode
Appel de méthodes dans une classe conçue pour gérer des actions (HTTP) sur des ressources (Web)
Patron de conception Model, Vue, Controller (MVC)
index.php
Aiguillage des requêtes :
.php
index.php
, qui passe la main au routeurURL | Programme | Args |
---|---|---|
http://localhost:8000/test.php |
404 | |
http://localhost:8000/ |
public/index.php |
NULL |
http://localhost:8000/hello |
public/index.php |
hello |
http://localhost:8000/blah/plop |
public/index.php |
blah/plop |
Faire la conversion entre le mode d’invocation classique de PHP, hérité des CGI d’origine, et le mode objet moderne.
Le programmeur Symfony n’a plus qu’à s’occuper :
HomeController
src/Controller/HomeController.php
http://localhost:8000/
HomeController
indexAction()
Chemin | Nom | Args |
/ |
home |
TodoController
src/Controller/TodoController.php
http://localhost:8000/todo/
http://localhost:8000/todo/42
TodoController
listAction()
showAction(id)
Chemin | Nom | Args |
/todo/ |
todo_list |
|
/todo/{id} |
todo_show |
id |
Méta-données en attributs PHP 8
class TodoController extends Controller
{
/**
* Finds and displays a todo entity.
*/
#[
Route('/todo/{id}', name: 'todo_show',
requirements: ['id' => '\d+'], methods: ['GET'])
]
public function showAction(Todo $todo): Response
{
return ...;
}
//...
}
Temps de vie du code :
Répété à chaque requête