Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Conectar una aplicación en Perl con una en PHP

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Ene 18, 2007 9:14 am
jrangel
Perlero Nuevo
Perlero Nuevo
Registrado: 19 May 2006
Mensajes: 5
Conectar una aplicación en Perl con una en PHP Responder citando

Actualmente nuestra organización tiene varias aplicaciones en PHP se quiere desarrollar una aplicación basada en Perl para administrar y accesar a estas aplicaciones existentes en PHP desde esta aplicación central basada en Perl; la incógnita que tenemos actualmente es cómo pasar variables de sesión desde Perl a estas aplicaciones en PHP para que estas funcionen normalmente como si se fueran acceso directamente desde ellas; ¿eso es posible utilizando Apache ?
Mensaje Jue Ene 18, 2007 9:25 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
Responder citando

Checkea este módulo de Perl:
PHP::Session

Es justamente para leer y escribir sesiones de PHP...

Saludos
Mensaje Jue Ene 18, 2007 4:29 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

En la revista Linux Journal de este mes se comenta cómo ejecutar código PHP dentro de Perl y Perl dentro de PHP, con la ayuda del módulo PHP::Interpreter, pero lo más indicado es lo que os ha recomendado monoswim.

Ejemplo de uso. Usar la librería MSSQL del PHP desde Perl, para acceder a una base de datos MSSQL:
Perl:
1. use PHP::Interpreter;
2. use File::Tail;
3. use threads ('yield', 'stack_size' =>64 * 4096, 'exit'
   =>'threads_only');
4. use Thread;
5. my $php = PHP::Interpreter->new;
6. my $ref=tie *FH,"File::Tail",(name=>'/var/log/messages');
7. while (<FH>)
8. {
9. if($_=~/sshd/) #checks for message from sshd
10. {
11. if($_=!/Failed password for/) #check for a failed password attempt
12. {
13. $ind = rindex($str,'from');
14. $rind = rindex($str,'port');
15. $ip = substr($str,$ind+4,$rind-$ind-4);
16. $thr = new Thread \&writems, $ip;
17. $thr->join();
18. }
19. }
20. }
21. sub writems
22. {
23. `iptables -I INPUT -s $ip -j DROP`
24. $php->include(*"*writems.php*"*);
25. $php->writeIP('ssqlserver','sshwatch','sshusr','sshpass',$_[0]);
26. print $php->eval("echo Succeeded!");
27. }

writems.php:
php:
1. <?php
2. function writeIP($dbhost,$dbname,$dbuser,$dbpass,$ip)
3. {
4. $conn = mssql_connect($dbhost,$dbuser,$dbpass)
5. or die("Couldn't connect to SQL Server on $dbhost");
6. $db = mssql_select_db($dbname, $s)
7. or die("Couldn't open database $myDB");
8. set_time_limit(0);
9. $squery="insert into sshwatch(currentdate,ip)
10. values('"
.date('Y/m/d')."','".$ip."')"; mssql_query($squery);
11. }
12. ?>


Segundo ejemplo. Desde un script php pedir a Babelfish una traducción, usando un script Perl:
Perl:
1. use AltaVista::BabelFish;
2. use PHP::Interpreter;
3. my $p = PHP::Interpreter->new();
4. $p->include("phpscript.php");
5. my $val = $p->invoke();
6. sub translate
7. {
8. my $phish = AltaVista::BabelFish->new({ source => $_[0], target =>
   $_[1] });
9. return $phish->translate($_[2]) or die $phish->get_errstr();
10. }
phpscript.php:
php:
1. <?php
2. function invoke()
3. {
4. $perl = Perl::getInstance();
5. $string = $perl->call('translate', 'en','de','Translate this for me');
6. print "Translated string: $string\n";|
7. }
8. ?>
Mensaje Vie Ene 19, 2007 7:39 am
jrangel
Perlero Nuevo
Perlero Nuevo
Registrado: 19 May 2006
Mensajes: 5
Responder citando

Gracias explorer y monoswin voy a hacer pruebas con sus recomendaciones, cualquier cosa estaré en contacto....
Mensaje Lun Ene 22, 2007 2:14 pm
jrangel
Perlero Nuevo
Perlero Nuevo
Registrado: 19 May 2006
Mensajes: 5
Responder citando

Explorer estoy tratando de instalar el módulo PHP::Interpreter pero el sistema me indica que no encuentra la líbrería -lphp5, estoy haciendo lo siguiente:

perl Makefile.PL

luego aparece lo siguiente:

using phpdir /usr/local
Note (probably harmless) No library found for -lphp5
Writing Makefile for PHP::Interpreter

Quiero saber si estoy haciendo algo mal ó si me falta hacer una instalación de otra líbreria para que pueda realizar la instalación de manera satisfactoria, cualquier cosa estaré atento a cualquier sugerencia; Gracias.
Mensaje Lun Ene 22, 2007 2:35 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Debes instalar las librerías de desarrollo compiladas a partir de las fuentes de php, como se comenta en el README:

No debes instalar PHP::Interpreter hasta que hayas instalado el php. Quizás tengas problemas si ya lo tenías instalado antes.

Básicamente, es compilar php5 para obtener el fichero libphp5.
Mensaje Mar Ene 23, 2007 11:57 am
jrangel
Perlero Nuevo
Perlero Nuevo
Registrado: 19 May 2006
Mensajes: 5
Responder citando

Explorer la única forma de obtener lphp5 es compilando el php5? actualmente tengo fichero llamado libphp5.so pero igual arroja error la instalación de PHP::Interpreter...
actualmente nuestra plataforma esta sobre Debian y la instalación de php5 con sus paquetes y las distribuciones...
Mensaje Mar Ene 23, 2007 2:01 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Siempre puedes compilarla en un directorio aparte y NO instalarla, sino coger los ficheros que te hacen falta (la librería y el include .h y colocarlos en un directorio que sea visible para PHP::Interpreter.
Mensaje Mar Ene 23, 2007 6:51 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Bueno, lo he estado mirando y no es tan simple de hacer...

Se pueden bajar las fuentes de php y compilarlas en un directorio aparte, desde luego. Pero hay que tener en cuenta que para hacerlo debemos tener todas las librerías de las funcionalidades que luego queramos usar dentro de la librería compilada, así que no es sólo bajarse las fuentes de PHP, sino mucho más.

Después de hacer el configure y el make, tendremos en libs/ la librería compilada. Podríamos hacer un make install, pero claro, sobreescribiría el php de nuestro sistema instalado antes. Lo que sí podemos hacer es un make install-headers, que sólo instalara los ficheros .h debajo de /usr/local/include/php. Mientras, la librería libphp5.la la copiamos a /usr/local/lib.

Nos vamos al directorio de PHP-Interpreter y ejecutamos perl Makefile.PL pasándole como parámetro el directorio donde debe buscar todo eso. Por defecto lo hará en /usr/local así que en teoría no tendríamos que pasarle nada al comando anterior. Pero lo más seguro es que antes tengamos que editar Makefile.PL y cambiar la línea
Perl:
my $inc = "-I" . catdir ($phpdir, 'include') . " ".`$phpconfig --includes`;

por
Perl:
my $inc = "-I" . catdir ($phpdir, 'include','php') . " ".`$phpconfig --includes`;
porque php habrá dejado los ficheros .h dentro de /usr/local/include/php. Aún así, deberemos editar el fichero phpfuncs.h para que apunte a los directorios correctos. Por ejemplo, cambiar
c:
#include <zend.h>

por
c:
#include <Zend/zend.h>

Desde luego, es mucho más fácil editar el Makefile de PHP-Interpreter e ir a la línea y poner
bash:
INC = -I/usr/local/include/php -I/usr/local/include/php/Zend -I/usr/local/include/php/main -I/usr/local/include/php/TSRM
Ya podemos hacer make, y si no da fallos, hacer un make test para comprobar que todo va bien (a mí me fallaron 2 test de 23, el número 14 y el 16). Finalmente, ya podemos hacer un make install.

Los fallos indicados son los de los test de autocarga de funciones (definir funciones php dentro del código, pasárselas a PHP::Interpreter y obtener los resultados). En mi ordenador daba una violación de segmento al ejecutar ese código. Claro que yo lo he hecho con php 5.2. Si lo haces con 5.1, quizás no haya problemas.

Lo dicho, no es tan sencillo. Al menos con php v5.2.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group