Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2008, 17:04
Avatar de julianmejio
julianmejio
 
Fecha de Ingreso: agosto-2005
Ubicación: Medellín, Antioquia
Mensajes: 88
Antigüedad: 18 años, 8 meses
Puntos: 3
Exclamación Fatal error al tratar de usar "eval()"

Hola.
Tengo un problema poco molesto, y se trata sobre el uso de la función eval().
Estoy haciendo una aplicación web que carga códigos que están en un respositorio de internet, accedido mediante un servicio web. El problema es que no puedo usar la función eval() para ejecutar dicho código porque me arroja un fatal error donde me dice que la función que estoy intentando usar es desconocida:
Cita:
Fatal error: Call to undefined function header() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\X_TMP_SRV_LOCAL_P\base \php\class.WSRC-Req.php(146) : eval()'d code on line 1
¿Cómo así que la función header() no está definida?. Estoy trabajando (las pruebas) en un servicio local de Apache bajo windows: Apache/2.2.9 (Win32) mod_ssl/2.2.9 OpenSSL/0.9.8h PHP/5.2.6 con libmysql.dll activo y funcionando. Siempre me ha funcionado bien en todos los aspectos menos cuando utilizo eval() (esta no es la primera vez que me pasa ). Otros detalles técnicos son:
  1. El código a evaluar se guarda codificado en base64 en una variable dentro del mismo código. Cuando evalúo el código, obviamente decodifico antes de evaluar.
  2. El código a evaluar no tiene etiquetas php (<?php .. ?>), porque en definitiva no las necesita
  3. Hice pruebas montando exactamente el mismo código en otra variable y ejecutándolo, y me funcionó, pero cuando intento ejecutar el código recuperado desde el servicio web me arroja ese error absurdo.
  4. Lo probé en el servidor de internet, donde va a estar montado en definitiva, y tampoco funcionó, así que no debe afectar en que sea Windows, o un servicio local, o lo que sea, sino primero que todo en la implementación.
  5. Ya he probado escapando las comillas, comillas simples, signos "$", y nada que funciona.

Aquí les dejo el código de la implementación, y pues, el servicio web si es una caja negra, pero igualmente funciona, así que debe ser problema de alguna de estas líneas:

Código PHP:
// Después de varios requires propios del cliente del servicio web, envía una petición a éste y devuelve todo un paquete con códigos.
$paquete $servC->EnviarPeticion();
// El código llega codificado en base64, así que lo decodifico.
$cod base64_decode($paquete);
// Y pues, después de tanto probar, tengo que ver si es problema del código, pero es un código normal y natural de php, como cualquier otro
echo $cod;
// Y evalúo el código, pero me sale el error.
eval($cod);

// El código evaluado es: header('location: index'); 
Debería, por lo menos para mi caso, reenviarme a una otra página dentro del sitio, pero lo único que dice es que header() no está definida, y bueno, intenté copiar el mismo código en una variable dentro del mismo script anterior, y ahí sí me dio, pero el problema es que ese código no siempre va a ser el mismo, y no sé cuándo va a cambiar (todo depende del servicio web), así que no puedo dármelas de que copio ese código y ya lo ejecuto y hago de cuenta que nada pasó. Necesito alguna solución.
Gracias por el tiempo, y si pueden ayudarme, no caería mal

Les envío la URL donde se encuentra la implementación del código, que debería evaluar OK y enviar a una página que no existe (index.php), o sea, que debería arrojar un error 404 si está bien, no debería aparecer ese Fatal Error:

http://74.220.207.157/~grupodsi/~productos/idem/base/php/class.WSRC-Req.php

NOTA:
  1. El array del principio es control, nada tiene que ver con el problema.
  2. La línea después del array es el código ya recuperado que hay que ejecutar, ¡y nunca se ejecuta!.
  3. El Fatal Error demuestra que no se ejecuta.
  4. Se ve más elegante en el código fuente.

Última edición por julianmejio; 12/08/2008 a las 17:16 Razón: Completar información relevante al problema.