Pregunta:
Fecha: 26-01-2016 16:06:18
(En Español)
Tengo un archivo que requiere actualización diaria. Obviamente lo tendría que programar con cron.
El problema surge antes. Si lo hago manualmente, no hay problemas. Si lo hago con PHP los pasos aparentemente son correctos pero no llego a actualizar el nuevo archivo.
El código que tengo (y aparentemente cumple los pasos/mensajes "echo" pero no actualiza) es este:
El problema es algo más que la ruta ya que ni lo borra ni lo reemplaza
SOS y gracias Votos: 4 - Respuestas: 3 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
Descargar archivo externo y reemplazarlo[Resuelta]
Hola:Tengo un archivo que requiere actualización diaria. Obviamente lo tendría que programar con cron.
El problema surge antes. Si lo hago manualmente, no hay problemas. Si lo hago con PHP los pasos aparentemente son correctos pero no llego a actualizar el nuevo archivo.
El código que tengo (y aparentemente cumple los pasos/mensajes "echo" pero no actualiza) es este:
<?php $nombre_archivo = 'mi_archivo.xls'; unlink($nombre_archivo); echo 'Archivo eliminado <br>'; $destino ='mi_archivo.xls'; $origen = 'http://la_web_externa.es/descargar_archivo.do?tipoBusqueda=0'; file_put_contents($destino,file_get_contents($origen)); echo 'Archivo reemplazado'; ?>
El problema es algo más que la ruta ya que ni lo borra ni lo reemplaza
SOS y gracias Votos: 4 - Respuestas: 3 - Vistas: 14 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
Fecha: 26-01-2016 19:26:54 Hola Artzain, a simple vista se ve que el script PHP esta ok. Cuando dices "Si lo hago manualmente, no hay problemas", a qué te refieres? (a borrarlo manualmente o a ejecutar el script PHP manualmente?, estimo que es el primer caso).
¿Qué mensaje recibes si ejecutas el script PHP desde el navegado? (no desde el cron)
Si no obtienes mensaje de error, prueba agrengado arriba del script las siguientes líneas:
ini_set('display_errors', 1); error_reporting(-1);
Quedo al aguardo de tus comentarios.
Saludos! Votos: 5 - Link respuesta -
Fecha: 27-01-2016 06:14:07 Gracias Fernando.
Efectivamente me refería a ejecutar la página con el código expuesto.
En local (con xampp) funciona.
En el hosting fallan los permisos. Así que habrá que conversar con ellos y de paso habilitar el cron.
Saludos. Votos: 2 - Link respuesta -
Fecha: 27-01-2016 07:18:13 Hola Artzain, aquí adjunto tu código con algunos cambios: validaciones básicas y un aviso vía email ante una falla (los cambios son básico, pero creo que aportan valor al script).
//configuración $emailAdmin = 'admin@email.com'; $nombre_archivo = 'mi_archivo.xls'; //doy permisos al archivo antes de borrarlo (ver de ajustar a los permisos necesarios): chmod($nombre_archivo, 0644); //<-- por lo general estos son los permisos correctos, pero si no te funciona prueba con un 0777 if(!unlink($nombre_archivo)){ mail($emailAdmin, 'CRON actualización de archivo: '.$nombre_archivo, 'Fallo la eliminación del archivo'); exit; //corto el script } echo 'Archivo eliminado <br>'; $destino = $nombre_archivo; $origen = 'http://la_web_externa.es/descargar_archivo.do?tipoBusqueda=0'; if(!file_put_contents($destino, file_get_contents($origen))){ mail($emailAdmin, 'CRON actualización de archivo: '.$nombre_archivo, 'Fallo la creación del archivo'); exit; //corto el script } echo 'Archivo reemplazado';
¿Cómo calcular el número/permisos a utilizar en chmod()?
También te adjunto una lista de los permisos posibles para chmod(). Tal vez ya sepas como calcular los permismo, pero no esta de más recordar para quien no. El calculo es así: de la lista de permisos sumas los números correspondientes a los permisos que quieres aplicar y luego le agregas un cero delante, por ejemplo si queres que el dueño del archivo tenga permisos de lectura y ejecución, y el grupo y demás usuarios solo lectura sumas 400 + 200 + 40 + 4 = 644 y luego le agregas el cero delante, entonces el número a usar en chmod es 0644
//Lista de persmisos /* Valor - Permiso 400 - Owner Read 200 - Owner Write 100 - Owner Execute 40 - Group Read 20 - Group Write 10 - Group Execute 4 - Global Read 2 - Global Write 1 - Global Execute */
Saludos y buen código! Votos: 4 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión