/**
  * Добавление файлов с удалённого сервера (обработка).
  */
 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);
 }
Beispiel #3
0
 /**
  * Импорт нескольких файлов из архива.
  *
  * Вытаскивает из архива все файлы, добавляет их в файловый архив.
  *
  * @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;
 }