/** * Добавление файлов с удалённого сервера (обработка). */ public static function on_post_remote(Context $ctx) { $files = array(); foreach ($ctx->post('files') as $url) { if (!empty($url)) { $head = http::head(str_replace(' ', '+', $url)); if ($head['_status'] == 200) { $file = array('type' => $head['Content-Type'], 'size' => $head['Content-Length'], 'remove' => true, 'url' => $url); if (!$ctx->post('symlink')) { $file['tmp_name'] = http::fetch($url); } $tmp = parse_url($url); $file['name'] = basename($tmp['path']); if ('application/octet-stream' == $file['type'] and !empty($file['tmp_name'])) { $file['type'] = os::getFileType($file['tmp_name'], $file['name']); } $files[] = $file; } } } return self::add_files($ctx, $files); }
public static function getFileType($path) { return os::getFileType($path); }
/** * Импорт нескольких файлов из архива. * * Вытаскивает из архива все файлы, добавляет их в файловый архив. * * @return Node последний добавленный в архив файл * @param string $zipfile путь к ZIP-архиву. */ public static function unzip($zipfile, $folder = null, $parent_id = null) { $node = null; $tmpdir = os::mkdir(os::path(Context::last()->config->getPath('main/tmpdir'), 'upload')); if (function_exists('zip_open')) { if (file_exists($zipfile)) { $zip = zip_open($zipfile); while ($zip_entry = zip_read($zip)) { zip_entry_open($zip, $zip_entry); if (substr(zip_entry_name($zip_entry), -1) == '/') { /* mcms::debug(zip_entry_name($zip_entry)); $zdir = substr(zip_entry_name($zip_entry), 0, -1); if (file_exists($zdir)) throw new Exception('Directory "<b>' . $zdir . '</b>" exists'); os::mkdir($zdir); */ } else { $name = basename(zip_entry_name($zip_entry)); $tmpname = tempnam($tmpdir, 'unzip'); file_put_contents($tmpname, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); $node = Node::create('file'); $node->import($a = array('parent_id' => $parent_id, 'tmp_name' => $tmpname, 'name' => $name, 'filename' => $name, 'type' => os::getFileType($name)), false); $node->save(); unlink($tmpname); } zip_entry_close($zip_entry); } zip_close($zip); } else { throw new RuntimeException("No such file {$zipfile}"); } } else { throw new RuntimeException('zlib extension is not available'); } return $node; }