Necesito crear un archivo, estoy encerrado en un loop...

  • Autor Autor xcodex
  • Fecha de inicio Fecha de inicio
X

xcodex

Hola!, primero que nada quiero pedir disculpas ya últimamente estoy preguntando mucho, pero los tiempos me corren jaja.

La cuestión..

Tengo un script que genera un reporte cvs:
PHP:
<?php
    require "include/bd-connect.php";
    $pdo = bd_connect();

    //Header
    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename='report.cvs'");

    //Salida de archivo
    $exit = fopen("php://output", "w");

    //Encabezados:
    fputcsv($exit, array('id', 'Title', 'Author'));

    //Consulta para crear reporte:
    $sql_libros = $pdo->prepare("SELECT id,title,author FROM books WHERE active = 1 ORDER BY id ASC");
    $sql_libros->execute();
    $resultado_libros = $sql_libros->fetchAll();
    foreach ($resultado_libros as $row) {
        fputcsv($exit, array($row["id"],
        $row["title"],
        $row["author"]));
    }

    fclose($exit);
?>

El reporte se genera, y me aparece la opción para descargarlo. Todo genial hasta aquí.
Lo que me gustaría hacer es que dicho reporte se copie a una carpeta del servidor, probé con copy($exit, ruta_destino) pero nada sucede.
¿Alguna sugerencia?.
 
amigo es un foro nadie deberia molestarse porque preguntes, asi que no tienes porque pedir diisculpas
 
Segun vi, el fichero de salida no es $exit es:

report.cvs

Entonces ese es el que quiere copiar, no?

seria

PHP:
copy("report.cvs", ruta_destino);
 
Segun vi, el fichero de salida no es $exit es:

report.cvs

Entonces ese es el que quiere copiar, no?

seria

PHP:
copy("report.cvs", ruta_destino);

Intenté, pero me aparece: copy(report.cvs): failed to open stream: No such file or director.
Por lo que entiendo no se está creando el archivo report.cvs en el servidor, solo lo descarga directamente. 🙁🙁
 
Intenté, pero me aparece: copy(report.cvs): failed to open stream: No such file or director.
Por lo que entiendo no se está creando el archivo report.cvs en el servidor. 🙁🙁
Pones que se está creando sin problemas, lo que dice ahi es que no encuentra el archivo, lo tienes que crear no solo hacerlo para descargar.

Tienes que guardarlo en algún lugar primero y después copiarlo

con fwrite

Saludos
 
agrega dos fopen, uno que creará la copia en el servidor, y el otro como lo tienes tu. luego llama a los dos en el foreach.

Insertar CODE, HTML o PHP:
<?php
$exit1 = fopen('carpeta/fichero.csv', 'w');
$exit2 = fopen("php://output", "w");

foreach ($resultado_libros as $row) {
        fputcsv($exit1, array($row["id"],$row["title"],$row["author"]));
        fputcsv($exit2, array($row["id"],$row["title"],$row["author"]));
    }
?>
 
¡Funcionó!, muchísimas gracias a todos 😎