Estoy usando PHPspreadsheet para crear un archivo xlsx en xampp. Quiero ejecutar trabajos cron en wordpress que exportarán automáticamente algunos pedidos y guardarán el archivo xlsx en el servidor xampp. Exporté con éxito un archivo usando $writer->save('php:\\output'); pero esto solo pregunta al usuario dónde descargar el archivo.
Quiero que el trabajo cron guarde el archivo sin preguntarle al usuario. es decir, wp-content/export/$filename
Encabezados:
header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="file.xls"'); header('Cache-Control: max-age=0');PHP:
$objWriter = new Xlsx($objX); ob_start(); $objWriter->save('php://output'); $xlsData = ob_get_contents(); ob_end_clean(); //returning response to javascript $response = array( 'file_name' =>'s.xlsx', 'op' => 'ok', 'file' => "data:application/vnd.ms-excel;base64,".base64_encode($xlsData), ); die(json_encode($response));JavaScript
jQuery.ajax({ url: ajaxurl, type: 'POST', dataType: 'json', data: { form_data :detail_info, action: 'frontend_action_without_file' // this is going to be used inside wordpress functions.php }, error: function(error) { }, success: function(response) { //console.log("Insert Success" + response.file); } }).done(function(data){ var $a = jQuery("<a>"); $a.attr("href",data.file); jQuery("body").append($a); $a.attr("download",data.file_name); $a[0].click(); }); });Debe crear otra página y usar una función para descargar un archivo de la URL (en este caso, su página que genera xlsx), ejemplo a continuación.
private function downloadFile($url, $path) { $newfname = $path; $file = fopen ($url, 'rb'); if ($file) { $newf = fopen ($newfname, 'wb'); if ($newf) { while(!feof($file)) { fwrite($newf, fread($file, 1024 * 8), 1024 * 8); } } } if ($file) { fclose($file); } if ($newf) { fclose($newf); } } downloadFile('https://yoururl.com/generateXlsx.php', 'xlsx/file.xlsx');después de esto solo ejecuta este shell
* 10 * * * php -f /home/dev/cronjobs/downloadfile.php este comando ejecuta su código todos los días a las 10 am /home/dev/cronjobs/downloadfile.php es la ruta del archivo.
PD. Puede usar https://crontab-generator.org/ para generar su shell