Foros del Web » Programando para Internet » PHP »

problema con fpdf online

Estas en el tema de problema con fpdf online en el foro de PHP en Foros del Web. Hola a todos, vengo a buscar sus consejos con un problemita que estoy teniendo... estoy probando la generacion de pdf con fpdf en un sitio. ...
  #1 (permalink)  
Antiguo 15/10/2012, 08:12
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 8 meses
Puntos: 1
problema con fpdf online

Hola a todos,
vengo a buscar sus consejos con un problemita que estoy teniendo...
estoy probando la generacion de pdf con fpdf en un sitio. Localmente con localhost, todo funcionaba perfectamente, generando pdfs con muchas imagenes e informacion, en base a favoritos.
Ahora que lo he subido, con un solo favorito no tiene problema y hace el popup del attachment. Se descarga y se abre correctamente.
Pero al sumar algunos mas, empiezan los errores que no logro solucionar. O bien tira errores, o se descarga y adobe reader me dice que no se puede ver porque el archivo esta dañado.
Se que el problema esta en las imagenes pero no logro entender porque.

el error en cuestion (a veces se repite cambiando la imagen):
"Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /.../fpdf/fpdf.php on line 1225

Warning: getimagesize(...) [function.getimagesize]: failed to open stream: php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution in /.../fpdf.php on line 1213
FPDF error: Missing or incorrect image file: ...
"

En local el pdf funciona perfeeectamente.. esto uso para exportarlo
Código:
$pdf->Output("pdf/".$filename_pdf, 'D');
El script de generacion es extenso, asique si fuera necesaria alguna otra informacion me avisan y la incluyo..

desde ya les agradezco cualquier aporte que puedan realizarme ya que estoy perdido y falto de tiempo!
  #2 (permalink)  
Antiguo 15/10/2012, 09:02
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: problema con fpdf online

mmm, pueden ser varias causas:

falta de permisos en las imágenes: si esto ocurre la librería no puede leer ni obtener información sobre la imágen, asegúrese al subirlas por FTP darle permisos sobre el usuario de PHP (generalmente www-data), o en el caso de UPLOADS aplicarle los mismos permisos, al menos la lectura para todos los usuario, no necesariamente www-data.

librería obsoleta en el servidor, verifique que libería usa y si la versión es acorde con la de su local

caracteres a la salida: asegúrese de que no se corrompa el PDF, evitando echo's innecesarios en el archivo que genera el PDF, eliminando el tag de cierre de PHP el cual es innesesario (?>), eliminando todo carácter al inicio y que quede solo el tag de apertura de PHP (<?php), ni DOCTYPE ni nada de eso, además de guardar el archivo en la codificación que use SIN BOM (muy importante)

esperamos su respuesta
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 15/10/2012, 10:59
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: problema con fpdf online

gracias maycolalvarez por tu respuesta!

estuve probando y las 2 ultimas soluciones (2 ultimos parrafos) no dieron resultado.
Con lo cual debes tener razon en el tema de los permisos.
Es un sitio de wordpress con lo cual el tema debe estar en los uploads que llama FPDF para incrustar.
Si bien todo usa ruta relativas, los attachments de wordpress usa absolutas. Nos e como podria sortear esto, he probado incluso dando permisos 777 a la carpeta uploads pero no (y tampoco era muy seguro que digamos)..

alguna idea?

el codigo que estaria dando el error (el que carga la imagen) es este:

Código:
$images =& get_children( 'post_type=attachment&post_mime_type=image&post_parent=' . $actual_id );
if ( empty($images) ) {
    // no attachments here
} else {
    $all_images_url = array();
    foreach ( $images as $attachment_id => $attachment ) {
        $image_path =  wp_get_attachment_image_src($attachment_id, $size = 'image-pdf', $permalink = false, $icon = false);
        array_push($all_images_url, $image_path[0]);
    }
}

//Images
$pos_x = 20;
$pos_y = $pdf->GetY();

for($r = 0; $r<sizeof($all_images_url); $r++){
    if($pos_x > 190){
        $pos_x = 20;
        $excede_y = $pos_y+43;
        if($excede_y > 250){
            $pdf->AddPage();
            $pos_y = 20;
        } else {
            $pos_y += 47;
        }
        
    }
    if($all_images_url != ""){
        $pdf->Image($all_images_url[$r], $pos_x, $pos_y, '', '', JPG);
    }
    $pos_x += 58;
}
$all_images_url = "";
quitandolo todo funciona..
  #4 (permalink)  
Antiguo 19/10/2012, 07:06
 
Fecha de Ingreso: marzo-2012
Mensajes: 102
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: problema con fpdf online

Por si alguno lo necesita, es un problema con los permisos de la carpeta upload en wordpress.. al acceder con la url absoluta http://... blockea la carga de imagenes para incrustar en el pdf.
Tienen que transformarla en la ruta absoluta dentro del servidor con la funcion wp_upload_dir(); con parametro basedir

Funcion en Codex de Wordpress

Aca el ejemplo:

Código:
$upload_dir = wp_upload_dir();
    $variable[$r][0] = str_replace('http://www.blabla.com.ar/wp-content/uploads', $upload_dir['basedir'], $variable, $count);
  #5 (permalink)  
Antiguo 19/10/2012, 07:45
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: problema con fpdf online

ya sé por donde puede venir el problema, php tiene una directiva: allow_url_fopen la cual si está activa le permite a PHP realizar la conexión remota para leer el archivo.

por lo tanto la has de tener desactivada, porque como me dices que WP te genera una URL absoluta, es obvio que PHP no puede leer el archivo remoto, aún así apunte al mismo servidor.

Tienes 2 opciones: activar allow_url_fopen o eliminar el domain de la ruta, me parece que la 2da opción es la ideal, ya que sólo necesitas hacer un str_replace de las rutas sobre el dominio básico de tu sitio, además de hacerlo eficiente.

en cambio si alojas las imágenes en otros servers, no te queda otra que activar la directiva, pero si tu hosting NO te lo permite, tendrás que recurrir a una petición remota explicita, la cual puedes conseguir usando la librería cURL entre otras.

espero haber sido claro, esperamos tu respuesta, saludos
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...

Etiquetas: fpdf, imagenes
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 15:03.