Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Intermedio » Conectar una aplicación en Perl con una en PHP Responder al tema
Nuevo tema


Página 1 de 1  [ 13 mensajes ] 
 
Nota 2007-01-18 10:14 @468

Perlero Nuevo
Registrado: 2006-05-19 10:26 @476
Mensajes: 7
Conectar una aplicación en Perl con una en PHP
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 ?


Nota 2007-01-18 10:25 @475
Avatar de Usuario
Vive para Perl en Español
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires
Mensajes: 455
Checkea este módulo de Perl:
PHP::Session

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

Saludos

_________________
MonoSwim


Nota 2007-01-18 17:29 @770
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
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:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. use PHP::Interpreter;
  2. use File::Tail;
  3. use threads (
  4.     'yield',
  5.     'stack_size' => 64 * 4096,
  6.     'exit'       => 'threads_only'
  7. );
  8. use Thread;
  9. my $php = PHP::Interpreter->new;
  10. my $ref = tie *FH, "File::Tail", ( name => '/var/log/messages' );
  11. while (<FH>) {
  12.     if ( $_ =~ /sshd/ )                #checks for message from sshd
  13.     {
  14.         if ( $_ = !/Failed password for/ )    #check for a failed password attempt
  15.         {
  16.             $ind  = rindex( $str, 'from' );
  17.             $rind = rindex( $str, 'port' );
  18.             $ip = substr( $str, $ind + 4, $rind - $ind - 4 );
  19.             $thr = new Thread \&writems, $ip;
  20.             $thr->join();
  21.         }
  22.     }
  23. }
  24.  
  25. sub writems {
  26.     $php->include("writems.php");
  27.     $php->writeIP('ssqlserver','sshwatch','sshusr','sshpass',$_[0]);
  28.     print $php->eval(" echo Succeeded !");
  29. }

writems.php:
Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
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:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  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.  
  7. sub translate {
  8.     my $phish = AltaVista::BabelFish->new( { source => $_[0], target => $_[1] } );
  9.     return $phish->translate( $_[2] ) or die $phish->get_errstr();
  10. }

phpscript.php:
Syntax: [ Download ] [ Hide ]
Using php Syntax Highlighting
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. ?>


Nota 2007-01-19 08:39 @402

Perlero Nuevo
Registrado: 2006-05-19 10:26 @476
Mensajes: 7
Gracias explorer y monoswin voy a hacer pruebas con sus recomendaciones, cualquier cosa estaré en contacto....


Nota 2007-01-22 15:14 @676

Perlero Nuevo
Registrado: 2006-05-19 10:26 @476
Mensajes: 7
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.


Nota 2007-01-22 15:35 @691
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
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.


Nota 2007-01-23 12:57 @581

Perlero Nuevo
Registrado: 2006-05-19 10:26 @476
Mensajes: 7
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 está sobre Debian y la instalación de PHP5 con sus paquetes y las distribuciones...


Nota 2007-01-23 15:01 @667
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
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.


Nota 2007-01-23 19:51 @869
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
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
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
my $inc = "-I" . catdir ($phpdir, 'include') . " ".`$phpconfig --includes`;

por
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
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
Syntax: [ Download ] [ Hide ]
Using c Syntax Highlighting
#include <zend.h>

por
Syntax: [ Download ] [ Hide ]
Using c Syntax Highlighting
#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
Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
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.


Nota 2011-08-15 15:18 @679

Perlero Nuevo
Registrado: 2011-08-15 15:02 @668
Mensajes: 2
Re: Conectar una aplicación en Perl con una en PHP
Saludos a todos.

He estado leyendo cómo poder conectar Perl con PHP, pero al compilar php no hallo el libphp5, y obviamente no puedo continuar con lo descrito por explorer para poder instalar el PHP::Interpreter.

El mensaje que me sale al momento de instalar el PHP::Interpreter es

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Checking if your kit is complete...
Looks good
Note (probably harmless): No library found for -lphp5
Writing Makefile for PHP::Interpreter



Agradezco su colaboración de antemano.


Nota 2011-08-15 15:40 @694
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Conectar una aplicación en Perl con una en PHP
Bienvenido a los foros de Perl en español, michael_san.

No tendrías que instalar nada si tuvieras instalado el PHP v5 junto con su código fuente. O si acaso, el módulo php5 para el servidor web. En mis sistemas, es justo eso lo que ocurre:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
~# dpkg -L libapache2-mod-php5
/.
/etc
/etc/apache2
/etc/apache2/mods-available
/etc/apache2/mods-available/php5.load
/etc/apache2/mods-available/php5.conf
/etc/php5
/etc/php5/apache2
/usr
/usr/lib
/usr/lib/apache2
/usr/lib/apache2/modules
/usr/lib/apache2/modules/libphp5.so
/usr/lib/php5
/usr/lib/php5/20060613+lfs
/usr/share
/usr/share/man
/usr/share/man/man1
/usr/share/doc
/etc/php5/apache2/conf.d
/usr/share/doc/libapache2-mod-php5
La biblioteca es el fichero libphp5.so.

Pero esto no es suficiente para realizar la compilación. Son necesarios, además, los códigos fuente de PHP5. Y aquí es donde empieza el problema.

Te aconsejaría que siguieras las instrucciones de instalación de PHP::Interpreter.

La tarea no es nada sencilla... Estamos hablando de compilar php, que es toda una aventura (sobre todo porque tendrás que bajarte todas las bibliotecas extras que quieras añadir al intérprete de PHP).

¿Seguro que es PHP::Interpreter lo que necesitas? ¿No sería más sencillo ejecutar el intérprete php5 con el system() del Perl?

_________________
JF^D Perl programming


Nota 2011-08-15 17:19 @763

Perlero Nuevo
Registrado: 2011-08-15 15:02 @668
Mensajes: 2
Re: Conectar una aplicación en Perl con una en PHP
Muchas gracias por tu inmediata respuesta.

Necesito interactuar entre Perl y PHP, es decir, pasar datos del uno al otro.

El problema es que no deseo sobre-escribir mi instalación del PHP, por lo que quería seguir tu recomendación y sólo ejecutar mediante el make install-headers para poder conseguir solo la biblioteca y así instalar el PHP::Interpreter, pero me surge el error antes mencionado.

Saludos cordiales.


Nota 2011-08-15 17:23 @766
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Conectar una aplicación en Perl con una en PHP
Léete antes este hilo.

_________________
JF^D Perl programming


Responder al tema  [ 13 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO