7
votes

Langues de script intégrées pour PHP?

Je me demandais si quelqu'un sait un beau langage de script pouvant être intégré à PHP? JavaScript serait favori et, bien qu'il y ait plusieurs tentatives, ils sont beaucoup trop fragiles / lents / obsolètes (phpjs, J4P5) ou une douleur réelle pour se lever et courir sur des hôtes partagés (Pecl Spidermonkey).

L'arrière-plan est: J'aimerais avoir une langue utilisée pour contrôler PHP sur le serveur, mais elle devrait également prendre en charge une logique, alors Yaml, XML ou JSON ne suffit tout simplement pas. J'ai examiné les interprètes de Lua et le "hiver" de Mediakwiki, mais ils s'appuient tous sur des moteurs externes ou ont une puissante contraignante.

La liaison PECL SpiderMonkey semble être la plus complète où vous pouvez enregistrer vars, fonctions et objets entiers au JS-Engine. Est-ce que quelqu'un sait de tout système ou langue qui pourrait provenir de ce que je recherche?

meilleur

ROLF


6 commentaires

Je ne suis pas sûr de ce que vous demandez. Pouvez-vous clarifier ce que vous entendez par «intégré» en PHP?


Les scripts que vous avez l'intention de courir provenant d'une source de confiance? S'ils sont, utilisez ensuite PHP pour contrôler votre PHP.


op ici. Oui, les scripts sont de confiance. Je pense qu'il est préférable d'éloigner la volonté du noyau au cas où quelque chose dans le contrôle provoque une erreur fatale un second, un analyseur intégré capturerait cela et mourir au lieu de prendre tout le moteur.


Wow .. je l'ai lu 5 fois et ma tête fait mal.


Nous avons besoin d'une étiquette 'WTF' .....


Si vous cherchez à intégrer une langue de script en PHP, je vous encourageons à déterminer si vous ne le faites pas mal.


3 Réponses :


4
votes

Je n'ai pas eu lieu de nombreux moteurs qui permettent une autre langue de script à être activée dans PHP :-(
Même sur Pecl, il ne semble pas y avoir beaucoup d'entrées (voir le Catégorie "Langues" , par exemple: un seul, que vous savez déjà)
Et en poire, je ne trouve même rien qui correspondrait à vos critères ...

J'ai joué avec SpiderMonkey un peu (voir Article sur mon blog , en français), et c'est un peu amusant, oui. Mais ce n'était pas vraiment stable il y a quelques mois lorsque j'ai écrit cet article - et il n'y en a eu que quelques engagements depuis. Donc, je comprends pourquoi les entreprises d'hébergement ne le fourniraient pas sur leurs serveurs ...
Même si j'aimerais qu'ils puissent être excellents pour permettre aux développeurs non-php de développer des scripts pour votre application!

Une question cependant: pourquoi voulez-vous / besoin d'une autre langue que php?

Ce que je veux dire, c'est que PHP est déjà installé sur votre serveur, vous avez de l'expérience avec elle, et c'est une langue assez puissante ... alors pourquoi voulez-vous / besoin de travailler avec autre chose?

Utilisation de PHP'S EVAL, vous pouvez même penser à l'exécution du code PHP "dynamique" (yep, eval est Eval et tout cela, je sais ^^)

Une autre option, en utilisant des trucs comme "EXEC" et similaires, si vous êtes sur un serveur Linux, pour lancer une sorte de script shell; Mais je préférerais certainement coder en PHP que la coquille, et je ne suis certainement pas le seul ^^


Quoi qu'il en soit, gardant un œil sur les réponses que vous pourriez obtenir, ce qui pourrait m'intéresser un peu aussi; -)


2 commentaires

Bonjour Pascal, merci pour votre réponse élaborée! J'ai l'idée de TYPO3 qui utilise "Typoscript" pour se configurer. Le concept de capable de script votre application dans une seconde langue fonctionne bien là-bas, bien que TypoScript soit mal conçu et que l'analyseur a ses limites. Eval n'est pas une option pour moi et si j'ai décidé d'être satisfait de Calling EXEC, je pouvais aussi bien utiliser une autre langue, y compris JS-CLI. Bien que cela soit possible, cela ne me donnerait toujours aucune liaison avec PHP. Je pourrais exécuter un script, le faire générer du JSON et utiliser ce php


Je pense que je suis ton point meilleur :-) Une chose, cependant, à propos de Typoscript (de ce que j'ai entendu: ne l'utilise jamais moi-même): mauvaise chose avec c'est que vous êtes obligé d'apprendre encore d'autres langues :-( (mais cela serait résolu avec JavaScript, nous aggravons cela ;-))



2
votes

Je comprends votre préoccupation. Même pour des sources de confiance, PHP fournit plus d'accès que nécessaire à l'ensemble de l'environnement de la demande Web. Même si les scraptres sont confiés et même s'ils ne peuvent se nuire qu'avec une erreur de script, un environnement de script plus contraint serait plus facile à utiliser et plus facile pour que vous puissiez soutenir.

Vous voulez que quelque chose puisse être sandboxé, cela ne peut accéder que des ressources que vous attribuez explicitement à sa portée, et qui s'exécute dans une "pièce de jeu dans une pièce d'entrée" d'environnement d'exécution plutôt qu'au PHP.

Une approche consiste à utiliser une langue de modèles Web pour les scripts soumis par l'utilisateur. Celles-ci fournissent une certaine quantité de contrôle (affectation variable par exemple) et fermez d'autres options, par exemple, vous ne pouvez pas écrire une boucle infinie. J'ai utilisé la vitesse à cet effet dans les applications Java; Je pense que quelque chose comme Smarty pourrait travailler dans PHP, mais je n'ai pas d'expérience directe de l'utiliser à cette fin.

Une autre approche, si ce que les scripts sont tenus de faire, c'est contraint par le domaine, consiste à mettre en œuvre une langue spécifique de domaine (DSL). J'ai mentionné que dans Cette réponse .

En dehors de cela, je ne connais aucune implémentation pure-php de langues de script. C'est quelque chose que je serais intéressé par moi-même.


1 commentaires

Merci de la réponse, j'ai regardé autour de PHP DSL, mais il semble y avoir une mise en œuvre de travail existante. Quelques blogs randonnant à quel point ce serait bien, mais rien à voir ou à utiliser. Si je devrais trébucher quelque chose de méta assez, je posterai ici



1
votes

symfony a le ExpressLanguage Composant:

Le composant ExpressionLanguage fournit un moteur qui peut compiler et évaluer les expressions. Une expression est une doublure qui retourne un valeur (principalement, mais non limitée aux booléens).

...

L'objectif du composant est de permettre aux utilisateurs d'utiliser des expressions à l'intérieur de la configuration pour une logique plus complexe. Pour certains exemples, le cadre Symfony utilise des expressions en sécurité, pour les règles de validation et dans la correspondance de la route.

Un exemple de la langue est ci-dessous: xxx


0 commentaires