Я использую эту библиотеку для создания .xlsx
файлов из моего PHP
скрипта.
Следуя этому руководству, я попытался экспортировать некоторые данные в файл с именем hello.xlsx
.
Однако, это ошибки с сообщениями ниже:
Предупреждение: ZipArchive :: close (): Ошибка создания временного файла: отказано в доступе в вендоре / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer
Неустранимая ошибка: Uncaught PhpOffice \ PhpSpreadsheet \ Writer \ Exception: Не удалось закрыть zip-файл hello.xlsx. в вендоре / phpoffice / phpspreadsheet / src / PhpSpreadsheet / Writer / Xlsx.php в строке 399
PhpOffice \ PhpSpreadsheet \ Writer \ Exception: Не удалось закрыть zip-файл hello.xlsx. в /vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Writer/Xlsx.php в строке 399
Файл не существует до выполнения, поэтому я вроде как получаю ошибки. Я всегда мог попытаться touch hello.xlsx
и изменить свой сценарий, чтобы прочитать этот файл и добавить данные, но на самом деле я пытаюсь написать новый файл каждый раз, когда запускается сценарий.
Вот мой (упрощенный) код:
require_once 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'foo');
$sheet->setCellValue('B1', 'bar');
$sheet->setCellValue('C1', 'foobar');
$sheet->setCellValue('D1', 'trey is the best');
$writer = new Xlsx($spreadsheet);
$writer->save('hello.xlsx');
Переходя к этим строкам в ошибке, покажите этот фрагмент кода:
// Close file
if ($zip->close() === false) {
throw new WriterException("Could not close zip file $pFilename.");
}
Для меня это не совсем полезное сообщение для отладки того, что идет не так.
Я нашел несколько ТАК сообщений на этом:
Принятый ответ, к сожалению, не сработал (изменил код на $writer->save($_SERVER['DOCUMENT_ROOT']. '/hello.xlsx')
).
Я также попробовал функцию SaveFiaTempFile
, но она просто выводит кучу забавных персонажей.
Я также не хочу устанавливать для моей папки / файла права доступа 777, поскольку это безумие в мембране.
Этот принятый ответ на самом деле не говорит о том, что правильно делать ИМО, кроме смены владельцев, но ... что менять на что?
Так, как мне решить проблему / устранить неполадку без особых усилий?
Спасибо:)
UPDATE
Так что я решил что-то перепроверить, я создал папку в моем project_root с именем tmp
. Я изменил свой код для записи на $_SERVER['DOCUMENT_ROOT']. '/tmp/hello.xlsx'
, и он по-прежнему выдавал ошибки.
Тем не менее, я подумал: " Эй, давайте просто откроем это для шуток " и, к моему удивлению, все данные есть, все кажется нормальным ... но по какой-то причине он все равно получает ошибку вместо всплывающее окно загрузки в моем браузере ..