views:

291

answers:

3

Hi,

i was wondering if anybody knows of a nice scripting language that can be embedded into php? Javascript would be favorite and although there are several attempts they are either much too shaky/slow/outdated (phpjs, j4p5) or a real pain to get up and running on shared hosts (pecl spidermonkey).

The background is: I would like to have a language that is used to control php on the server but it should also support some logic, so yaml, xml or json just isn't enough. I've looked into LUA interpreters and mediakwiki's "Winter" but they all either rely on external engines or have powerful binding whatsoever.

pecl spidermonkey binding's appears to be the most complete where you can register vars, functions and whole objects to the js-engine. Does anyone know of any system or language that might come close to what I am looking for?

best

rolf

+4  A: 

Hi,

I've not seens many engines that allow another scripting language to be enabled in PHP :-(
Even on PECL, there doesn't seem to be lots of entries (see the "languages" category, for instance : only one, which you already know)
And on PEAR, I don't even find anything that would match your criteria...

I've played with Spidermonkey a bit (see this article on my blog, in french), and it's kinda fun, yes. But it was not really stable a couple of months ago when I wrote that article -- and there have only been a few commits since. So, I understand why hosting companies would not provide it on their servers...
Even if I'd like them to : could be great to allow non-PHP developpers to develop scripts for your application !

A question though : why do you want/need another language than PHP ?

What I mean is PHP is already installed on your server, you obvisously have experience with it, and it's a quite powerful language... So why do you want/need to work with something else ?

Using PHP's eval, you can even think about executing "dynamic" PHP code (Yep, eval is eval and all that, I know ^^ )

Another option, using stuff like "exec" and the like would be, if you are on a Linux server, to launch some kind of shell-script ; but I would definitly prefer coding in PHP than shell, and I'm certainly not the only one ^^


Anyway, keeping an eye on the answers you might get, which could interest me quite a bit too ;-)

Pascal MARTIN
+1: Understanding the question.
Chacha102
hi pascal,thanks for you elaborate answer! I have the idea from TYPO3 which uses "typoscript" to configure itself. The concept of being able to script your application in a second language works nicely there, although typoscript is poorly designed and the parser has its limitations. eval is not an option for me and if I decided to be happy with calling exec i could as well use any other language, including js-cli. Although this would be possible it would still give me no binding with php. I could run a script, have it generate some json and use that php
Rolf
I think I your point better :-) One thing, though, about typoscript (from what I've heard : never used it myself) : bad thing with that is that you are forced to learn yet another new languages :-( (But that would be solved with Javascript, we aggree on that ;-) )
Pascal MARTIN
+1  A: 

I understand your concern. Even for trusted sources, PHP provides more access than is necessary to the whole environment of the web request. Even if the scripters are trusted and even if they can only harm themselves with a scripting error, a more constrained scripting environment would be easier for them to use and easier for you to support.

You want something that can be sandboxed off, that can only access resources you explicitly assign to its scope, and that executes in a "play within a play" runtime environment rather than in PHP's own.

One approach is to use a web templating language for user-submitted scripts. These provide a certain amount of control (variable assignment for example), and close off other options, for example you can't write an infinite loop. I've used Velocity for this purpose in Java applications; I think something like Smarty might work in PHP, but I don't have direct experience of using it for that purpose.

Another approach, if what the scripts are required to do is constrained by the domain, is to implement a Domain Specific Language (DSL). I mentioned that in this answer.

Apart from that, I don't know of any pure-PHP implementations of scripting languages. It's something I'd be interested in myself.

d__
Thanks for the answer, I've looked around for php DSL, but there seems to be no working implementation in existence. Some blogs rambling how great it would be but nothing to see or use. If I should stumble across something meta enough I will post here
Rolf
A: 

First of all, I don't see any reasons to embed scripting language into scripting language..

Anyways, use Lua or nothing. http://pecl.php.net/package/lua

Andrejs Cainikovs