|
|
|
| Тут представлен довольно длинный скрипт. Так что если Каму нудно этот пост даже не читайте. Проблема пустяковая, но требует просмотра всего скрипта.
Скрипт выполняет обработку каталога на вывод файлов (далее на закачку в данный каталог файлов) с авторизацией. Так же реализована скачка файлов.
Теперь проблема. При скачивании имя файла неправильно ставится. Нужно его преобразовать в имя файла которое действительно скачивает пользователь.
это тут
if (is_file($path.$get_file))
{
header("Content-Disposition: attachment; filename=$get_file");
$x = fread(fopen($path.$get_file,"rb"), filesize($path.$get_file));
echo $x;
die();
}
|
Сам скрипт
<?php
session_start();
//конфиг к базе
include "conf.php";
// если сесии нету
if(empty($_SESSION['login']))
{
//принимаем данные от формы
if ($_POST['login'] & $_POST['pwd'])
{
$_SESSION['login'] = $_POST['login'];
$_SESSION['pwd'] = $_POST['pwd'];
}
else
{
include "login.php";
}
}
//если сессия есть
$login=$_SESSION['login'];
$password=MD5($_SESSION['pwd']);
//проверяем на правельность логин и пароль
$link=mysql_connect($mysql_host,$mysql_user,$mysql_pwd) or die("Не магу приконектиться к базе данных". mysql_error());
mysql_select_db($mysql_bd, $link);
$sql = "SELECT * FROM users WHERE Login = '$login' AND Passwd = '$password'";
$result=mysql_query($sql) or die("Неправельный запрос " . mysql_error());
if (mysql_num_rows($result) === 1)
//если он правельный
{
//записывает в переменную $path значение Поля Role из базы с этим юзером
$row = mysql_fetch_assoc($result);
mysql_close($link);
$path=$row['Role'];
function treeDir ($path)
{
if (substr($path , strlen($path) - 1) != '/') {$path .= '/';}
$dirlist = array();
if ( $handle = opendir($path))
{
while (false !== ($file = readdir($handle )))
{
if ($file != '..' && $file != '.')
{
if (is_dir($path.$file)) {$arrDir[] = $file;}
if (is_file($path.$file)) {$arrFile[] = $file;}
}
}
closedir ( $handle ) ;
}
return Array('Dir' => $arrDir, 'File' => $arrFile);
}
if (isset($_GET['f']) && !empty($_GET['f']))
{
if (ereg("^([0-9a-zA-ZА-Яа-я]+/?)+(\.[a-zA-Z0-9]{1,3})*$", $_GET['f']))
{
$get_file = $_GET['f'];
}
else
{
$error[] = 'Не верное имя директории';
}
}
else
{
$get_file = '';
}
//создание папки
if ($_REQUEST['action'] == 'addDir' && !empty($_POST['title']))
{
if (ereg("^[0-9a-zA-Zа-яА-Я_\(\) ]+$", $_POST['title']))
{
if (file_exists($path.$get_file.'/'.$_POST['title']))
{
$error[] = 'Папка с именем «'.$_POST['title'].'» уже существует.';
}
else
{
mkdir($path.$get_file.'/'.$_POST['title'], 0777);
}
}
else
{
$error[] = 'Не верно задано имя папки.';
}
}
//конец создания папки
//принятие файла из формы
/*
if ($_REQUEST['action'] == 'addFile' && !empty($_POST['file']))
{
if (ereg("^[0-9a-zA-Zа-яА-Я_\(\) ]+$", $_POST['file']))
{
if (file_exists($path.$get_file.'/'.$_POST['file']))
{
$error[] = 'Фаил с именем «'.$_POST['file'].'» уже существует.';
}
else
{
mkdir($path.$get_file.'/'.$_POST['title'], 0777);
}
}
else
{
$error[] = 'Не верно задано имя папки.';
}
}
*/
if (is_file($path.$get_file))
{
header("Content-Disposition: attachment; filename=$get_file");
$x = fread(fopen($path.$get_file,"rb"), filesize($path.$get_file));
echo $x;
die();
}
else
{
$arrDir = treeDir($path.$get_file);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="STYLESHEET" type="text/css" href="style.css">
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<title>Система обмена файлами</title>
</head>
<body>
<?
if (count($error))
foreach ($error as $_err)
{
?>
<span style="color: #f00;"><?= $_err; ?></span><br />
<?
}
?>
<h3 align="center">Обзор папок директории</h3>
<div align="left"><a href="help/help.dir.php" target="blank">Справка</a></div>
<!--Добавление и удаление файлов -->
<?php include "addfiles.php" ; ?>
<fieldset>
<legend>Просмотр файлов и папок</legend>
<table>
<?php
if (!empty($get_file))
{
?>
<tr>
<td><img src="img/1.gif"></td>
<td><?php echo '<a href="?f='.urlencode(substr($get_file, 0, strrpos($get_file, '/'))).'">На уровень выше</a><br />' ?> </td>
</tr>
<?php
}
//отображаем папки
if (count($arrDir['Dir']))
{
foreach ($arrDir['Dir'] as $_dir)
{
?>
<tr>
<td><img src="img/1.gif"></td>
<td><?php echo '<a href="?f='.urlencode($get_file.(substr($get_file, -1) <> '/' && !empty($get_file) ? '/' : '').$_dir).'">'.$_dir.'</a><br />' ?> </td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td><img src="img/5.gif"></td>
<td>Нет папок для отображения</td>
</tr>
<?php
}
if (count($arrDir['File']))
{
foreach ($arrDir['File'] as $_file)
{
?>
<tr>
<td><img src="img/6.gif"></td>
<td><?php echo '<a href="?f='.urlencode($get_file.(substr($get_file, -1) <> '/' && !empty($get_file) ? '/' : '').$_file).'" >'.$_file.'</a><br />'; ?></td>
</tr>
<?php
}
}
else
{
?>
<tr>
<td><img src="img/5.gif"></td>
<td>Нет файлов для отображения</td>
</tr>
<?php
}
?>
</table>
</fieldset>
<?php
}
else
{
if ($_POST['login'] & $_POST['pwd'])
{
print "<h1 class='accesdin'>Неправельный логин или пароль </h1>";
session_destroy();
include "login.php";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: CRazych
(10.12.2006 в 01:45)
| | Такие длинные посты лучше прикреплять в виде файла к сообщению. | |
|
|
|