OVH Cloud OVH Cloud

Fonctionnement de PHP

19 réponses
Avatar
mmontig
Bonjour,

Je souhaiterai trouver des sites (ou même un site bien :-)) qui
explique comment fonctionne php5, pas comment faire des pages, mais
comment ca fonctionne derriére (s'il compile, interpréte...), comment,
quel fichier ca génére si c'est de la compilation ?

Merci
Marie

9 réponses

1 2
Avatar
Marc
Mouais c'est un peu jouer sur les mots.
Par extention on appelle tout de même ca de la compilation.


par extention, dans le langage populaire, interpréter, c'est
exécuter un code directement depuis le source. Mais bon ...

ce n'est pas parce qu'on execute directement sans générer
de code executble qu'il n'y a pas compilation.

on pourrait dire que s'il n'y a pas code machine, c'est
de l'interprétation, c'est donc valable pour Java, sauf
que Java connait le JIT (Just in time compiler) qui genere
a la volée du code machine.

Java est donc dans un status un peu particulier. On peut
aussi utiliser le compilateur pour genere du binaire.

Avatar
Michel Billaud
(Christophe M?resse) writes:

loufoque wrote in message news:<415c9719$0$19116$...

liens, mais juste une compilation vers du code intermédiaire
qui est ensuite interprété (exécuté).


Donc ce n'est pas de la compilation.
La compilation transforme en langage machine, PHP transforme en bytecode.
Rien à voir.


Mouais c'est un peu jouer sur les mots.
Par extention on appelle tout de même ca de la compilation.


C'en est, puisqu'on génére du code pour une machine (virtuelle).

On dit bien qu'on compile du java... Je ne connais pas de terme pour
dire "generer le bytecode".


Générer du code qui sera exécuté par une machine virtuelle (si on
oublie qu'il existe aussi des processeurs "java natif'").

MB

--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)



Avatar
Michel Billaud
(Montigny) writes:

Bonjour,

Je souhaiterai trouver des sites (ou même un site bien :-)) qui
explique comment fonctionne php5, pas comment faire des pages, mais
comment ca fonctionne derriére (s'il compile, interpréte...), comment,
quel fichier ca génére si c'est de la compilation ?


C'est pas écrit dans les sources ?

MB


--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)

Avatar
Sebastien
Montigny wrote:

les scripts en asp étaient compilés
et qu'on pouvait même en faire des .dll pour plus de sécurité.
Est ce à peut prés le meme fonctionnement avec php5 ?


Le code est "compilé" en pseudo-code intermédiaire qui sera exécuté. Il
existe même des outils de cache, tels Zend Accelerator
(<http://www.zend.com/store/products/zend-accelerator.php>), qui
agissent à ce niveau. Par contre pas de vrais équivalents aux DLLs à ma
connaissance.

Car je sais
qu'avec php4, tout était interprété et "transformé" en HTML mais, là,
pas vraiment d'explication sur la maniére de fonctionner


Je ne pense pas qu'il y aie eu de modifications à ce niveau.
Code PHP =[compilé]=> Pseudo-code =[exécuté]=> Envoi au client

et surtout de
proteger son code!


Qu'entends-tu exactement par "protéger son code" ? Si tu veux être le
seul à pouvoir éditer tes scripts regarde du côté des obfuscateurs /
encodeurs. Le plus abouti est certainement Zend Encoder
(<http://www.zend.com/store/products/zend-encoder.php>) à $960. Les
scripts sont décodés avec Zend Optimizer
(<http://www.zend.com/store/products/zend-optimizer.php>) qui est
gratuit et qui doit être installé sur le serveur de prod.

Avatar
Michel Billaud
Armel FAUVEAU writes:

Bonjour,

La compilation transforme en langage machine,


Pas nécessairement.
Par compilation, on entend la traduction d'un langage évolué vers un langage
moins expressif.


Tout bien réfléchi c'est le contraire. Si on compile du langage A vers
le langage B, c'est que tout ce qui peut être programmé en A peut
aussi l'être en B. Donc B permet d'exprimer au moins autant de
choses.

MB


--
Michel BILLAUD
LABRI-Université Bordeaux I tel 05 4000 6922 / 05 5684 5792
351, cours de la Libération http://www.labri.fr/~billaud
33405 Talence (FRANCE)


Avatar
FAb
Michel Billaud writes:

Tout bien réfléchi c'est le contraire. Si on compile du langage A vers
le langage B, c'est que tout ce qui peut être programmé en A peut
aussi l'être en B. Donc B permet d'exprimer au moins autant de
choses.


M'a on dirait des cours de info théorique et d'équivalence en machine de Turing
ma parole. Par contre prendre le langage B comme exemple peut induire en
erreur et rappeler de mauvais souvenir à certains.

FM.

Avatar
BaBS
Hum pour ce qui est de l'optimisation et du cryptage des sources :
Turck MMCache
http://turck-mmcache.sourceforge.net/
apparment plus rapide et surtout permet de crypter les source pour
Zero/Bubule/Nada/Keudal Euro/Dollars/Shmilblicks/Yens

Interface :
http://phpcoder.sourceforge.net/

Plein de fonctionnalités comme .. limiter l'acces des pages a certaine
IPs, restrindre dans le temps l'utilisations des scripts ...

je n'ai pas encore eu le temps de vraiment me pencher dessus ...
Mais si il fais bien 50% de ce qu'il dis faire, c'est deja une merveille :)

++

BaBS
Avatar
Bruno Desthuilliers
Montigny wrote:
J'ai trouvé de la doc sur asp.net qui expliquait que l'html était
interprété (logique!!!) mais, que les scripts en asp étaient compilés
et qu'on pouvait même en faire des .dll pour plus de sécurité.


Ahahahahah !!! Quelle blague !

Est ce à peut prés le meme fonctionnement avec php5 ? Car je sais
qu'avec php4, tout était interprété et "transformé" en HTML mais, là,
pas vraiment d'explication sur la maniére de fonctionner


Le principe général (le principe d'origine, j'entends) est le même pour
toutes ces technos : prendre un fichier html dans le quel on a mis
quelques marqueurs spécifiques, lesquelles contiennent des instructions
qui seront remplacée par le texte résultant de leur évaluation avant
envoi de la page.

Ce fonctionnement implique bien sur une interprétation.

Par contre, de plus en plus, PHP et ASP sont utilisés comme des langages
plus "classiques", plus proche du modèle CGI : un programme est appelé
avec des arguments dépendants de la requete HTTP, et ce que le programme
renvoie sur sa sortie standard est retourné au serveur, qui le renvoie
au navigateur.

Sur ce principe, effectivement, on peut aussi bien utiliser un programme
compilé en natif (tu peut même écrire des CGI en assembleur si ça
t'amuse) qu'un script interprété, mais vu les spécificités du web, les
langages "de scripts" s'avèrent généralement plus souples, et pas
forcément beaucoups plus lents, en tous cas dans le modèle CGI, où les
programme sont généralement brefs, et rechargés à chaque page - la
question peut se poser différement dans le cas d'un serveur
d'application dédié, qui lui tourne en tâche de fond.

et surtout de
proteger son code!


La protection du code passe par la licence, pas par l'obfuscation. Et la
sécurité (pour empêcher les petits comiques de venir modifier ton code)
se gère au niveau de l'administration des droits sur le serveur.

Note d'ailleurs que bon nombre de failles de sécurité classiques se
trouvent dans des composants de bas niveau (os, serveur web,
interpréteur etc), justement parce qu'ils sont généralement écrits avec
des langages de bas niveau (généralement en C), dans lesquels une bourde
peut être plus lourde de conséquence (ie : les buffers overflow, un
grand classique...)

Et comprend aussi que la plupart des petits malins capables d'utiliser
ce genre de failles pour entrer dans ton système sont généralement tout
aussi capables de modifier directement du code machine.

Bref, les arguments de MS sont comme d'hab de la foutaise et du vent.

D'un point de vue plus général (et en simplifiant outrageusement, que
les puristes me pardonnent), qu'il s'agissent de compilation ou
d'interprétation, ça commence toujours par l'analyse du code source et
sa transformation en arbre. De là, on peut, au choix :
- exécuter directement cet arbre => interprétation
- réécrire cet arbre en un autre langage => compilation

Cet autre langage (le langage cible) pouvant être ce qu'on veut,
généralement du bytecode (Python, java etc) destiné à une 'machine
virtuelle' qui permet de s'abstraire de la plate-forme hôte, soit du
code objet pour une plateforme spécifique, mais ça peut aussi être du C
ou de l'assembleur. En fait, tu peux considérer les byte-codes comme des
assembleurs pour des processeurs virtuels !-)

La différence par exemple entre Python et Java est que Java nécessite un
appel explicite au compilateur (javac mon_source.java), puis un appel à
la machine virtuelle (java mon_fichier_class), alors que Python appelle
tout seul le compilateur si nécessaire, de façon transparente pour
l'utilisateur.

Tout ça relève de technologies et téhories bien connues et documentées,
et enseignée dans toutes les bonnes universités. Regarde du côté de
"théorie des compilateurs"...

Dans le cas de PHP, il me semble (mais je peux me tromper) qu'il passe
maintenant par une phase de compilation en byte-code, mais que ce
byte-code n'est pas conservé. Maintenant, si tu veux *vraiment* savoir,
en détail et tout, comment fonctionne PHP, tout est dans le code source.
Bonne lecture !-)

Bruno

Avatar
Samuel KABAK
Bonjour,

"loufoque" a écrit dans le message de
news:415c4524$0$19106$
Montigny a dit le 30/09/2004 16:50:
c'est de la compilation ?
Non.



Juste pour dire un mot sur la compilation.

Je ne saurais pas dire si php est compilé ou pas. En tout cas, beaucoup de
languages de script doivent passer en code de machine virtuelle (créé avec
yacc et lex ou équivalent). Un truc qui permet d'appeler des focntions en c
(ou java ou tout autre langage)

Ex :
$var = 5;

devient

1- chercher si $var a déjà été créé
2- si oui affecter lui la valeur 5
3- sinon
3a- créer la variable $var
3b- affecter lui la valeur 5

Comme ces micro-opérations reviennent souvent, on crée un pseudo-code
(chercher, affecter, etc.)

Je sais par contre que la page
-------
<?
include('page-'.$_GET[page_param].'.php');
?>
-------

ne ressemble pas à un code compilé une fois pour tout (à la java ou au
C/C++) car le code lui-même change d'un appel à un autre.

Samuel KABAK
www.codeas.net

--


1 2