Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Enlace a archivo para descargar.

Estas en el tema de Enlace a archivo para descargar. en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Un Saludo al foro, Estoy empezando con ZF y seguramente sea una tontería pero yo aun no termino de dar con la tecla, el caso ...
  #1 (permalink)  
Antiguo 27/05/2010, 09:34
 
Fecha de Ingreso: diciembre-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
Enlace a archivo para descargar.

Un Saludo al foro,

Estoy empezando con ZF y seguramente sea una tontería pero yo aun no termino de dar con la tecla, el caso es que quiero mostrar una tabla en donde uno de sus campos contiene direcciones que apuntan a archivos para su descarga. Cuando muestro el resultado por pantalla el comportamiento de la aplicación es cualquiera menos el esperado (Pretendo que cuando se pulse sobre el enlace salga el cuadro de "Guardar"). Dentro de la estructura de mi proyecto guardo los archivos en la carpeta /file/catalogos/[archivos].pdf. La carpeta file esta dentro de /public siendo esto la primera duda. ¿/public es el lugar más adecuado?

Para mostrar el contenido, pongo en el index.phtml del controlador lo siguiente

Código:
<table>
	<tr>
		<th>Nombre</th>
		<th>Tipo</th>
		<th>Ruta</th>
		<th>Observaciones</th>
	</tr>
	<?php 
	foreach($this->documento as $documento) : ?>
	<tr>
		<td><?php echo $this->escape(utf8_encode($documento  >nombre));></td>
		<td><?php echo $this->escape($documento->tipo);?></td>
		<td><a href='<?php echo $this->baseUrl().'/file/catalogo/prueba.pdf';?>'>Aqui</a></td>
		<td><?php echo $this->escape(utf8_encode($documento->obs));?></td>
	</tr>
	<?php endforeach; ?>
</table>
Pero me da un error del tipo

Cita:
( ! ) Zend_Controller_Dispatcher_Exception: Invalid controller specified (file) in /opt/lampp/htdocs/listado/library/Zend/Controller/Dispatcher/Standard.php on line 242
Call Stack
# Time Memory Function Location
1 0.0003 316328 {main}( ) ../index.php:0
2 0.0743 4048432 Zend_Application->run( ) ../index.php:26
3 0.0743 4048432 Zend_Application_Bootstrap_Bootstrap->run( ) ../Application.php:366
4 0.0744 4048604 Zend_Controller_Front->dispatch( ) ../Bootstrap.php:97
He probado a crear un controlador "bajardocumento" que al invocarlo contiene

Código:
[...]
return file_get_contents('http://listado.local/file/catalogo/prueba.pdf');
[...]
Pero me devuelve un error similar.
He buscado por Internet pero no encuentro ninguna solución.Si alguien se ha encontrado con el mismo problema o se sabe de algun tutorial o algo me seria de gran ayuda. Desde ya muchas gracias por vuestro tiempo.

Un Saludo
M.
  #2 (permalink)  
Antiguo 27/05/2010, 09:43
Avatar de nohumans  
Fecha de Ingreso: mayo-2010
Ubicación: España
Mensajes: 5
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Enlace a archivo para descargar.

Hola!
Eso pasa porque el archivo a descargar esta dentro de las directrices de tu .htaccess donde rediriges todo a ../index.php/, para que funcione dentro del sistema ZF.

Una solucion sencilla es disponer los archivos a descargar en un directorio con un .htaccess con la directiva
Código Apache:
Ver original
  1. RewriteEngine Off

El hacer un controlador que te devuelva el archivo es una solucion mas elegante pero implica mas trabajo, desactivar layuts, mandar cabeceras....

Espero que te sirva.
Un Saludo

Última edición por GatorV; 27/05/2010 a las 12:04
  #3 (permalink)  
Antiguo 27/05/2010, 12:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Enlace a archivo para descargar.

Otra opción es ver como es que tienes tu .htaccess yo el mio lo tengo:
Código:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
Eso hace que solo los archivos que no existen sean enviados a index.php y al router de Zend.
  #4 (permalink)  
Antiguo 27/05/2010, 12:33
Avatar de nohumans  
Fecha de Ingreso: mayo-2010
Ubicación: España
Mensajes: 5
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Enlace a archivo para descargar.

Mira Un ejemplo de envio por controlador sacado de mis fuentes


Código PHP:
Ver original
  1. class News_ImageController extends Zend_Controller
  2. {
  3.  
  4.     public function getimgAction()
  5.     {
  6.         $id = $this->_getParam('id');
  7.         $file = $this->_dirBase . '/cat/';
  8.         if (file_exists($file.$id.'.jpeg')) {
  9.             $this->view->data = file_get_contents($file.$id.'.jpeg');
  10.         } else {
  11.           $this->view->data = file_get_contents(HTTP_IMAGES.'/blank.jpeg');
  12.         }
  13.     }


y el script de la vista


Código PHP:
Ver original
  1. <?php
  2.     header("Cache-Control: ");
  3.     header("Pragma: ");
  4.     header('Content-type: image/jpeg');
  5.     echo  $this->data ;
  6.     exit;


Saludos
noHumans
(......)
  #5 (permalink)  
Antiguo 28/05/2010, 02:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
De acuerdo Respuesta: Enlace a archivo para descargar.

Muchas gracias por vuestras respuestas. El caso es que lo he probado todo y sin resultado (menos el algoritmo de nohumans que me llevará un poco más de tiempo implementarlo).
No sé si lo estoy haciendo mal, pero el caso es que he creado un nuevo directorio dentro de application , seria /file/catalogo/prueba.pdf. Primero probé con el .htaccess de nohumans con la directiva RewriteEngine Off y lo coloque en /file pero no funcionó, luego en /catalogo pero el resultado fue el mismo. Luego he probado con el .htaccess de GatorV y siguiendo el mismo procedimiento el resultado fue el mismo, no me funcionó. En todos los casos obtengo el mismo error

Cita:
( ! ) Zend_Controller_Dispatcher_Exception: Invalid controller specified (file) in /opt/lampp/htdocs/listado/library/Zend/Controller/Dispatcher/Standard.php on line 242
Call Stack
# Time Memory Function Location
1 0.0002 316328 {main}( ) ../index.php:0
2 0.0628 4048432 Zend_Application->run( ) ../index.php:26
3 0.0628 4048432 Zend_Application_Bootstrap_Bootstrap->run( ) ../Application.php:366
4 0.0630 4048604 Zend_Controller_Front->dispatch( ) ../Bootstrap.php:97
Para arrojar más información por si sirviera, estoy trabajando con Eclipse sobre Xampp 1.7.3a y ZF 1.10. En la configuración del archivo http.conf tengo confirgurado el sitio de la siguiente manera (configuracion propuesta por ZF al crear el proyecto con las Zend_tool)

Cita:
<VirtualHost *:80>
DocumentRoot "/opt/lampp/htdocs/listado/public"
ServerName listado.local

# This should be omitted in the production environment
SetEnv APPLICATION_ENV development

<Directory "/opt/lampp/htdocs/listado/public">
Options Indexes MultiViews FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

</VirtualHost>
Muchas gracias nohumans y GatorV por vuestras respuestas . Me pongo con el código de nohumans a ver si tengo más suerte.

Un Saludo
M.
  #6 (permalink)  
Antiguo 28/05/2010, 08:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Enlace a archivo para descargar.

El .htaccess que te indique donde lo pusiste? en public o en files?

Saludos.
  #7 (permalink)  
Antiguo 28/05/2010, 09:28
 
Fecha de Ingreso: diciembre-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Enlace a archivo para descargar.

Probé todas las posibilidades

Prueba 1. /public/file, lo puse a nivel de file
Prueba 2. /application, a nivel de application
Prueba 3. /application/file a nivel de file

En todas las pruebas puse el .htaccess que me indicaste y tambien lo probé con el RewriteEngine Off como me comento nohumans. Además (por si las moscas) en cada prueba refrescaba apache (sudo ./lampp reloadapache)

Un Saludo.
M.
  #8 (permalink)  
Antiguo 28/05/2010, 10:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Enlace a archivo para descargar.

Pon el .htaccess que te indique en /public.
  #9 (permalink)  
Antiguo 31/05/2010, 01:25
 
Fecha de Ingreso: diciembre-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Enlace a archivo para descargar.

Hola GatorV. No me ha funcionado. Ese .htaccess lo tenia previamente cuando creé el proyecto con las Zend_Tool. Estoy a ver si con este...

Cita:
RewriteEngine On
RewriteRule !\.(js|ico|gif|jpg|png|css|pdf)$ index.php
...tengo más suerte

Muchas Gracias GatorV
  #10 (permalink)  
Antiguo 31/05/2010, 01:49
 
Fecha de Ingreso: diciembre-2009
Mensajes: 12
Antigüedad: 14 años, 11 meses
Puntos: 0
Respuesta: Enlace a archivo para descargar.

ultracagada!! por mi parte. Funcionaba desde el primer momento con el .htaccess que me indicaste, el problema era que tenia configurado el proyecto para que ejecutase otra copia de un proyecto antiguo similar....

Gracias por vuestro tiempo y disculpad.

Un Saludo.
M.

Etiquetas: enlace
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 07:55.