runkit extension

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : runkit extension

par Sékiltoyai » 13 déc. 2007, 01:33

Merci à Sékiltoyai pour tes réponses :)
Même si je n'ai pas fait avancé ton shmilblik :)
Mais content que tu aies trouvé :)

par tagyboy » 12 déc. 2007, 20:40

Bon j'ai trouvé, pour ceux qui ça intéresse (on sait jamais). La méthode consiste à contourner le problème de l'écrasement de classe en faisant une nouvelle instance de cette même classe préalablement renomée. En gros, j'ouvre la classe avec get_file_contents(), je la renomme grâce à un regex basique, l'évalue grâce à eval() et le tour est joué.
Pour ceux qui veulent en savoir plus, j'ai trouvé cette méthode dans le projet "PHP:IRC" (http://phpbots.org/) qui se trouve être très bien codé.

Merci à Sékiltoyai pour tes réponses :)

par Sékiltoyai » 10 déc. 2007, 18:54

Justement, l'extension runkit semble être conçue pour permettre ce genre de manipulations. Peut être faut il coupler son utilisation à un système qui viderait la pile d'éxécution ?
Je ne vois pas comment tu pourrais faire puisque pour se faire, tu dois sortir de toutes les fonctions dans lesquelles tu es, mais si tu me dis que php gère tous ces problèmes en temps normal, à ce moment je ne vois pas d'où pourrait venir le problème. Tu n'as plus qu'à chercher un moyen de contourner le problème. Cela te demandera plus d'efforts conceptuels mais au moins tu seras sur que cela fonctionnera…

par Invité » 10 déc. 2007, 16:55

En fait je pense que tu peux avoir des problèmes déjà si tu essayes de recharger une classe en cours d'utilisation, c'est à dire une classe donc une méthode est dans la pile d'exécution…
Justement, l'extension runkit semble être conçue pour permettre ce genre de manipulations. Peut être faut il coupler son utilisation à un système qui viderait la pile d'éxécution ?
Il faut voir aussi si c'est possible de l'utiliser à l'intérieur d'une classe ou d'un fichier, même si aucune méthode de cette classe ou aucun code de ce fichier n'est en cours d'exécution…
Bref, teste avec des exemples tous simples pour voir comment tu as le droit de l'utiliser, à noter que dans l'exemple de php.net, la fonction est utilisée dans le script principal, hors de toute classe, …
J'ai fait plusieurs essais avec la fonction runkit_import(), qu'elle soit hors de toute classe; dans une classe ne contenant que cette fonction; ou encore dans la classe en question que je souhaite recharger. Rien n'y fait :/
Enfin, je ne sais pas pourquoi tu as besoin de CLI mais je trouve que l'existance de PHP en CLI est une abbération, mis à part peut être pour exécuter les scripts CGI (si je ne me trompe, ils sont exécutés par le binaire en ligne de commande…), PHP est un langage de script très orienté web et n'est absolument pas adapté à autre chose que du web, ce serait comme faire du traitement video en perl, on peut, mais c'est pas fait pour…
Même si ce n'est pas la question traitée dans ce topic, je répondrais que je n'ai pas le choix, le temps m'est compté et me lancer dans un autre langage (aussi simple qu'il soit) demande une motivation que je n'ai pas. J'ai des connaissances en PHP > PHP est utilisable en CLI > j'utilise donc PHP pour ne pas perdre de temps (même si au final j'en perds énormément à cause de ce problème).

par Sékiltoyai » 10 déc. 2007, 04:34

En fait je pense que tu peux avoir des problèmes déjà si tu essayes de recharger une classe en cours d'utilisation, c'est à dire une classe donc une méthode est dans la pile d'exécution…
Il faut voir aussi si c'est possible de l'utiliser à l'intérieur d'une classe ou d'un fichier, même si aucune méthode de cette classe ou aucun code de ce fichier n'est en cours d'exécution…
Bref, teste avec des exemples tous simples pour voir comment tu as le droit de l'utiliser, à noter que dans l'exemple de php.net, la fonction est utilisée dans le script principal, hors de toute classe, … Donc dans la mesure où il est possible d'utiliser ces fonctions en mode CLI, le fait qu'elles soient bugguées ou limitées entraine bien entendu qu'il faudra les utiliser avec parcimonie…

Enfin, je ne sais pas pourquoi tu as besoin de CLI mais je trouve que l'existance de PHP en CLI est une abbération, mis à part peut être pour exécuter les scripts CGI (si je ne me trompe, ils sont exécutés par le binaire en ligne de commande…), PHP est un langage de script très orienté web et n'est absolument pas adapté à autre chose que du web, ce serait comme faire du traitement video en perl, on peut, mais c'est pas fait pour…

runkit extension

par tagyboy » 10 déc. 2007, 01:43

Hello à tous.

Je travaille en ce moment sur un projet PHP incluant un système de plugins que j'éxécute en CLI et je voudrais pouvoir recharger un plugin sans avoir à relancer tout le programme. Utilisant l'aspect programmation objet de PHP, j'ai donc défini une classe par plugin. Grace à l'extension runkit je suis censé pouvoir écraser une ancienne instance de classe par une nouvelle (qui a donc pu être modifiée entre temps) sans que PHP génère d'erreurs.

Cela dit j'ai l'impression que la fonction me permettant de faire ce que je veux, c'est à dire runkit_import(), ne fonctionne pas en CLI. Elle ne renvoie aucune erreur mais le plugin n'est pas rechargé, il reste inchangé. Je suis tombé sur la description exacte de mon problème ici : http://pecl.php.net/bugs/bug.php?id=10088&edit=1 mais il semble qu'aucune solution n'ait été encore trouvée.

On peut lire sur php.net la description de cette fonction et dans les commentaires une solution consistant à utiliser ce runkit_import() par le biais d'une classe tiers. Mais cela ne marchant pas non plus, je commence à désespérer.

Peut être qu'ici quelqu'un a déjà eu ce problème et l'a résolu ? Je suis preneur de tout ce qui peut m'orienter vers la bonne piste.

Merci d'avance !