Page 1 sur 2

PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 00:36
par Skw33d
Ce sujet est une reprise d'un post que j'ai vu ici : php-avance/application-php-executable-s ... 59972.html qui a éveillé ma curiosité mais ma question divaguait trop du sujet pour que celle ci soit posté dedans, j'ai donc décidé d'ouvrir un autre thread.

Sur Internet où trouve toute forme de discours : le PHP est interpreté, le PHP est compilé...
Je ne sais plus trop quoi penser. Dans tout ce que j'ai vu j'en ai retenu à son fonctionnement que le PHP était d'abord compilé pour être ensuite exécuter pour ensuite être détruit (d'où l'existence des systèmes de cache).

Mais ?
Un langage informatique est par définition différent du langage machine. Il faut donc le traduire pour le rendre intelligible du point de vue du processeur.
C'est le cas du PHP qui ne peut pas être compris par l'ordinateur directement.
mais pouvant également fonctionner comme n'importe quel langage interprété de façon locale
Wikipédia reste assez indécis sur cette question. Du moins on comprend que celui ci peut être interprété mais en aucun cas il est affirmé que celui ci est un langage interprété.
En informatique, un programme écrit en langage interprété n'est pas exécuté directement par la machine mais par un autre programme appelé interprète ; il doit être en fonctionnement sur la machine où l'on veut lancer un programme interprété. Au contraire, un programme écrit en langage compilé est traduit en instructions lisibles par la machine (code natif) et peut être exécuté indépendamment de tout autre programme (à l'exception du système d'exploitation, dans la plupart des cas).
Quelques exemples de langages parfois interprétés :
BASIC
PHP, Javascript, Ruby, Perl, etc : les langages de script en général.
Ici on dit bien parfois interprétés, je peux donc en conclure que PHP est un langage compilé mais parfois interprété ?
Je crois donc détenir la réponse en disant que PHP est un langage compilé, mais je n'en suis donc pas totalement sûr d'après les différentes affirmations lues.

En fouinant sur le forum je suis tombé la dessus (message par émis par un membre viPHP donc à prendre en considération ;) ) : post258756.html?hilit=interpr%C3%A9t%C3 ... A9#p258756, mais je n'arrive finalement pas à savoir ce qu'est finalement le PHP.

Est ce que dire que le PHP est un langage interprété est faux ? Ou à moitié ? Merci de m'éclaircir sur ce sujet. (Pourquoi cette question et bien parce que pour moi connaitre un langage implique aussi connaître son fonctionnement interne, d'où cette question)

Re: PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 02:38
par moogli
salut,

ça dépend comment tu vois la chose :)

PHP est écrit en C donc "compilé". c'est a dire que php.exe est "compilé"

par contre ton script php est interprété (donc ton <?php truc bidule ?> sera interprété par l’exécutable de php qui lui est du C compilé :)

quand au code machine ben c'est de l'assembleur (qui au final est de l'hexadécimal ou pour les puristes du binaire) au final ton microprocesseur ( à ne pas confondre avec le micro contrôleur que tu achète dans le commerce ;) la différence sur le net dans les cours d'électronique ;) ).

donc la machine comprend des zéro et des un (le binaire).

le language machine c'est ce que l'on appel généralement l'assembleur (demande aussi a wikipedia ;) ).

le C, (le pascal etc) sont des languages dit évolué car plus compréhensible plus utilisable et t'a pas 150 lignes pour faire une boucle :)

comme dans le dernier message que tu montre l'indique le C est le langage à la base des langages moderne (regarde le for ou le while du C par rapport a php, java, javascript ou autre).

donc voile ton script php est interprété mais "l’interpréteur" est compilé (sous Windows les exécutables sont compilé).

bon c'est simplifié mais le principe est la ;)

@+

Re: PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 03:51
par Skw33d
Merci de ta réponse moogli mais ça n'a pas vraiment répondu à ma question mais ça m'a plutôt redis des choses que je connaissais déjà :wink: .

En fait c'est bon j'ai compris en relisant certains articles au complet. Pour moi le PHP avait toujours été un langage interprété jusqu’à que je tombe sur ce blog : http://unearaigneeauplafond.fr/php-lang ... e-compile/
Ce qui m'a un peu embrouillé l'esprit en fait. Mais le moteur PHP a en fait uniquement pour rôle de jouer l’interpréteur. Le cas où le code source est compilé avant l’exécution est lorsque l'on souhaite améliorer les performances sur des serveurs à charge lourde. Ce qui augmente les performances du fait qu'un langage compilé est bien plus rapide qu'un langage interprété puisqu'une fois compilé on n'a plus à exécuter le code.

Bon je crois que je me suis répondu à moins que certains voient quelque chose d'incorrect dans ce que j'ai compris.

Re: PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 12:25
par moogli
hum mwé en fait la question était pas clair :)

mais oui si tu parle d'opcode tu "compile" ton code. je n'avais pas compris ta question dans ce sens :/

@+

Re: PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 16:07
par sirakawa
salut,

ça dépend comment tu vois la chose :)

PHP est écrit en C donc "compilé". c'est a dire que php.exe est "compilé"

par contre ton script php est interprété (donc ton <?php truc bidule ?> sera interprété par l’exécutable de php qui lui est du C compilé :)

quand au code machine ben c'est de l'assembleur (qui au final est de l'hexadécimal ou pour les puristes du binaire) au final ton microprocesseur ( à ne pas confondre avec le micro contrôleur que tu achète dans le commerce ;) la différence sur le net dans les cours d'électronique ;) ).
@+
NEIN :
le code machine est l'ensemble des codes (binaires) des instructions du microprocesseur pour lequel ce code a été produit.
l'hexadécimal est une façon moins malcommode d'écrire du langage machine (en particulier les adresses..) :
0X10 == 10000...
le langage d'assemblage est une série de mnémoniques humainement compréhensibles, mais qui restent encore assez proches du langage machine. S'ajoute un ncertain nombre de routines prérédigées qu'on appelle par leur nom:
ainsi, sur les x86, le bus de données est bidirectionnel, il faut donc d'abord basculer un bit pour indiquer s'il fonctionne en entrée ou en sortie, avant de lui envoyer l'adresse des données à manipuler, un message par exemple. Certains langgaes d'assemblage offrent une routine put (ou son synonyme) qui ne requiert que l'adresse des données...
C'est extrêmement rigolo. J'ai ainsi, voici un bail, simulé MSDOS 1 sous CPM en langage d'assemblage, puis pondu un clône partiel de multiplan...
l'assembleur traduit ces mnémoniques en langage machine...

Re: PHP est il un langage compilé ou interprété ?

Posté : 14 août 2011, 22:38
par stealth35
y'a 2 phase pour le rendu d'un script PHP : la compilation et l’interprétation
quand tu lances ton fichier, le script est lu et compiler en token et ensuite en opcode, ensuite on repars a zéro et on interprète l'opcode

si tu veux plus d'infos :
- les tokens : http://php.net/manual/fr/tokens.php
- l'opcode : http://php.net/manual/en/internals2.opcodes.list.php

pour voir ce que rend un script en opcode y'a VLD (installer via pecl, ou sous windows le dll c'est ici

APC est un cache d'opcode, ce qui te permet de sauter la première étape

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 09:56
par sirakawa
y'a 2 phase pour le rendu d'un script PHP : la compilation et l’interprétation
quand tu lances ton fichier, le script est lu et compiler en token et ensuite en opcode, ensuite on repars a zéro et on interprète l'opcode
quand tu lances ton fichier, le script est lu et traduit/transcrit en token puis en opcode; ensuite on repart à zéro (ça ne servait donc à rien de transcrire, puisqu'on repart à zéro) et on interprète l'opcode ==>
CQFD Php est un langage interprété, dont l'interpréteur travaille en plusieurs passes, dont une analyse du code

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 14:07
par stealth35
y'a 2 phase pour le rendu d'un script PHP : la compilation et l’interprétation
quand tu lances ton fichier, le script est lu et compiler en token et ensuite en opcode, ensuite on repars a zéro et on interprète l'opcode
quand tu lances ton fichier, le script est lu et traduit/transcrit en token puis en opcode
oui donc compiler ...

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 15:05
par Skw33d
Merci de vos réponses. Donc finalement dire que PHP est un langage compilé n'est pas faux et dire que PHP est un langage interprété ne serait pas totalement juste ?

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 15:55
par sirakawa
À ce compte, Basic, Java, Lisp, Smalltalk, sont compilés?
On se demande bien pourquoi des bêtes à manger du foin se tuent à compiler un langage déjà compilé.
On se demande aussi pourquoi les PHPmen soutiennt une opinion fausse, come si c'était une honte d'être un langage compilé...
Un programme en langage interprété est portable dès lors qu'il existe un interpréteur sur le système voulu : les résultats, visuels en particulier, dépendront des capacités du sytème (Je me souviens, dans mes débuts en Java, avoir écrit un logiciel de dessin dont le jeu de couleurs différait fortement en passant du PC sous Windows aux HP sous HPUX et aux SUN sous SUN OS). Le débat sur la vitesse me semble un faux débat dans la plupart des cas.
L'avantage est que l'auteur n'a pas à se soucier de quoi que ce soit au niveau du portage.

Un programme compilé au sens strict, étant en langage machine, doit être compilé pour chaque machine cible, voire chaque version du système d'exploitation de la machine cible, complication accentuée par le recours aux bibliothèques dynamiques dont il faut espérer que le client a la bonne version: j'ai récemment chargé le SDK "".7 de Java pour découvrir qu'il était incompatible avec une librairie ##.6 installée sur mon système; d'où désinstallation, réinstallation... une bonne heure au lieu de 10 minutes.
regarde sur n'importe quel dépôt pour Unix chez SourceForge pour te faire une idée... (je ne parle pas de rmp ou pas rmp.. mais d eversions pour Fedora11, fedora12...)

Le résultat visuel d'un programme compilé dépend lui aussi des ressources de la cible et risque de n'être pas identique.

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 17:15
par Skw33d
À ce compte, Basic, Java, Lisp, Smalltalk, sont compilés?
Java est un langage compilé puisqu'il est traduit en bytecode même si il n'y a que la machine virtuelle qui le comprend. (bien que cette dernière l'interprète)

Re: PHP est il un langage compilé ou interprété ?

Posté : 15 août 2011, 22:17
par sirakawa
À ce compte, Basic, Java, Lisp, Smalltalk, sont compilés?
Java est un langage compilé puisqu'il est traduit en bytecode même si il n'y a que la machine virtuelle qui le comprend. (bien que cette dernière l'interprète)
conclusion:
interprété = compilé...

Re: PHP est il un langage compilé ou interprété ?

Posté : 17 août 2011, 23:04
par zeus
En fait, tout les langages sont compilés à un moment où à un autre.
Toutefois, dans le discours courant, un langage dit compilé est un code dont la phase de compilation est faite avant le déploiement.
A contrario, un langage interpreté est un langage dont le code est compilé à la volé lors de l'exécution.

Avec cette définition, tu vois que le C, le Java, ... sont des langages compilés, mais que le PHP est un langage dit interprété.

Re: PHP est il un langage compilé ou interprété ?

Posté : 27 août 2011, 18:45
par sirakawa
un truc marrant concernant l'analyse du code:
<?PHP
$nombre = isset($_POST ['nombre']) ? $_POST ['nombre'] : 1;
if ($nombre == 1)
{
	print "un c'est un
	<form method='post' action = 'test.php'>
	tapez un nombre <input name= 'nombre' />
	<button type = 'submit'>Calcule</button>
	</form>";

}
else
{
	if ( $nombre== 2)
	{
		print "$u";
	}
}

?>

Re: PHP est il un langage compilé ou interprété ?

Posté : 28 août 2011, 03:32
par devlop78
Quoi ?