• Publicidad

Conectar una aplicación en Perl con una en PHP

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Conectar una aplicación en Perl con una en PHP

Notapor jrangel » 2007-01-18 10:14 @468

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 ?
jrangel
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-05-19 10:26 @476

Publicidad

Notapor monoswim » 2007-01-18 10:25 @475

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

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

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer » 2007-01-18 17:29 @770

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:
Sintáxis: [ Descargar ] [ Ocultar ]
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. }
Coloreado en 0.017 segundos, usando GeSHi 1.0.8.4

writems.php:
Sintáxis: [ Descargar ] [ Ocultar ]
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. ?>
Coloreado en 0.039 segundos, usando GeSHi 1.0.8.4


Segundo ejemplo. Desde un script php pedir a Babelfish una traducción, usando un script Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
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. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

phpscript.php:
Sintáxis: [ Descargar ] [ Ocultar ]
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. ?>
Coloreado en 0.016 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jrangel » 2007-01-19 08:39 @402

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

Notapor jrangel » 2007-01-22 15:14 @676

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

Notapor explorer » 2007-01-22 15:35 @691

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor jrangel » 2007-01-23 12:57 @581

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

Notapor explorer » 2007-01-23 15:01 @667

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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2007-01-23 19:51 @869

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
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $inc = "-I" . catdir ($phpdir, 'include') . " ".`$phpconfig --includes`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

por
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $inc = "-I" . catdir ($phpdir, 'include','php') . " ".`$phpconfig --includes`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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
Sintáxis: [ Descargar ] [ Ocultar ]
Using c Syntax Highlighting
#include <zend.h>
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

por
Sintáxis: [ Descargar ] [ Ocultar ]
Using c Syntax Highlighting
#include <Zend/zend.h>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Desde luego, es mucho más fácil editar el Makefile de PHP-Interpreter e ir a la línea y poner
Sintáxis: [ Descargar ] [ Ocultar ]
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
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Conectar una aplicación en Perl con una en PHP

Notapor michael_san » 2011-08-15 15:18 @679

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

Sintáxis: [ Descargar ] [ Ocultar ]
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
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4



Agradezco su colaboración de antemano.
michael_san
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2011-08-15 15:02 @668

Siguiente

Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados