Încerc să creez o arhivă de fișiere jurnal care să poată fi descărcate într-un formular care face un modul personalizat în Drupal 9.
În formular, utilizatorul poate schimba formatul arhivei, conform imaginii:
Iată mai jos codul meu:
descărcare funcție privată ($form, $form_state) {
$format = $form_state->getValue('format');
$folder = $form_state->getValue('folders');
$date = nou DataTime();
$data = $data->format("y_m_d_H_i_s");
$logsDirectory = \Drupal::service('sistem_fișier')
->realpath($folder . "://logs/");
//Preluați toate fișierele din folder.
$logs = glob($logsDirectory . "/*.log");
$archiveName = $data . $format;
$cale_arhivă = \Drupal::service('sistem_fișier')
->saveData('', 'temporary://' . $archiveName);
$arhivă = \Drupal::service('plugin.manager.archiver')
->getInstance(['filepath' => $archive_path]);
foreach ($log ca $log) {
$arhiva->adăugare($log);
}
$răspuns = nou BinaryFileResponse($archive_path);
$response->headers->set('Content-type', $this->getContentTypes($format));
$response->headers->set('Content-Disposition', 'attachment;filename="' . $archive_path . '"');
$form_state->setResponse($response);
}
Totul merge bine, am reușit să realizez un buton în acest fel care, apăsat, descarcă arhiva cu toate fișierele jurnal din interior.
Problema este că în interiorul acestui zip toate fișierele se află în calea lor absolută, în acest fel:
Acest lucru se datorează faptului că în clasa ArchiveInterface adăuga metoda acceptă doar un parametru, $cale_fișier
și nu este acceptată adăugarea unui al doilea parametru pentru a specifica numele fișierelor.
Cum as putea sa rezolv aceasta problema, reusind sa adaug in arhiva doar fisierele si nu toate subfolderele?