He buscado en la web durante 2 días y no puede encontrar la respuesta.

Estoy tratando de crear una rutina que muestra los archivos en un sitio que me de control, y permite que el usuario descargue un archivo seleccionado a una unidad local.

Estoy utilizando el siguiente código. Cuando me quite el comentario de la eco de las declaraciones, se muestra la fuente correcta y directorios de destino, el tamaño de archivo correcto y el eco después de la fclose muestra el VERDADERO.

Cuando me echo el archivo de origen ($datos), se muestra el contenido correcto.

Los $FileName variable contiene el nombre correcto, el cual es .doc/.docx o .pdf. He probado ambas y ni guarda nada en el directorio de destino, o en cualquier otro lugar en mi máquina.

La ruta de acceso de origen ($path) está detrás de un inicio de sesión, pero ya estoy conectado.

Alguna idea de por qué este es el error al escribir el archivo?

Gracias,
Hank

Código:

$path = "https://.../Reports/ReportDetails/$FileName";
/* echo "Downloading: $path"; */
$data = file_get_contents($path); /* echo "$data"; */
$dest = "C:\MyScans\".$FileName; /* echo "<br />$dest"; */
$fp = fopen($dest,'wb');
if ( $fp === FALSE ) echo "<br />Error in fopen";
$result = fwrite($fp,$data);
if ( $result === FALSE ) echo "<br />Can not write to $dest";
/* else echo "<br />$result bytes written"; */
$result = fclose($fp); /* echo "<br />Close: $result"; */
  • ¿El servidor sentarse en su máquina local?
InformationsquelleAutor Hank | 2012-07-06

2 Comentarios

  1. 2

    Creo (!) que estás un poco confundido.

    Que usted ha mencionado

    permite que el usuario descargue un archivo seleccionado a una unidad local.

    Pero el camino "C:\MyScans\\".$FileName es es la ruta de acceso en el servidor de la web, no la ruta de acceso en la computadora del usuario.

    Después de hacer lo que sea para recuperar el archivo deseado desde el sitio web remoto:

    1. Crear un archivo y redirigir al usuario a para el archivo mediante el uso de header('Location: /path/to/file.txt');
    2. Insertar el siguiente encabezado:

      header('Content-disposition: attachment; filename=path/to/file.txt');

    Obliga al usuario a descargar el archivo. Y eso es probablemente lo que usted desea hacer

    Nota: he usado la extensión de txt, pero usted puede utilizar cualquier extensión

    • Gracias, esta trabajado. Inicialmente, he utilizado las líneas de encabezado con readfile(), pero no podría llegar a trabajar. Entonces traté de file_get_contents, que también seeme de no trabajar. Luego probé con el rizo de la solución anterior, que también parecía fallar. Yo había mirado en el servidor para los archivos, pero echaba de menos. Su respuesta fue perfecto, en el que destacó de mi problema. Entonces era un asunto simple para obtener el nombre de ruta de acceso correcta. Gracias montones. –Hank
    • Pero ahora me encuentro con que los archivos (por lo general .pdf), que están muy bien en el servidor web, están dañados en mi máquina. Que pantalla bien desde el servidor web, pero yo a recibir un archivo dañado y no puede repararse » mensaje en mi casa de la máquina. También, el tamaño del archivo ha aumentado de 44 KB de 57 KB. Podría ser que es la adición de la información de encabezado del archivo? (Lo mismo ocurrió con un .archivo docx.)
    • Estoy feliz de haber ayudado a usted. su último problema se debe a otra pregunta. Creo que el problema es con la codificación. intente agregar utf8_encode().
    • Nadav, resulta que el contenido adicional se agrega al final del archivo descargado fue el código html de salida a la página web después de que el archivo se transfiere (I mostrar al usuario una lista de archivos disponibles para descargar, haga clic en uno y es descargado, volviendo a la lista). Necesitaba un ob_start() antes y ob_end_flush() después para que esto no suceda. Gracias por tu ayuda. –Hank
  2. 1

    se puede utilizar php Curl:

    <?php
        $url  = 'http://www.example.com/a-large-file.zip';
        $path = '/path/to/a-large-file.zip';
    
        $fp = fopen($path, 'w');
    
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FILE, $fp);
    
        $data = curl_exec($ch);
    
        curl_close($ch);
        fclose($fp);
    • Gracias, pero esto no lo hace cualquiera, pero el siguiente comentario resuelto el problema – me estaba guardando el archivo en mi servidor, no a mi máquina local. (Yo había mirado para los archivos allí, pero echaba de menos.)

Dejar respuesta

Please enter your comment!
Please enter your name here