Bonjour,
Je n'ai pas trouvé de sujet similaire sur le forum, alors je le poste ici.
Php est un langage majoritairement utilisé pour la création de sites web, derrière un Apache/Nginx ou autre pour relayer les résultats, mais il se trouve qu'il fonctionne aussi en console (cli).
Au niveau des performances, on est en dessous de Python est Ruby il me semble, mais je ne serais pas dire de combien (x2 pour un Python non compilé de mémoire), encore qu'il reste à voir si une utilisation de HHVM au lieu de php lui même n’accélérais pas le tout (si plusieurs lancements du script de prévus).
Quels en sont donc les avantages?
Premièrement ça permet à nous codeurs php de ne pas devoir apprendre le Python qui est si horrible au niveau de la syntaxe (), et de profiter de toutes les fonctionnalités que nous offre php depuis la version 5.3 et 5.5 qui l'ont rendu beaucoup plus adapté aux gros projets (namespaces notamment).
On pourra avoir accès a un très large panel de librairies dont dispose php pour le web (via composer par exemple), ou bien à des librairies plus inconnues comment PHP-GTK ou PHP-Qt pour des interfaces graphiques.
Si vous êtes sous windows, ça ne sera pas vraiment adapté mais vous pourrez tout de même suivre ce tutoriel, avec un petit script batch ça devrais le faire ou alors une variable d'environnement pour php.
Vous n'aurez bien évidemment pas de variables $_GET, $_POST ou $_UPLOAD !(et toutes les variables du genre en fait).
I - La découverte :
On ouvre un nouveau fichier PHP - main.php.
Pour afficher des choses à l'écran vous pouvez utiliser les fonctions habituelles : echo,print_r,etc.
Par contre, la récupération de la saisie utilisateur va poser "problème" (pas longtemps cela dit). Elle se trouve à l'adresse php://STDIN, et avec le diminutif STDIN.
Comment la récupérer ? Avec un simple fgets(STDIN).
Qui nous affichera la saisie utilisateur.
Mais voilà, petit problème...si vous avez rentré int80h comme nom il va stocker dans la variable $nom "int80h\n". Un magnifique retour à la ligne est entré dans notre variable...Comment le supprimer ? Je propose un bête trim($nom,"\n");.
Comme php n'est pas explicitement typé, on s'en fout totalement de récupérer des strings, on pourra les cast très simplement avec un (int) devant la variable si l'on veut un entier. (oui c'est dégueulasse mais pratique).
Je propose de faire une petite class statique pour pouvoir réutilisé tout ça...
class/console.class.php -
Je ne vais pas tout expliqué, mais j'ai choisi de nommer mes fonction comme en C#, et avec un camelCase (parce que c'est plus beau !).
J'ai directement trim() mon entrée utilisateur.
Les valeurs de retour de write et donc de writeLine sont le nombre de bytes écris dans l'entrée standard.
II - Des arguments, je veux des arguments !
C'est bien beau de savoir lire et écrire, mais on aimerais aussi savoir récupérer les arguments passés via la ligne de commande.
$ php main.php arg1 arg2 arg3
Pour cela rien de plus simple !
Dans une variable $argc nous aurons le nombre d'arguments passés à php et dans $argv nous aurons un array de toutes les arguments
Pour les affichers rien de plus simple.
Ce qui nous donne pour la commande du dessus :
4 c'est le nombre d'arguments passé, et ensuite nous avons le nom du script, puis les arguments divers !
Voilà pour cette introduction ! Rien de sorcicer, mais ça permet d'appréhender la chose qui n'est pas si courant que ça
EDIT:
Un petit exemple : récupération d'une page web
Usage : $ php main.php adresseDuFichier
L'exemple est bien sûr débile, curl/wGet fait mieux le job mais ça illustre les concepts vus plus haut
Je n'ai pas trouvé de sujet similaire sur le forum, alors je le poste ici.
Php est un langage majoritairement utilisé pour la création de sites web, derrière un Apache/Nginx ou autre pour relayer les résultats, mais il se trouve qu'il fonctionne aussi en console (cli).
Au niveau des performances, on est en dessous de Python est Ruby il me semble, mais je ne serais pas dire de combien (x2 pour un Python non compilé de mémoire), encore qu'il reste à voir si une utilisation de HHVM au lieu de php lui même n’accélérais pas le tout (si plusieurs lancements du script de prévus).
Quels en sont donc les avantages?
Premièrement ça permet à nous codeurs php de ne pas devoir apprendre le Python qui est si horrible au niveau de la syntaxe (), et de profiter de toutes les fonctionnalités que nous offre php depuis la version 5.3 et 5.5 qui l'ont rendu beaucoup plus adapté aux gros projets (namespaces notamment).
On pourra avoir accès a un très large panel de librairies dont dispose php pour le web (via composer par exemple), ou bien à des librairies plus inconnues comment PHP-GTK ou PHP-Qt pour des interfaces graphiques.
Si vous êtes sous windows, ça ne sera pas vraiment adapté mais vous pourrez tout de même suivre ce tutoriel, avec un petit script batch ça devrais le faire ou alors une variable d'environnement pour php.
Vous n'aurez bien évidemment pas de variables $_GET, $_POST ou $_UPLOAD !(et toutes les variables du genre en fait).
I - La découverte :
On ouvre un nouveau fichier PHP - main.php.
Pour afficher des choses à l'écran vous pouvez utiliser les fonctions habituelles : echo,print_r,etc.
Par contre, la récupération de la saisie utilisateur va poser "problème" (pas longtemps cela dit). Elle se trouve à l'adresse php://STDIN, et avec le diminutif STDIN.
Comment la récupérer ? Avec un simple fgets(STDIN).
Code PHP:
<?php
echo "Quel est votre nom : \n";
$nom = fgets(STDIN);
echo "Votre nom est {$nom} !";
Mais voilà, petit problème...si vous avez rentré int80h comme nom il va stocker dans la variable $nom "int80h\n". Un magnifique retour à la ligne est entré dans notre variable...Comment le supprimer ? Je propose un bête trim($nom,"\n");.
Comme php n'est pas explicitement typé, on s'en fout totalement de récupérer des strings, on pourra les cast très simplement avec un (int) devant la variable si l'on veut un entier. (oui c'est dégueulasse mais pratique).
Je propose de faire une petite class statique pour pouvoir réutilisé tout ça...
class/console.class.php -
Code PHP:
<?php
class Console {
public static function readLine(){
return trim(fgets(STDIN),"\n");
}
public static function writeLine($input){
return console::write($input."\n");
}
public static function write($input){
return fwrite(STDOUT,$input,strlen($input));
}
}
J'ai directement trim() mon entrée utilisateur.
Les valeurs de retour de write et donc de writeLine sont le nombre de bytes écris dans l'entrée standard.
II - Des arguments, je veux des arguments !
C'est bien beau de savoir lire et écrire, mais on aimerais aussi savoir récupérer les arguments passés via la ligne de commande.
$ php main.php arg1 arg2 arg3
Pour cela rien de plus simple !
Dans une variable $argc nous aurons le nombre d'arguments passés à php et dans $argv nous aurons un array de toutes les arguments
Pour les affichers rien de plus simple.
Code PHP:
<?php
print_r($argc);
print_r($argv);
4Array
(
[0] => main.php
[1] => arg1
[2] => arg2
[3] => arg3
)
(
[0] => main.php
[1] => arg1
[2] => arg2
[3] => arg3
)
Voilà pour cette introduction ! Rien de sorcicer, mais ça permet d'appréhender la chose qui n'est pas si courant que ça
EDIT:
Un petit exemple : récupération d'une page web
Code PHP:
<?php
require 'console.class.php';
$adresse = $argv[1];
$page = file_get_contents($adresse);
if($page){
if(file_put_contents(time(), $page)){
console::writeLine('Bien enregistré !');
}else{
console::writeLine('Erreur lors de l\'enregistrement !');
}
}else{
console::writeLine('Adresse '.$adresse.' introuvable.');
}
?>
L'exemple est bien sûr débile, curl/wGet fait mieux le job mais ça illustre les concepts vus plus haut