You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.0 KiB
123 lines
4.0 KiB
<?php
|
|
/* //分享地址支持下载(a=down),预览(a=view)和流
|
|
* @copyright Leyun internet Technology(Shanghai)Co.,Ltd
|
|
* @license http://www.dzzoffice.com/licenses/license.txt
|
|
* @package DzzOffice
|
|
* @link http://www.dzzoffice.com
|
|
* @author zyx(zyx@dzz.cc)
|
|
*/
|
|
|
|
define('APPTYPEID', 200);
|
|
define('DZZSCRIPT', 'index.php');
|
|
define('CURSCRIPT', 'dzz');
|
|
require './core/coreBase.php';
|
|
$dzz = C::app();
|
|
$dzz->init();
|
|
$s = trim($_GET['s'] ?? '');
|
|
if (!$path = dzzdecode($s)) {
|
|
exit('Access Denied');
|
|
}
|
|
if (isset($_GET['sid'])) {
|
|
$sid = dzzdecode(trim($_GET['sid']));
|
|
}
|
|
if ($_GET['a'] == 'down') {
|
|
IO::download($path, $_GET['filename']);
|
|
exit();
|
|
} elseif ($_GET['a'] == 'view') {
|
|
$vid = isset($_GET['vid']) ? intval($_GET['vid']) : 0;
|
|
if ($vid) {
|
|
if (!$icoarr = C::t('resources_version')->fetch_version_by_rid_vid($path, $vid)) {
|
|
showmessage(lang('attachment_nonexistence'));
|
|
} else {
|
|
$path = dzzdecode($icoarr['icoid']);
|
|
}
|
|
} else {
|
|
if (!$icoarr = IO::getMeta($path)) {
|
|
showmessage(lang('attachment_nonexistence'));
|
|
}
|
|
$icoarr['icoid'] = $_GET['s'];
|
|
}
|
|
if ($icoarr['type'] == 'link') {
|
|
@header('Location: ' . $icoarr['url']);
|
|
exit();
|
|
}
|
|
$imageexts = array('jpg', 'jpeg', 'png', 'gif'); //图片使用;
|
|
$filename = $icoarr['name'];//rtrim($_GET['n'],'.dzz');
|
|
$ext = $icoarr['ext'];//strtolower(substr(strrchr($filename, '.'), 1, 10));
|
|
if (!$ext) $ext = preg_replace("/\?.+/i", '', strtolower(substr(strrchr(rtrim($url, '.dzz'), '.'), 1, 10)));
|
|
if (in_array($ext, $imageexts)) {
|
|
$url = $_G['siteurl'] . 'index.php?mod=io&op=thumbnail&original=1&path=' . $icoarr['icoid'];
|
|
@header("Location: $url");
|
|
exit();
|
|
}
|
|
$extall = C::t('app_open')->fetch_all_ext();
|
|
$exts = array();
|
|
$bzarr = explode(':', $icoarr['rbz'] ? $icoarr['rbz'] : $icoarr['bz']);
|
|
$bz = ($bzarr[0]) ? $bzarr[0] : 'dzz';
|
|
foreach ($extall as $value) {
|
|
if (!isset($exts[$value['ext']]) || $value['isdefault']) $exts[$value['ext']] = $value;
|
|
}
|
|
|
|
if (isset($exts[$bz . ':' . $ext])) {
|
|
$data = $exts[$bz . ':' . $ext];
|
|
} elseif ($exts[$ext]) {
|
|
$data = $exts[$ext];
|
|
} elseif ($exts[$icoarr['type']]) {
|
|
$data = $exts[$icoarr['type']];
|
|
} else $data = array();
|
|
if ($data) {
|
|
$url = $data['url'];
|
|
if (strpos($url, 'dzzjs:') !== false) {//dzzjs形式时
|
|
@header("Location: $icoarr[url]");
|
|
exit();
|
|
} else {
|
|
//替换参数
|
|
$url = preg_replace_callback("/{(\w+)}/i", function ($matches) use ($icoarr) {
|
|
$key = $matches[1];
|
|
if ($key == 'path') {
|
|
return $icoarr['icoid'];
|
|
} else if ($key == 'icoid') {
|
|
return 'preview_' . random(5);
|
|
} else {
|
|
return urlencode($icoarr[$key]);
|
|
}
|
|
}, $url);
|
|
//添加path参数;
|
|
if (strpos($url, '?') !== false && strpos($url, 'path=') === false) {
|
|
if ($sid) {
|
|
$pre .= 'sid:' . $sid . '_';
|
|
} else {
|
|
$pre = 'preview_';
|
|
}
|
|
$url .= '&path=' . dzzencode($pre . $path);
|
|
}
|
|
$url = $_G['siteurl'] . $url;
|
|
@header("Location: $url");
|
|
exit();
|
|
}
|
|
|
|
} else {//没有可用的打开方式,转入下载;
|
|
IO::download($path);
|
|
exit();
|
|
}
|
|
|
|
}
|
|
//获取文件流地址
|
|
if (!$url = (IO::getStream($path))) {
|
|
exit(lang('failed_get_file'));
|
|
}
|
|
if (is_array($url)) exit($url['error']);
|
|
|
|
//如果是阻止运行的后缀名时,直接调用;
|
|
if ($ext && in_array($ext, $_G['setting']['unRunExts'])) {
|
|
$mime = 'text/plain';
|
|
} else {
|
|
$mime = dzz_mime::get_type($ext);
|
|
}
|
|
@set_time_limit(0);
|
|
@header('Content-Type: ' . $mime);
|
|
@ob_end_clean();
|
|
@readfile($url);
|
|
@flush();
|
|
@ob_flush();
|
|
exit();
|