Jue Ene 18, 2007 9:14 am
|
 |
jrangel
Perlero Nuevo

|
Registrado: 19 May 2006
Mensajes: 5
|
|
| 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 ? |
|
|
|
Jue Ene 18, 2007 9:25 am
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 720
Ubicación: Buenos Aires
|
|
|
|
|
Checkea este módulo de Perl:
PHP::Session
Es justamente para leer y escribir sesiones de PHP...
Saludos |
|

Jue Ene 18, 2007 4:29 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
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. ?> |
|
|

Vie Ene 19, 2007 7:39 am
|
 |
jrangel
Perlero Nuevo

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

|
Registrado: 19 May 2006
Mensajes: 5
|
|
|
|
|
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. |
|

Lun Ene 22, 2007 2:35 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Mar Ene 23, 2007 11:57 am
|
 |
jrangel
Perlero Nuevo

|
Registrado: 19 May 2006
Mensajes: 5
|
|
|
|
|
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... |
|
Mar Ene 23, 2007 2:01 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|

Mar Ene 23, 2007 6:51 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
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
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. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|