ZIP-папка после ее создания с помощью exec не приводит к созданию папки и сбоям архивирования

У меня есть скрипт, который должен (по порядку):

  1. создать папку в sys_get_temp_dir() и поместите в него несколько файлов (сделано в exec() строка)
  2. почтовый индекс папки и ее содержимое
  3. заставить загрузку на стороне клиента

Я попытался успешно выполнить шаги 1 и 3 по отдельности, но изо всех сил пытался заставить шаг 2 работать.

Вот мой скрипт (ниже получаемой ошибки):

<?php
$tmpdir = sys_get_temp_dir();
$outdir = "download";
$format = "ESRI Shapefile";
$folderToZip = $tmpdir . DIRECTORY_SEPARATOR . $outdir;

$command = "ogr2ogr -f $format $folderToZip WFS:\"https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?&map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&typename=domini_sciabili&bbox=544138,5098446,564138,5108446\" --config GDAL_HTTP_UNSAFESSL YES";

exec($command);

// Initialize archive object
$zip = new ZipArchive();
$zipFile = "download.zip";
$zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE);

// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($folderToZip),
RecursiveIteratorIterator::LEAVES_ONLY
);

foreach ($files as $name => $file)
{
// Skip directories (they would be added automatically)
if (!$file->isDir())
{
// Get real and relative path for current file
$filePath = $file->getRealPath();
$relativePath = substr($filePath, strlen($folderToZip) + 1);

// Add current file to archive
$zip->addFile($filePath, $relativePath);
}
}

// Zip archive will be created only after closing object
$zip->close();

header("Content-Description: File Transfer");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . $zipFile);

readfile ($zip);
exit();
?>

Ошибка, которую я получаю:

Fatal error: Uncaught exception 'UnexpectedValueException' with message 'RecursiveDirectoryIterator::__construct(C:\Users\MINORA~1.ONE\AppData\Local\Temp\download,C:\Users\MINORA~1.ONE\AppData\Local\Temp\download): Impossibile trovare il percorso specificato.
Warning: Unknown: Cannot destroy the zip context in Unknown on line 0

0

Решение

Не знаю, был ли приведенный выше код полностью / прав, но оказалось, что в ошибке отсутствовали двойные кавычки $format в $commandчто, в свою очередь, не дало результатов и, таким образом, $folderToZip не был создан.

Я забыл поместить их, потому что я думал, что строковая переменная включит их, но, конечно, это просто способ создания строковой переменной. Либо я должен был сделать $format = "'ESRI Shapefile'"; (вместо $format = "ESRI Shapefile";), или (это то, что я сделал), мне нужно явно добавить двойные кавычки вокруг него в $command лайк

$command = "ogr2ogr -f \"$format\" $folderToZip WFS:\"https://www.wondermap.it/cgi-bin/qgis_mapserv.fcgi?&map=/home/ubuntu/qgis/projects/Demo_sci_WMS/demo_sci.qgs&SERVICE=WFS&VERSION=1.1.0&REQUEST=GetFeature&typename=domini_sciabili&bbox=544138,5098446,564138,5108446\" --config GDAL_HTTP_UNSAFESSL YES";

, пишу \"$format\" вместо $format,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector