public function zipping(){
$rootPath = realpath('results/');
// Initialize archive object
$zip = new \ZipArchive();
$zip->open('../web/Region.zip', ZipArchive::CREATE | ZipArchive::OVERWRITE);
// Initialize empty "delete list"
$filesToDelete = array();
// Create recursive directory iterator
/** @var SplFileInfo[] $files */
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($rootPath),
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($rootPath) + 1);
// Add current file to archive
$zip->addFile($filePath, $relativePath);
// Add current file to "delete list"
// delete it later cause ZipArchive create archive only after calling close function and ZipArchive lock files until archive created)
if ($file->getFilename() != 'important.txt')
{
$filesToDelete[] = $filePath;
}
}
}
// Zip archive will be created only after closing object
$zip->close();
// Delete all files from "delete list"
foreach ($filesToDelete as $file)
{
unlink($file);
}
}
Esa funcion esta dentro de ExportarControler.
Me devuelve el error
Class 'app\controllers\ZipArchive' not found
Pero eso solo ocurre en la webapp de yii. Puesto que probé el codigo fuera de yii2 y funcionó perfectamente.
Sería ExportarController (no controler), y en Yii 1 ese no es su sitio, sino en la carpeta components o extensions, y asegurate de que se carga al iniciar la aplicación (en config/main).
Es verdad maurocrispin21 tiene razón, yo hice la prueba lo más simple posible y no me fije que estaba en el controlador.
Si pones el ejemplo que hice en un archivo php donde no haya al principio una linea del tipo namespace …
estas trabajando en el spacio de nombres global, el que utiliza php y la función es accesible.
Como trabaja en un controlador ha cambiado de espacio de trabajo (la 1ª linea del archivo del controlador) y por ello para llamar a funciones de otros espacios de trabajo debe indicarlo, por ejemplo poniendo la ruta global.