Файл: core/admin/upload.php
Строк: 202
<?php
if (!defined('BLOG')) { die('Access Denied!'); }
show_header('Загрузка Файлов');
if ((((!isset($_POST['url']) || $_POST['url'] == 'http://' || $_POST['url'] == '') && (!isset($_FILES['f']) || $_FILES['f']['error'][0])) && !isset($_POST['f'])) || !isset($_POST['name']) || !isset($_POST['chmod'])) {
echo '<div class="downlist2"><form action="?a=upload" method="post" enctype="multipart/form-data">' . (!empty($_REQUEST['post_id']) ? 'ID Статьи: <input type="text" name="post_id" value="' . request('post_id') . '" size="3" /><br/>' : '') . 'URL:<br/><textarea name="url" type="text" rows="3" style="width:90%;" wrap="off">http://</textarea><br/>Заголовки:<br/><textarea rows="3" style="width:90%;" name="headers">User-Agent: ' . htmlspecialchars(@$_SERVER['HTTP_USER_AGENT'], ENT_NOQUOTES) . "n" . 'Cookie: ' . "n" . 'Referer: ' . "n" . 'Accept: ' . htmlspecialchars(@$_SERVER['HTTP_ACCEPT'], ENT_NOQUOTES) . "n" . 'Accept-Charset: ' . htmlspecialchars(@$_SERVER['HTTP_ACCEPT_CHARSET'], ENT_NOQUOTES) . "n" . 'Accept-Language: ' . htmlspecialchars(@$_SERVER['HTTP_ACCEPT_LANGUAGE'], ENT_NOQUOTES) . "n" . 'Connection: Close' . "n" . '</textarea><br/>Файл ( разрешено ' . ini_get('upload_max_filesize') . ') ' . (empty($_REQUEST['post_id']) ? '<a href="#" onclick="files(1);">[+]</a> / <a href="#" onclick="files(0);">[-]</a>' : '') . '<br/><div id="fl"><input type="file" name="f[]" style="width:90%;margin-top:3px;" /><br/></div>Сохранить файл как:<br/><input type="text" name="name" value="' . ROOTPATH . '/files/" style="width:90%;" /><br/><input onkeypress="return number(event)" type="text" name="chmod" value="0644" size="4" maxlength="4" style="width:28pt;"/> CHMOD<br/><input type="text" name="set_time_limit" value="3600" size="5" style="width:28pt;"/ > Ограничение по времени (сек)<br/><input type="checkbox" name="ignore_user_abort" checked="checked" /> Продолжать даже если закрыть старницу<br/><br/><input type="submit" value="Загрузить"/></form></div>';
if (empty($_REQUEST['post_id'])) {
echo <<<HTML
<script type="text/javascript">
function number(b){var a=(typeof b.charCode=="undefined"?b.keyCode:b.charCode);if(b.ctrlKey||b.altKey||a<32){return true}a=String.fromCharCode(a);return/[d]/.test(a)}function files(e){var h=document.createElement("input");h.setAttribute("name","f[]");h.setAttribute("type","file");h.setAttribute("style","width:90%;margin-top:3px;");var g=document.getElementById("fl");if(e==1){g.insertBefore(h,null);g.appendChild(document.createElement("br"))}else{var a=g.getElementsByTagName("input");var c=g.getElementsByTagName("br");if(a.length>0){var d=a[a.length-1];d.parentNode.removeChild(d);var b=c[c.length-1];b.parentNode.removeChild(b)}}};
</script>
<noscript><div class="message_warning">Для прикрепления файлов, требуется поддержка JS в вашем браузере!!!</div></noscript>
HTML;
}
} else {
if (!$_FILES['f']['error'][0]) {
$all = sizeof($_FILES['f']['tmp_name']);
if ($all > 1) {
if (substr($_POST['name'], -1) != '/') {
$_POST['name'] .= '/';
}
}
for ($i = 0; $i < $all; ++$i ) {
echo upload_files($_FILES['f']['tmp_name'][$i], $_FILES['f']['name'][$i], $_POST['name'], $_POST['chmod']);
//chmod(ROOTPATH . '/files/' . $_FILES['f']['name'][$i], octdec('0644'));
}
} else {
echo upload_url($_POST['url'], $_POST['name'], $_POST['chmod'], $_POST['headers']);
//chmod(ROOTPATH . '/files/' . $_POST['name'], octdec('0644'));
}
if (!empty($_POST['post_id'])) {
$pid = intval($_POST['post_id']);
$_POST['name'] = !empty($_POST['name']) ? str_replace('files','',basename($_POST['name'])) : '';
if (!empty($_POST['name'])) {
$filename = basename($_POST['name']);
}
else if (!empty($_POST['url']) && $_POST['url'] <> 'http://') {
$filename = basename($_POST['url']);
}
else if (!empty($_FILES['f']['name'][0])) {
$filename = basename($_FILES['f']['name'][0]);
}
if (!empty($filename) && @file_exists(ROOTPATH . '/files/' . $filename)) {
$size = @filesize(ROOTPATH . '/files/' . $filename);
$db->query("INSERT INTO ?_list_file SET `post` = ?, `name` = ?, `size` = ?", $pid, $filename, $size );
echo '<div class="downlist2"><span style="color:green;">Файл успешно прикреплён к статье!</span><br /></div>';
}
else echo '<div class="downlist2"><span style="color:red;">Не удалось найти файл!</span><br /></div>';
echo '<div class="downlist2"><img src="' . ICONS . 'add.png" alt=""/> <a href="?a=upload&post_id=' . $pid . '">Загрузить ещё...</a><br />
<img src="' . ICONS . 'return.png" alt=""/> <a href="/' . gen_uri('post', $pid) . '">Назад к статье</a><br /></div>';
}
else echo '<div class="downlist2"><img src="' . ICONS . 'add.png" alt=""/> <a href="?a=upload">Загрузить ещё...</a><br /></div>';
}
function error()
{
$err = error_get_last();
if ($err) {
return $err['message'] . ' (' . $err['file'] . ': ' . $err['line'] . ')';
} else {
return 'Неизвестная ошибка';
}
}
function upload_files($tmp = '', $name = '', $dir = '', $chmod = '0644')
{
$fname = $name; $out = array();
if (substr($dir, -1) != '/') {
$name = basename($dir);
$dir = dirname($dir) . '/';
}
$name = str_ireplace('.php', '.php.txt', $name);
$name = str_ireplace('htaccess', 'htaccess.txt', $name);
if ( @file_put_contents($dir . $name, @file_get_contents($tmp)) ) {
@chmod($dir . $name, octdec($chmod));
unlink($tmp);
$out[] = '<span style="color:green;">Файл Загружен -> ' . htmlspecialchars($fname . ' -> ' .$dir . $name, ENT_NOQUOTES) . '</span>';
} else {
@unlink($tmp);
$out[] = '<span style="color:red;">Файл не Загружен -> ' . htmlspecialchars($fname . ' x ' .$dir . $name, ENT_NOQUOTES) . '</span>';
$out[] = 'Ошибка: ' . error();
}
return '<div class="downlist2">' . implode('<br />', $out) . '</div>';
}
function upload_url($url = '', $name = '', $chmod = '0644', $headers = '')
{
if (isset($_POST['set_time_limit'])) {
set_time_limit($_POST['set_time_limit']);
}
if (isset($_POST['ignore_user_abort'])) {
ignore_user_abort(true);
}
ini_set('user_agent', str_ireplace('User-Agent:', '', trim($headers)));
$tmp = array();
$url = trim($url);
if (strpos($url, "n") !== false) {
foreach (explode("n", $url) as $v) {
$v = trim($v);
$tmp[] = array($v, $name . basename($v));
}
} else {
$last = substr($name, -1);
$temp = false;
if ($last != '/' && is_dir($name)) {
$name .= '/';
$temp = true;
}
if ($last != '/' && !$temp) {
$name = dirname($name) . '/' . basename($name);
} else {
$h = @get_headers($url, 1);
$temp = false;
if (isset($h['Content-Disposition'])) {
preg_match('/.+;s+filename=(?:")?([^"]+)/i', $h['Content-Disposition'], $arr);
if (isset($arr[1])) {
$temp = true;
$name = $name . basename($arr[1]);
}
}
if (!$temp) {
$h = parse_url($url);
$name = $name . basename($h['path']);
}
}
$tmp[] = array($url, $name);
}
$out = array();
foreach ($tmp as $v) {
$dir = dirname($v[1]);
if (!is_dir($dir)) {
mkdir($dir, '0755');
}
$v[1] = str_ireplace('.php', '.php.txt', $v[1]);
$v[1] = str_ireplace('htaccess', 'htaccess.txt', $v[1]);
$r = @copy($v[0], $v[1]);
if ($r) {
@chmod($v[1], octdec($chmod));
$out[] = '<span style="color:green;">Файл Загружен -> ' . htmlspecialchars($v[0] . ' -> ' . $v[1], ENT_NOQUOTES) . '</span>';
} else {
$out[] = '<span style="color:red;">Файл не Загружен -> ' . htmlspecialchars($v[0] . ' x ' . $v[1], ENT_NOQUOTES) . '</span>';
$out[] = 'Ошибка: ' . error();
}
}
return '<div class="downlist2">' . implode('<br />', $out) . '</div>';
}
?>