Delphinum, сначало одно было, потом другое, забыл убрать
<?php
/**
* Kzip
*
* Обертка для ZipArchive
*
* @author Koenig <http://johncms.com/users/profile.php?user=6565>
* @version 0.2
*/
class Kzip
{
/**
*
*
* @var ZipArchive
*/
private $zip;
/**
* constructor
*
* @param mixed $archive
* @return Kzip
*/
public function __construct($archive)
{
if (!extension_loaded('zip')) {
die('Unsupported Ziparchive class');
}
$this->zip = new ZipArchive();
if (file_exists($archive)) {
$this->zip->open($archive);
}
else {
$this->zip->open($archive, ZipArchive::CREATE);
}
}
/**
* extract from directory
*
* @param mixed $dir
*/
public function extractTo($dir)
{
$array = $this->getNames();
foreach($array['cp'] as $k => $file) {
$str = $this->zip->getFromName($file);
$pos = strrpos($array['utf'][$k], DIRECTORY_SEPARATOR);
$ee = str_split($array['utf'][$k], $pos + 1);
if (!is_dir($dir . $ee[0])) {
mkdir($dir . $ee[0], 0777, true);
}
file_put_contents($dir . $array['utf'][$k], $str);
}
}
/**
* get array names of files
* @param void
* @return array
*/
public function getNames()
{
$names = array();
for ($i = 0; $i < $this->zip->numFiles; $i++) {
$names['utf'][] = $this->fineName($this->zip->getNameIndex($i) , 1);
$names['cp'][] = $this->zip->getNameIndex($i);
}
return $names;
}
/**
* put zip archive directory
*
* @param mixed $dir
*/
public function addFromDirecory($dir)
{
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS) , RecursiveIteratorIterator::CHILD_FIRST) as $list) {
if ($list->isFile()) {
$this->zip->addFile($list->getPathname() , $this->fineName($list->getPathname()));
}
}
}
/**
* put your comment there...
*
* @param mixed $path
* @param int $mode
* @return mixed
*/
public function fineName($path, $mode = 0)
{
return (!$mode) ? iconv('UTF-8', 'CP866//TRANSLIT//IGNORE', $path) : iconv('CP866', 'UTF-8//TRANSLIT//IGNORE', $path);
}
/**
* destructor
* @param void
*
*/
public function close()
{
$this->zip->close();
}
}
?>
Используй исключения вместо die().
L!MP, это можно, но смысл если нет класса в системе? куча ошибок и вопросов
Koenig, почему же "куча ошибок", ошибка только одна - нет такого то файла архива, попробуйте позже - за что же ты бедный процесс убиваешь? )))
Delphinum, логика нарушается ведь, далее строки где могут появиться ошибки, разве процесс убивается? потомок?
Koenig, Тут смотри в чём дело.
Вот у тебя в конструкторе есть строка:
if (!extension_loaded('zip')) {
die('Unsupported Ziparchive class');
}
В этом случае мы увидим белую страницу с текстом Unsupported Ziparchive class
Ты не оставляешь пользователю твоего класса выбора.
А вот в этом случае:
if (!extension_loaded('zip')) {
throw new \RuntimeException('Unsupported Ziparchive class');
}
Я смогу сделать так:
try {
new Zip();
} catch (\RuntimeException $e) {
$error = $e->getMessage();
}
И уже далее, например, сохранить сообщение в лог а пользователю отдать человеко-понятное сообщение.
reaper, это то понятно, но класс публичный, сразу после запуска станет ясно, нужен он или нет, лишнее уже можно и самому до воротить кому надо
Koenig, WUT? По подробнее можно?
Я считаю, что лучше сразу всё делать заранее.
Представь, что было бы, если бы все библиотеки так писались.
В любой исключительной ситуации убивать процесс - это плохо.
С таким уже успехом я мог бы создать тему мол "смотрите, что я в документации нашел, кому надо сами обёртку напишите."
reaper, причем тут процесс? это остановка выполнения, ты на денвере посмотри , убьется процесс в диспетчере