Foros del Web » Programando para Internet » PHP »

Variable-Función

Estas en el tema de Variable-Función en el foro de PHP en Foros del Web. Es parte de una funcion que crea thumbnails, y uso una variable que contiene un nombre valido de funcion. Al final de la ejecucion contiene ...
  #1 (permalink)  
Antiguo 09/01/2004, 12:38
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Variable-Función

Es parte de una funcion que crea thumbnails, y uso una variable que contiene un nombre valido de funcion.

Al final de la ejecucion contiene
$function_to_read = 'ImageCreateFromJPEG';

Si realmente no uso la variable-funcion, sinó la función imagecreatefromJPEG() me funciona bien, en cambio usando la variable funcion, no.

Código PHP:
$prop=GetImageSize($ruta);
    
$img_ancho $prop[0];
    
$img_alto  $prop[1];
    
$img_tipo  $prop[mime];

    
$gd_function_suffix = array(
                                
'image/pjpeg'=>'JPEG',
                                
'image/jpeg' =>'JPEG'
                                
'image/gif'  =>'GIF' ,
                                
'image/bmp'  =>'WBMP',
                                
'image/x-png'=>'PNG');
                                
    
$function_suffix $gd_function_suffix[$img_tipo];
    
$function_to_read 'ImageCreateFrom'.$function_suffix;
    
$function_to_write 'Image'.$function_suffix;
    
    
$fuente $function_to_read($ruta); 
    
//$fuente = ImageCreateFromJPEG($ruta); 
  #2 (permalink)  
Antiguo 09/01/2004, 13:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Tendrias que usar eval() para ejecutar tu $variable como código o bien usar el clásico juego de swich() para las las diferentes funciones a aplicar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 09/01/2004, 13:28
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
I cómo es que este codigo de test funciona sin eval?
variables que contienen nombre de funciones php se pueden llamar de esta manera tan peculiar.

Código PHP:
<html>
<body>

<?php

$str
="Hola Adios";

$array1=explode(' ',$str);

$funcvar='explode';
$array2=$funcvar(' ',$str);

print_r($array1);
print(
'<br>');
print_r($array2);
print(
'<br>');

?>
</body>
</html>
  #4 (permalink)  
Antiguo 09/01/2004, 13:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues "no sé" ... en teoría para eso está eval() .. no conozco tan profundamente como funciona el interprete PHP a ese nivel.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/01/2004, 16:02
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

¿Te da algun mensaje de error? Porque he hecho una prueba rapida y si me la reconoce como esa funcion. Supongo que si has validado que realmente toma el valor correcto $function_to_read y que esa variable esta escrita igual en todos los sitios.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 09/01/2004, 22:06
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
I no da ningun error de php, sólo las imagenes que no aparecen.
Si claro, que lo he comprovado le he passado el debugger, y esta perfecto. Tal como tiene que ser. Pero en el navegador, no envia la imagen o no se que debe de passar pero no salen las imagenes como si el src='....' no fuera el correcto. el Source es una llamada a esta funcion php.

Pondré el código entero:
if ($_GET['src']) {
$valores = array('method','ruta','ancho','alto','guardar','ca lidad');
$i=0;
foreach ($_GET as $key=>$val) {
$$valores[$i++]=$val;
}
unset($i,$key,$val);
if (!$calidad) $calidad = 85;

$prop=GetImageSize($ruta);
$img_ancho = $prop[0];
$img_alto = $prop[1];
$img_tipo = $prop[mime];

$gd_function_suffix = array(
'image/pjpeg'=>'JPEG',
'image/jpeg' =>'JPEG',
'image/gif' =>'GIF' ,
'image/bmp' =>'WBMP',
'image/x-png'=>'PNG');

$function_suffix = $gd_function_suffix[$img_tipo];
$function_to_read = 'ImageCreateFrom'.$function_suffix;
$function_to_write = 'Image'.$function_suffix;

$fuente = $function_to_read($ruta);
$fuente = ImageCreateFromJPEG($ruta);
//$imgAncho = ImageSx($fuente);
//$imgAlto =ImageSy($fuente);
$func='imagecreatetruecolor';
if (!Function_Exists($func)) {
$imagen=ImageCreate($ancho,$alto);
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$a lto,$img_ancho,$img_alto);
} else {
$imagen = ImageCreateTrueColor($ancho,$alto);
if ($metod) {
ImageCopyResized($imagen,$fuente,0,0,0,0,$ancho,$a lto,$img_ancho,$img_alto);
} else {
ImageCopyResampled($imagen,$fuente,0,0,0,0,$ancho, $alto,$img_ancho,$img_alto);
}
}

$nombre=BaseName($_GET['src']);
if (!$guardar) {
Header("Content-type: $img_tipo");
Header("Content-Disposition: inline; filename=$nombre;");
} else {
$guardarendisco=$nombre;
}
//$function_to_write($imagen,$guardarendisco,$calida d);
ImageJpeg($imagen,$guardarendisco,$calidad);
imageDestroy($imagen);
  #7 (permalink)  
Antiguo 09/01/2004, 22:10
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 13 años, 11 meses
Puntos: 0
Lo pongo otra vez que no ha salido identado:

Código PHP:
if ($_GET['src']) {
    
$valores = array('method','ruta','ancho','alto','guardar','calidad');
    
$i=0;
    foreach (
$_GET as $key=>$val) {
        $
$valores[$i++]=$val;
    }
    unset(
$i,$key,$val);
    if (!
$calidad$calidad 85;

    
$prop=GetImageSize($ruta);
    
$img_ancho $prop[0];
    
$img_alto  $prop[1];
    
$img_tipo  $prop[mime];

    
$gd_function_suffix = array(
                                
'image/pjpeg'=>'JPEG',
                                
'image/jpeg' =>'JPEG'
                                
'image/gif'  =>'GIF' ,
                                
'image/bmp'  =>'WBMP',
                                
'image/x-png'=>'PNG');
                                
    
$function_suffix $gd_function_suffix[$img_tipo];
    
$function_to_read 'ImageCreateFrom'.$function_suffix;
    
$function_to_write 'Image'.$function_suffix;
    
    
$fuente $function_to_read($ruta); 
    
//$fuente = ImageCreateFromJPEG($ruta);
    
$func='imagecreatetruecolor';
    if (!
Function_Exists($func)) { 
        
$imagen=ImageCreate($ancho,$alto);
        
ImageCopyResized$imagen$fuente0,0$ancho$alto$img_ancho$img_alto);
    } else {
        
$imagen ImageCreateTrueColor($ancho,$alto);
        if (
$metod) {
            
ImageCopyResized$imagen$fuente0000$ancho$alto$img_ancho$img_alto);
        } else {
            
ImageCopyResampled$imagen$fuente0000,  $ancho$alto$img_ancho$img_alto); 
        }
    }
    
    
$nombre=BaseName($_GET['src']);
    if (!
$guardar) {
        
Header("Content-type: $img_tipo");
        
Header("Content-Disposition: inline; filename=$nombre;");
    } else {
        
$guardarendisco=$nombre;
    }
    
$function_to_write($imagen$guardarendisco$calidad);
    
//ImageJpeg($imagen,$guardarendisco,$calidad);
    
imageDestroy($imagen); 
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.