Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
13 / 13 / 3
Регистрация: 24.04.2011
Сообщений: 122

Скачка выбранных файлов

02.09.2013, 00:36. Показов 1019. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! В общем тема такая. Написал скрипт,который загружает файлы на сервер- все нормально. Теперь хочу написать скрипт, который позволяет скачать выбранный файл. Вот код. У меня проблема в том, что я не знаю, как передать имя файла в переменную, для того, чтобы можно было скачать выбранный файл.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    <?php
            include("db_c.php");
            $query2 = mysql_query("SELECT * FROM `zagr_file` ",$connect) or die(mysql_error());
            $mass =mysql_fetch_array($query2);
            $i=1;
            $new_array = array();
            do //Вывожу таким образом список всех файлов, которые закачались на сервер.
            {
            echo "<div>";
            echo "<form method=\"post\" action=\"index.php\">";
            echo "<input type=hidden name=" . "\"" . $mass['file_name'] . "\""." value=" . $i . "/ >";
            echo $mass['file_name'] ;
            echo "<input type=\"submit\" name=\"dwnl\" value=\"Скачать\" />";
            echo "<br />";
            echo "</form>";
            echo "</div>";
            $i++;
 
            }
            while($mass=mysql_fetch_array($query2));
 
        ?>
        <?php
 
                    $file ="../file/" . //ВОТ СЮДА я хочу передать имя выбранного файла.
                        if (file_exists($file)) 
                        {
                            header('Content-Description: File Transfer');
                            header('Content-Type: application/octet-stream');
                            header('Content-Disposition: attachment; filename='.basename($file));
                            header('Content-Transfer-Encoding: binary');
                            header('Expires: 0');
                            header('Cache-Control: must-revalidate');
                            header('Pragma: public');
                            header('Content-Length: ' . filesize($file));
                            ob_clean();
                            flush();
                            readfile($file);
                            exit;
                        }
                }
                
        ?>
Кто может подсказать, как сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.09.2013, 00:36
Ответы с готовыми решениями:

Подсчет траффика. Скачка файлов.
Есть реальная задача. В папке files лежит оччень много фалов разного размера - от байт- до гигобайт.. Все єто во внутренней подсети...

Скачка файлов
Как в .html странице сделать ссылку на скачку .doc или .pdf файлов!?

Масовая скачка файлов
Доброго дня, может есть идеи, как это организовать? К примеру, у меня есть список файлов для скачки(примерно 100 файлов с прямыми...

3
 Аватар для webphp
55 / 53 / 18
Регистрация: 05.08.2013
Сообщений: 327
02.09.2013, 06:09
если я правильно понял, то вы сами себя в тупик загоняете.
Для чего вам форма и отправка пост запроса?
Перечисляйте файлы в виде обычной ссылки на них
что то вроде
PHP
1
echo '<a href="/files/' . $filename . '">' . $filename . '</a>';
1
Телепат
 Аватар для Милый Враг
724 / 118 / 8
Регистрация: 28.04.2009
Сообщений: 442
02.09.2013, 07:41
Странно у вас работать будет цикл.. В вашем случаи он как минимум один раз будет выполняться, даже в том случае если записей в таблицы нет, и на странице будет сообщение о несуществующей переменной.
Этот товарищ, что выше сказал, лучше ссылками.. Согласен, так быстрее, но смотря в каких целях..
По поводу кода, вы безжалостно загоняете тег <form> в тело цикла, хотя правильней его вынести за его пределы.
В общем так с пояснениями в коде.
Вот с формами..
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
             if (isset($_POST['menu']))  //проверяем, если есть таая переменная, то файл выбран
             {
              header("Location: /".$_POST['menu']."");  //перенаправляем на сам файл
             }
            include("db_c.php");
 
            $query2 = mysql_query("SELECT * FROM `zagr_file` ",$connect) or die(mysql_error());
            $num=mysql_num_rows($query2); //количество найденных записей
 
            if ($num>0) // если записи есть то выводим их
            { ?>
            <div>
            <form method="post" action=""> <!-- action оставляем пустой, либо указываем имя этого файла, т.к. этот файл обработчик /-->
            Выберите файл из списка<br>
            <select name="menu" size="1">
            <?php
            for($i=0; $i<$num; $i++) // цикл.
            {
            $mass=mysql_fetch_array($query2);
            echo'<option value="'.$mass['file_name'].'">'.$mass['file_name'].'</option>';
            } ?>
            </select>
            <input type="submit" name="dwnl" value="Скачать" />
            </form>
            </div>
            <?php
            }
            else // если записей нет, то выводим сообщение
            {
            echo "К сожалению, не одного файла для загрузки не найдено.";
            }
 
?>
Добавлено через 3 минуты
к тому же не используйте
PHP
1
or die(mysql_error());
Это скорей нужно для логирования и разработки, а на странице, в реальных условиях это потенциальная уязвимость вашего сайта.
1
13 / 13 / 3
Регистрация: 24.04.2011
Сообщений: 122
02.09.2013, 13:57  [ТС]
webphp, Милый Враг, Спасибо Вам ! В общем, чтобы не мучиться, сделал действительно просто по ссылкам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
            include("db_c.php");
            $query2 = mysql_query("SELECT * FROM `zagr_file` ",$connect);
            $mass =mysql_fetch_array($query2);
            do
            {
            echo "<div>";
            echo "<b>" .$mass['file_name'] . "</b>" ." закачен - " . $mass['date'] . " ";
            echo "<a href=\"/files/". $mass['file_name'] . "\" download>" . "Скачать</a>";
            echo "<br />";
            echo "</div>";
            }
            while($mass=mysql_fetch_array($query2));
        ?>
Сначала, браузер не хотел скачивать файлы и просто открывал их в другом окне( файлы были в расширениях .txt и .jpg. Полазив по форуму, прочел один совет, что надо в .htaccess вот так написать
Code
1
2
Options -Indexes
ForceType application/octet-stream
,но т.к. я юзаю бесплатный хостинг, не стал такое делать, поэтому добавил просто атрибут download в тег <a>. Может кому потом поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.09.2013, 13:57
Помогаю со студенческими работами здесь

Скачка больших файлов
Подскажите, как правильно закачивать большие файлы? Можно скачать через TMemoryStream, но в таком случае все скачается в память, а после...

Скачка файлов с ФТП
Я помню я делал так что скачивал 1 ZIP архив и распаковывал все с него библилтекой. Кто еще знает способы лучше. Очень надо.

Скачка файлов с сервера
Вопрос в топике: как сделать скачку файлов, скажем с сайта. Есть у меня к примеру zip архив по адресу http://mysite.ru/folder/test.zip как...

FTP доступ и скачка файлов
Есть в общем сервер FTP(все под паролем) и нужно на него залить файлы так что б другие могли скачивать их не вводя пароль и логин. Пробовал...

ProgressBar + множественная скачка файлов из интернета
с одним файлом все супер. WebClient wc = new WebClient(); wc.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru