¿Se puede copiar un fichero así?

X

xcodex

Hola!!, estoy trabajando con un código que me respondieron aquí, el cual funciona perfecto:
PHP:
<?php
require "../include/bd-connect.php";
$pdo = bd_connect();

//Salida de archivo
$exit2 = fopen("report.csv", "w");

//Consulta para crear reporte:
$sql_libros = $pdo->prepare("SELECT id,title FROM books WHERE active = 1 ORDER BY id ASC");
$sql_libros->execute();
$resultado_libros = $sql_libros->fetchAll();

foreach ($resultado_libros as $row) {
    fputcsv($exit2, array($row["id"], $row["title"]));
}

fclose($exit2);

// forzar la descarga del archivo.
$nombre_fichero = 'report.csv';
if (file_exists($nombre_fichero)) {
    if (copy($exit2, '/web/app/')) {
        echo 'copiado OK';
    }

    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename=" . $nombre_fichero);

    readfile($nombre_fichero);
    exit;
} else {
    echo "El fichero $nombre_fichero no existe";
}
?>

El archivo se genera y descarga perfectamente, pero no logro crear una copia del mismo en el servidor.
Como pueden ver, intenté agregar...
PHP:
    if (copy($exit2, '/web/app/')) {

        echo 'copiado OK';

    }
...pero no funcionó.

¿Alguna sugerencia?.
 

username666

Zeta
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
31 Jul 2019
Mensajes
1.673
Podrias probar con fopen

PHP:
// forzar la descarga del archivo.
$nombre_fichero = 'report.csv';
if (file_exists($nombre_fichero)) {
    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename=" . $nombre_fichero);

    readfile($nombre_fichero);

$csv_handler = fopen ('folder/path/report.csv','w');
fwrite ($csv_handler,$nombre_fichero );
fclose ($csv_handler);
echo 'Guardado report.csv en el directorio';

    exit;
} else {
    echo "El fichero $nombre_fichero no existe";
}
 

YeltsinReyes

Lambda
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
16 Feb 2010
Mensajes
2.938
Hola!!, estoy trabajando con un código que me respondieron aquí, el cual funciona perfecto:
PHP:
<?php
require "../include/bd-connect.php";
$pdo = bd_connect();

//Salida de archivo
$exit2 = fopen("report.csv", "w");

//Consulta para crear reporte:
$sql_libros = $pdo->prepare("SELECT id,title FROM books WHERE active = 1 ORDER BY id ASC");
$sql_libros->execute();
$resultado_libros = $sql_libros->fetchAll();

foreach ($resultado_libros as $row) {
    fputcsv($exit2, array($row["id"], $row["title"]));
}

fclose($exit2);

// forzar la descarga del archivo.
$nombre_fichero = 'report.csv';
if (file_exists($nombre_fichero)) {
    if (copy($exit2, '/web/app/')) {
        echo 'copiado OK';
    }

    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename=" . $nombre_fichero);

    readfile($nombre_fichero);
    exit;
} else {
    echo "El fichero $nombre_fichero no existe";
}
?>

El archivo se genera y descarga perfectamente, pero no logro crear una copia del mismo en el servidor.
Como pueden ver, intenté agregar...
PHP:
    if (copy($exit2, '/web/app/')) {

        echo 'copiado OK';

    }
...pero no funcionó.

¿Alguna sugerencia?.

tienes que usar el nombre del fichero y el nuevo nombre.
 

YeltsinReyes

Lambda
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
16 Feb 2010
Mensajes
2.938
Es que el archivo se genera y enseguida aparece la opción para descargarlo.

¿Debería especificarla allí?.
PHP:
$exit2 = fopen("report.csv", "w");

Al no saber donde se almacena no puedo copiarlo a otro directorio.

En el report.csv se escriben los datos?
si es así, entonce esto debería funcionarte!

PHP:
if (copy('report.csv', '/web/app/copia_report.csv')) {
        echo 'copiado OK';
}
 

YeltsinReyes

Lambda
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
16 Feb 2010
Mensajes
2.938
Completo!

PHP:
<?php

require "../include/bd-connect.php";

$pdo = bd_connect();

// Nombre del csv
$nombre_fichero = 'report.csv';

//Salida de archivo
$exit2 = fopen($nombre_fichero, "w");

//Consulta para crear reporte:
$sql_libros = $pdo->prepare("SELECT id,title FROM books WHERE active = 1 ORDER BY id ASC");
$sql_libros->execute();
$resultado_libros = $sql_libros->fetchAll();

foreach ($resultado_libros as $row) {
    fputcsv($exit2, array($row["id"], $row["title"]));
}

fclose($exit2);

// forzar la descarga del archivo.

if(file_exists($nombre_fichero)){
    
    if(copy($nombre_fichero, '/web/app/copia_'.$nombre_fichero)){
        echo 'copiado OK';
    }

    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename=".$nombre_fichero);

    readfile($nombre_fichero);
    exit;
    
} else {
    
    echo "El fichero ".$nombre_fichero." no existe";
    
}

?>
 

Stron

Eta
Diseñador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
11 Oct 2015
Mensajes
1.271
Es que el archivo se genera y enseguida aparece la opción para descargarlo.

¿Debería especificarla allí?.
PHP:
$exit2 = fopen("report.csv", "w");

Al no saber donde se almacena no puedo copiarlo a otro directorio.


Al no indicarle un directorio, se almacena en la misma carpeta donde esta tu php.

si quieres ponerle otra ruta agregala ahí mismo "fopen("carpeta/report.csv", "w");" este ejemplo es para una carpeta que se encuentre en el mismo directorio. si se encuentra la carpeta fuera de ese directorio, puedes usar " ../ " par salir de esa carpeta, y luego le indicas la carpeta que quieras.

"fopen("../carpeta/report.csv", "w");"
 
X

xcodex

Completo!

PHP:
<?php

require "../include/bd-connect.php";

$pdo = bd_connect();

// Nombre del csv
$nombre_fichero = 'report.csv';

//Salida de archivo
$exit2 = fopen($nombre_fichero, "w");

//Consulta para crear reporte:
$sql_libros = $pdo->prepare("SELECT id,title FROM books WHERE active = 1 ORDER BY id ASC");
$sql_libros->execute();
$resultado_libros = $sql_libros->fetchAll();

foreach ($resultado_libros as $row) {
    fputcsv($exit2, array($row["id"], $row["title"]));
}

fclose($exit2);

// forzar la descarga del archivo.

if(file_exists($nombre_fichero)){
   
    if(copy($nombre_fichero, '/web/app/copia_'.$nombre_fichero)){
        echo 'copiado OK';
    }

    header("Content-Type:text/csv; charset=utf-8");
    header("Content-Disposition: attachment; filename=".$nombre_fichero);

    readfile($nombre_fichero);
    exit;
   
} else {
   
    echo "El fichero ".$nombre_fichero." no existe";
   
}

?>

Al no indicarle un directorio, se almacena en la misma carpeta donde esta tu php.

si quieres ponerle otra ruta agregala ahí mismo "fopen("carpeta/report.csv", "w");" este ejemplo es para una carpeta que se encuentre en el mismo directorio. si se encuentra la carpeta fuera de ese directorio, puedes usar " ../ " par salir de esa carpeta, y luego le indicas la carpeta que quieras.

"fopen("../carpeta/report.csv", "w");"

Gracias a ambos, pero aún siguiendo esos pasos no logro que me funcione, supongo será porque lo estoy haciendo en localhost, seguiré intentando con un hosting.
 
X

xcodex

Al no indicarle un directorio, se almacena en la misma carpeta donde esta tu php.

si quieres ponerle otra ruta agregala ahí mismo "fopen("carpeta/report.csv", "w");" este ejemplo es para una carpeta que se encuentre en el mismo directorio. si se encuentra la carpeta fuera de ese directorio, puedes usar " ../ " par salir de esa carpeta, y luego le indicas la carpeta que quieras.

"fopen("../carpeta/report.csv", "w");"

Seguí intentando y no funcionaba. Hasta que probé de subir el sitio a mi hosting y ahí si funcionó. Por lo que todo da a entender que es un tema de permisos de Linux, en fin.
Solo agrego esto por si alguien tiene el mismo problema. :)
 

OmarCoder

Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
30 Sep 2014
Mensajes
187
Te doy un par de recomendaciones cuando trabajes con creación de ficheros, hace tanto creé un script que manejaba las cookies de miles de cuentas de twitter e igual me daba problema en algunos servidores:
1.- Usa __DIR__ como constante del directorio donde está el script, ya luego indicas si es en el mismo directorio tipo __DIR__.'/archivo.csv', en una carpeta superior __DIR__.'/../archivos/archivo.csv' o una carpeta inferior __DIR__.'/archivos/archivo.csv'
2.- Recuerda siempre cambiar los permisos, desde hosting no suele ser necesario, pero en linux puedes usar un "sudo chmod directorio 0644", con hacerlo en el directorio donde se crearán los archivos suele bastar, de últimas usas la flag "-r" para hacerlo de forma recursiva
 
X

xcodex

Te doy un par de recomendaciones cuando trabajes con creación de ficheros, hace tanto creé un script que manejaba las cookies de miles de cuentas de twitter e igual me daba problema en algunos servidores:
1.- Usa __DIR__ como constante del directorio donde está el script, ya luego indicas si es en el mismo directorio tipo __DIR__.'/archivo.csv', en una carpeta superior __DIR__.'/../archivos/archivo.csv' o una carpeta inferior __DIR__.'/archivos/archivo.csv'
2.- Recuerda siempre cambiar los permisos, desde hosting no suele ser necesario, pero en linux puedes usar un "sudo chmod directorio 0644", con hacerlo en el directorio donde se crearán los archivos suele bastar, de últimas usas la flag "-r" para hacerlo de forma recursiva
¡Muchas gracias por tus recomendaciones!.
Lo que hice fué:
Bash:
sudo adduser miusuario www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

No entiendo exactamente que es lo que hace la línea que contiene g+rwX pero funcionó así jajaja.
 

OmarCoder

Gamma
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Desde
30 Sep 2014
Mensajes
187
¡Muchas gracias por tus recomendaciones!.
Lo que hice fué:
Bash:
sudo adduser miusuario www-data
sudo chown -R www-data:www-data /var/www
sudo chmod -R g+rwX /var/www

No entiendo exactamente que es lo que hace la línea que contiene g+rwX pero funcionó así jajaja.
Mi conocimiento de Linux es limitado igualmente xd, pero por lo poco que conozco g+rwX significa que al g(rupo) le añades (+) los permisos r(ead) w(rite) y e(X)ecute, que son básicamente todos los permisos disponibles
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba