Un vistazo a Quercus: PHP by Java

Quercus es una implementación de PHP 5.2 escrita totalmente en Java, algo similar al famoso Hiphop de facebook sólo que en lugar de un traductor a C++ se trata de un intérprete PHP que corre en Java.
Se ha oído hablar mucho menos de Quercus que de HipHop pero es probable que Hiphop no llegue a utilizarse tanto como ya se está utilizando Quercus.


¿En qué casos puede ser interesante utilizar Quercus?

  • Desplegar aplicaciones web en entornos muy controlados donde sólo se acepta Java o en plataformas cloud computing que no soportan PHP pero sí Java (Google App Engine).
  • Necesitar cierta mejora en rendimiento que puede suponer utilizar Quercus en ciertas situaciones.
  • Desplegar scripts PHP encapsulados en una aplicación Java.
  • Utilizar PHP como motor de scripting de una aplicación Java, desarrollando el frontend por ejemplo en Swing y dejando el trabajo sucio para los scripts PHP.
  • Integrar aplicaciones PHP desde Java. (Alfresco lo utiliza).
  • Estás aburrido, probar por curiosidad.

Este post se compone de dos partes. En la primera veremos cómo correr un wordpress sobre Quercus y en la segunda introduciré una prueba de concepto de uso de Quercus en el escritorio.

1. WordPress sobre Quercus.

  • Descargamos Resin 3.1, la versión opensource del paquete que incluye Quercus junto a un servidor web.
    wget http://www.caucho.com/download/resin-4.0.6.tar.gz
  • Descargamos wordpress:
    wget http://wordpress.org/latest.zip
  • Descomprimimos Resin:
    tar xvzf resin-4.0.6.tar.gz
  • Ejecutamos resin:
    sh resin-4.0.6/bin/resin.sh  start
  • Podemos visitar http://127.0.0.1:8080/
  • Ahora, sorpresa tratándose de Java :-), toca editar algo de XML:
    Copiamos lo siguiente en un fichero resin-web.xml colocado en webapps/ROOT/WEB-INF/:
<web-app xmlns="http://caucho.com/ns/resin">
   <servlet-mapping url-pattern="*.php"
                    servlet-class="com.caucho.quercus.servlet.QuercusServlet">
   </servlet-mapping>
</web-app>
  • Para probar que está funcionando bien podemos colocar un script con un phpinfo() en webapps/ROOT/.
    Veremos que es bastante más feo que el de Zend:
  • PHP Version => 5.2.0
    System => Linux 2.6.31-14-generic i386
    Build Date => 20100413T085542
    Configure Command => n/a
    Server API => CGI
    Virtual Directory Support => disabled
    Configuration File (php.ini) Path => null
    PHP API => 20031224
    PHP Extension => 20041030
    Debug Build => no
    Thread Safety => enabled
    Registered PHP Streams => php, file, http, https
  • Colocamos el jar del conector en la carpeta lib de Resin. Para que resin cargue el conector es necesario reiniciarlo:
  • sh resin.sh restart
  • Ya lo tendremos funcionando, 100% Java, 0% Zend, pero PHP al fin y al cabo, no ha hecho falta cambiar ni una línea de WordPress.

    2. QuercusFun, prueba de concepto de aplicación Swing y CLI con Quercus.

    En github ya existe una prueba de concepto de integrar quercus sin servlet, es decir, como aplicación de escritorio: ( http://code.google.com/p/phpandallthat/#Detached_Quercus ) pero no es funcional debido a que no autocarga los módulos con lo cual las funciones de php no están disponibles y tampoco cuida otros aspectos como que los scripts no den timeout demasiado pronto. Es decir, en la práctica no funciona.

    Mi aportación se llama “QuercusFun” y se trata de una aplicación que se puede ejecutar tanto con GUI (Swing) como desde línea de comandos… y funciona.

    A continuación pantallazo y enlaces tanto al repositorio donde he subido el código como a un JAR.

    Bajar quercusFun.jar

    Para ejecutar como CLI:

    java -jar quercusFun.jar fichero.php

    y para ejecutar con GUI

    java  -jar quercusFun.jar
    

    Repositorio en GITHUB: http://github.com/ivmos/QuercusFun

    Advertisement

    Published by

    Iván Mosquera Paulo

    Software Engineer

    2 thoughts on “Un vistazo a Quercus: PHP by Java”

    1. Cuando dices: “Necesitar cierta mejora en rendimiento que puede suponer utilizar Quercus en ciertas situaciones.”

      A que situaciones te refieres exactamente?? Es que no acabo de verlo… 😈

    2. Epa.

      Pues sobre todo al hecho de que java tira de hilos.

      http://stackoverflow.com/questions/2182195/php-comet-with-quercus

      Y en plan fuerza bruta Java sí es más rápido que PHP pero pq al compilarse mucho trabajo ya está hecho.
      Es decir, no se trata de php vs java sino de interpretado vs “algo menos interpretado”.

      Otro tema es que merezca la pena, en una web por ejemplo, el cuello de botella suelen ser las querys.

      Un link con un benchmark de tantos:

      http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out /  Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out /  Change )

    Connecting to %s