Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как сделать загрузчик файлов.
 
 автор: shmel79   (04.02.2008 в 12:14)   письмо автору
 
 

Народ, помогите пожалуйста разобраться с одной темой.
У меня такая проблемка: мне нужна функция дополнения на сайт файлов через админку, и вывод ее на клиентской странице!
Допустим я добавляю mp3 через админку.
А на клиентской странице отображается весь список.

Как мне можно это сделать? Или какие темы можно почитать?

   
 
 автор: sim5   (04.02.2008 в 12:21)   письмо автору
 
   для: shmel79   (04.02.2008 в 12:14)
 

Темы "Загрузка файлов" и проблемы связанные с ограничением на размер закачиваемого файла.

   
 
 автор: cheops   (04.02.2008 в 12:25)   письмо автору
 
   для: shmel79   (04.02.2008 в 12:14)
 

Можно начать отталкиваться от скрипта http://www.softtime.ru/scripts/upload.php. Вы планируете использоваться базу данных?

   
 
 автор: shmel79   (04.02.2008 в 12:27)   письмо автору
 
   для: cheops   (04.02.2008 в 12:25)
 

Да... планирую.
Чтобы выводилось: Заголовок файла и ссылка на его прямое скачивание!

   
 
 автор: shmel79   (04.02.2008 в 12:33)   письмо автору
 
   для: cheops   (04.02.2008 в 12:25)
 

Т.е. мне нужна это функция только для админки.
Посмотрел скрипт... т.е. я понял, что мне нужно создать папку на сервере, куда будут записывсваться файлы, которые я закачиваю. Но паралельно мне еще нужно заносить инфо о файле в БД... чтобы потом выводить ее, как это сделать?

   
 
 автор: shmel79   (04.02.2008 в 14:03)   письмо автору
 
   для: cheops   (04.02.2008 в 12:25)
 

Я пробую сейчас этот скрипт... и вот проблема... у меня не срабатывает загрузка мультимедии...
в форме стоит enctype="multipart/form-data" и загрузке поддаются только txt, jpeg, rar короче все датовые форматы...... проблема явно не из-за веса файла... поставил для закачки 50 метров максимально... Мне нужно закачивать mp3 и видео форматы. Для mp3 он выдает что Файл небыл загружен.... а для видео вообще ошибку денвера! В чем может быть проблема?


if($_FILES["filename"]["size"] > 1024*50*1024)
{
echo ("Размер файла превышает 50 мегабайт");
exit;
}

Правильно?

   
 
 автор: shmel79   (04.02.2008 в 14:41)   письмо автору
 
   для: cheops   (04.02.2008 в 12:25)
 

Походу дела.... все-таки скрипт не закачивает файлы размером больше чем 2 мб...
где можно это справить, может где-то еще указывается подобное значение, например, в форме?..
вот сама форма:
<form action="add_music.php" method="post" enctype="multipart/form-data">
<input size="50" type="file" name="filename"><br>
<input type="submit" value="Загрузить"><br>
</form>

   
 
 автор: sim5   (04.02.2008 в 16:26)   письмо автору
 
   для: shmel79   (04.02.2008 в 14:41)
 

С хостером договаривайтесь.

   
 
 автор: shmel79   (04.02.2008 в 17:42)   письмо автору
 
   для: sim5   (04.02.2008 в 16:26)
 

Да я на локалке пока делаю... может в системных файлах что не так?

   
 
 автор: sim5   (04.02.2008 в 17:44)   письмо автору
 
   для: shmel79   (04.02.2008 в 17:42)
 

Ну у вас же не "всю жизнь" это на локалке будет, а на хосте сами вы не измените предел в 2 МБ, так что не ищите проблем в формах - хостер, а нет, так резать/клеить файлы.

   
 
 автор: _гость_   (04.02.2008 в 17:49)
 
   для: sim5   (04.02.2008 в 16:26)
 

можно попробовать положить в эту папку htacces со строкой
php_value upload_max_filesize 50M

но ещё есть ограничения

   
 
 автор: shmel79   (04.02.2008 в 19:42)   письмо автору
 
   для: _гость_   (04.02.2008 в 17:49)
 

какие еще есть ограничения?

   
 
 автор: Trianon   (04.02.2008 в 19:46)   письмо автору
 
   для: shmel79   (04.02.2008 в 19:42)
 

Всё описано в http://ru2.php.net/manual/en/features.file-upload.php

   
 
 автор: _гость_   (04.02.2008 в 20:35)
 
   для: Trianon   (04.02.2008 в 19:46)
 

Вообще, если честно , 50 метров грузить на сайт через POST както непочеловечески :)

А так после 2M стоят ограничения
post_max_size 8M
memory_limit 8M
max_execution_time 30
и наверное max_input_time 60 :)

это всё врядли будет менять какойнибудь хостер

   
 
 автор: shmel79   (07.02.2008 в 11:11)   письмо автору
 
   для: _гость_   (04.02.2008 в 20:35)
 

А тогда через какую функцию отправлять будет по человечески???

   
 
 автор: dimonich2004   (07.02.2008 в 13:14)   письмо автору
 
   для: shmel79   (07.02.2008 в 11:11)
 

загрузку файла по частям надо делать

   
 
 автор: shmel79   (07.02.2008 в 13:14)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:14)
 

А при скачивание файл будет собираться в одно целое??

   
 
 автор: dimonich2004   (07.02.2008 в 13:40)   письмо автору
 
   для: shmel79   (07.02.2008 в 13:14)
 

Время действия PHP-скрипта на сервере составляет 30 секунд, объемные файлы при медленном соединении часто не успевают загрузиться за это короткое время. Кроме того, контролировать загрузку большого числа мелких файлов проще, чем одного большого. Поэтому часто прибегают к процедуре разбивки файла на отдельные части с последующим их объединением на сервере.
Пусть имеется файл site.гаг, который необходимо разбить на части по 10 000 байт. Скрипт, выполняющий эту задачу, может выглядеть следующим образом

Разбивка файла на части .

<?php
// Имя файла
$filename "site.rar";
// Разбиваем файл на части по 10 000 байт
$piece 10000;
// Открываем исходный файл для чтения
$fp fopen($filename" r " ) ;
// Читаем содержимое файла в буфер
$bufer fread($fpfilesize($filename));
// Закрываем файл
fclose($fp);
// Подсчитываем число частей, на которые необходимо разбить файл
$count = (int)filesize($filename)/$piece;
if((float)(
filesize($filename)/$piece) - $count ! = 0$count++;
// В цикле разбиваем содержимое файла в переменной $bufer на части
for($i=0$i<$count; ++$i)

$part substr($bufer,$i*$piece,$piece);
// Сохраняем текущую часть в отдельном файле
$fp fopen("Site.tm".$i,"w"); 
fwrite($fp$part);
fclose($fp);
}
?> 


Обратную задачу по сбору файла из отдельных частей выполняет скрипт

Объединение частей файла в единое целое

<?php
$buffer 
"";
for(
$i=0$i<100000; ++$i)
{
// Генерируем имя файла
$filename "site.tm".$i;
// Если такой файл существует, добавляем его содержимое к $buffer
if(file_exists($filename))
{
$fp fopen($filename,"r");
$buffer . = fread($fp,filesize($filename));
fclose($fp);
}
else
{
// Если файл с таким именем не существует, выходим из цикла
break;
}
// Склеенные в переменной $bufer части помещаем в конечный файл
$fp fopen("site_final.rar","w");
fwrite($fp$buffer);
fclose($fp);
}
?> 

   
 
 автор: DBFs   (08.02.2008 в 17:49)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

Ок, это все хорошо. Но постала в действительности такая задача, к примеру, у меня. И как реализовать мне эту закачку маленьких разбитых файликов (неизвестно сколько тысяч их там получится) на сервер? В сущности со вторым моментом я думаю что разберусь.

   
 
 автор: DBFS   (08.02.2008 в 17:54)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

Если, к примеру, в форме указать путь к этому файлу, то скрипт ведь все равно быдет пытаться его загрузить к себе на сервер, или я ошибаюсь???

   
 
 автор: DBFS   (08.02.2008 в 18:14)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

dimonich2004, а Вы лично пробовали этот код в реальности, и вобще, на практике занимались этой проблемой, или это вы так, на быструю руку решили "зашвырнуть" код???

   
 
 автор: DBFS   (08.02.2008 в 18:21)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

Народ, я не понимаю соответствия уровня актуальности этой темы и активности, с которой вы обращаете на нее внимание - она действительно очень актуальная - загрузка больших файлов на сервер посредством php.

   
 
 автор: Unkind   (08.02.2008 в 20:03)   письмо автору
 
   для: DBFS   (08.02.2008 в 18:21)
 

> Народ, я не понимаю соответствия уровня актуальности этой темы и активности, с которой вы обращаете на нее внимание - она действительно очень актуальная - загрузка больших файлов на сервер посредством php.
Глупости. PHP не загружает Ваш файл с Вашего компьютера. Это Ваш браузер обращается к серверу и передает файл.
По HTTP upload таких файлов не делают. Это делается, например, по FTP.
Так что это Вы видите актуальность данного вопроса. Я - нет.

   
 
 автор: DBFS   (08.02.2008 в 19:11)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

Ау!!!

   
 
 автор: dimonich2004   (08.02.2008 в 19:14)   письмо автору
 
   для: DBFS   (08.02.2008 в 19:11)
 

c точки зрения банального интереса что не устраивает Вас сударь?
- У вас файлы будут на сайт ТЕРАБАЙТАМИ закачиваццо?!

   
 
 автор: shmel79   (08.02.2008 в 19:51)   письмо автору
 
   для: dimonich2004   (07.02.2008 в 13:40)
 

Хм.. а не могли бы вы.. по подробнее рассказать как использовать этот скрипт?
В одном файле отдельным от обычного файла-обработчика или в нем использовать.. ?

   
 
 автор: dimonich2004   (08.02.2008 в 20:32)   письмо автору
 
   для: shmel79   (08.02.2008 в 19:51)
 

как душе угодно
хоть - подряд пиши (скачает и сразу сохранит!)

   
 
 автор: DBFS   (08.02.2008 в 22:10)   письмо автору
 
   для: dimonich2004   (08.02.2008 в 20:32)
 

Хорошо, давайте проявим хоть каплю последовательности! Имеем форму. Да? К примеру вот такую:

<form name="upload_file" enctype="multipart/form-data" action="upload.php" method="post">
       <input name="my_file" type="file">
       <input name="upload_button" type="submit" value="Отправляем">
       </form>


Что мы делаем дальше???

>как душе угодно
>хоть - подряд пиши (скачает и сразу сохранит!)
"как душе угодно" - не канает.

   
 
 автор: alex123434   (08.02.2008 в 22:57)   письмо автору
 
   для: shmel79   (04.02.2008 в 12:14)
 

Вот пример кода. У меня mp3 закачивает
<body>
<form action=loadfile.php method=POST enctype=multipart/form-data>
<input type=file name=File><br>
<input type=submit name=doUpload value="loadfile">
</form>
<?
echo "Началась закачка файла, дождитесь окончания!<br>";
$ImgDir="loadfile"// Каталог для хранения изображений
@mkdir ($ImgDir666) ; // Создаем, если его еще нет
// Проверяем, нажата ли кнопка добавления фотографии
if (@$doUpload) {

// Проверяем, принят ли файл
if (@file_exists ($File) ) {
// Все в порядке — добавляем файл в каталог 
// Используем то же имя, что и в системе пользователя
Copy ($File"$ImgDir/".basename ($File_name) ) ;
echo 
"Все в порядке, файл закачан";
}
}
?>
</body>

Да не забудь сделать директорию loadfile

   
 
 автор: DBFS   (09.02.2008 в 00:48)   письмо автору
 
   для: alex123434   (08.02.2008 в 22:57)
 

Нет, вы издеваетесь??? У меня файл базы данных занимает около 7-8 Мб. Мне нужна реализация идеи dimonich2004-а!

   
 
 автор: dimonich2004   (09.02.2008 в 01:01)   письмо автору
 
   для: DBFS   (09.02.2008 в 00:48)
 

Ты можешь сказать что у тя не получаетя (На данный момент?!)

   
 
 автор: DBFS   (09.02.2008 в 01:21)   письмо автору
 
   для: dimonich2004   (09.02.2008 в 01:01)
 

>Ты можешь сказать что у тя не получаетя (На данный момент?!)

Ага. Смотри: чтобы не заходить на хост в администрат и управление содержимым, а затем в phpMyAdmin а затем копошиться в БД я сделал следущее. Через админку своего сайта я просто заливаю файл с sql-запросом, т.е. sql-файл своей базы данных и дальше скрипт выполняет все sql-запросы согласно файлу, который я загрузил на сервер. Но вот проблемка, БД моих фильмов занимает более 8 Мб. А все что больше 2 Мб не загружается на сервер. Поэтому мне так подошел бы Ваш, dimonich2004, метод. Но вопрос: как мне его реализовать?

   
 
 автор: DBFS   (09.02.2008 в 05:44)   письмо автору
 
   для: dimonich2004   (09.02.2008 в 01:01)
 

Ну то что, напишете код??

   
 
 автор: dimonich2004   (09.02.2008 в 12:52)   письмо автору
 
   для: DBFS   (09.02.2008 в 05:44)
 

напиши здесь свой код и попробуем зазобраццо!
ато получается ВЫНЬ ДА ПОЛОЖЬ
-Это как никак форум програмистов а не сестёр мелосердия

   
 
 автор: DBFS   (09.02.2008 в 08:34)   письмо автору
 
   для: dimonich2004   (09.02.2008 в 01:01)
 

Блин, если уже спрашивают, то отвечайте коль знаете. Или скажите что не знаете, да не морочьте голову. Вопросом на вопрос отвечать - много ума не надо!

   
 
 автор: dimonich2004   (09.02.2008 в 15:04)   письмо автору
 
   для: DBFS   (09.02.2008 в 08:34)
 

напиши здесь свой код и попробуем зазобраццо!
ато получается ВЫНЬ ДА ПОЛОЖЬ
-Это как никак форум програмистов а не сестёр мелосердия

   
 
 автор: DBFS   (09.02.2008 в 16:01)   письмо автору
 
   для: dimonich2004   (09.02.2008 в 15:04)
 

Ну ё-маё. Ну я ж говорю: идет форма для отправки файла -> дальше обработка файла - стандартная. Вот мне надо присоединить ваш метод каким то макаром:
Форма:

<form name="zagr_sql_file" enctype="multipart/form-data" action="<?echo"${_SERVER['SCRIPT_NAME']}?${_SERVER['QUERY_STRING']}";?>" method="post">
<input name="sql_file" type="file" style="position:absolute;width:141px;left:267px;top:473px;z-index:11">
<input name="upload" type="submit" value="Загрузка" style="position:absolute;left:300px;top:501px;z-index:12">
</form>


Обработка:

<?php
if(is_uploaded_file($_FILES['sql_file']['tmp_name'])){
   
$imgDir="loadfile"// Каталог для временного хранения sql-файла
   
@opendir($imgDir);
   
move_uploaded_file($_FILES['sql_file']['tmp_name'], "$imgDir/sql_file.sql");
   echo
"<script language='JavaScript'>alert('файл ".$_FILES['sqlfile']['name']." загружен успешно. Приступайте к стадии 2!');</script>";
  }
?>


Вот! Куда мне влепить вам метод "разбивки файла" для загрузки его на сервер по частям?

   
 
 автор: dimonich2004   (09.02.2008 в 16:28)   письмо автору
 
   для: DBFS   (09.02.2008 в 16:01)
 

в обработчик!
Ибо верхний код это только форма для загрузки

   
 
 автор: DBFS   (09.02.2008 в 16:26)   письмо автору
 
   для: dimonich2004   (09.02.2008 в 15:04)
 

Все что меньше 2Мб - работает. Только файл занимает столько же как моя база данных, т.е. 8-9 Мб, - все, нифига не работает. В моем распоряжении находится файл php.ini. Может там есть еще что-то такое, чего не обговаривалось в этой теме, и можно поменять???????

   
 
 автор: shmel79   (09.02.2008 в 16:36)   письмо автору
 
   для: DBFS   (09.02.2008 в 16:26)
 

Хммм... у тебя нету значение value!! в html форме!

   
 
 автор: DBFS   (09.02.2008 в 16:44)   письмо автору
 
   для: shmel79   (09.02.2008 в 16:36)
 

>Хммм... у тебя нету значение value!! в html форме!
Мда, очень ценное замечание. Знаете, если я добавлю value в форму, я думаю, что от этого моя проблема не решится!

   
 
 автор: shmel79   (09.02.2008 в 16:50)   письмо автору
 
   для: DBFS   (09.02.2008 в 16:44)
 

Мда...а вот моя решилась... ! ) Ну вы бы попробывали.

<input type="hidden" name="MAX_FILE_SIZE" value="10000000000" />

   
 
 автор: DBFS   (10.02.2008 в 15:11)   письмо автору
 
   для: shmel79   (09.02.2008 в 16:50)
 

>Мда...а вот моя решилась... ! ) Ну вы бы попробывали.
>
><input type="hidden" name="MAX_FILE_SIZE" value="10000000000" />


Моя проблема решилась таким макаром: в php.ini отыскал директиву "upload_max_filesize" и увеличил ее значение. Все! Я ее раньше менял, почему то не помогало, тут поставил 9М - и все в норме. Для базы данных хватает ;)

[поправлено модератором]

   
 
 автор: dimonich2004   (09.02.2008 в 17:05)   письмо автору
 
   для: DBFS   (09.02.2008 в 16:44)
 


Видите как полезно выкладывать исходник !

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования