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

Форум PHP

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

 

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

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

тема: Файлы: загрузка на сервер
 
 автор: Panker   (25.08.2006 в 12:44)   письмо автору
 
 

Что то голову ломаю над
1 Можноли хранить файлы в мускуле, я имею ввиду полные файлы в мускуле ( при этом есть + как я считаю, при копировании реззерва ненадо будет перезаливать факйлы! )
2 как залить файл,, дайте кодик пплиЗ, он же не большой :)
3 если не хранить файлы в БД как мне поступать? только ссылку на него хранить в БД или как?




-----------
главный вопрос!
вот сомтрите у мня есть id это поле автоматом цифры ставтся да!
н оесли удалиш id 3 то потмо будет 4 а 3 уже не будет! можно ли как нить сделать так что бы у меян действительно по опрялдку было?
Толисть если идёт 1 2 3 и 4 удаляю, потмо у меня будет 1 2 3 5 ... можно ли сделать что бы потмо опять 4 появлялось и так дале!


---
УМОЛЯЮ ПО ПУНКТАМ А то потмо не разберусь чт ок чему!
спасибо!!

   
 
 автор: RV   (25.08.2006 в 12:48)   письмо автору
 
   для: Panker   (25.08.2006 в 12:44)
 

обычно хранят файлы в базе если места на хостинге нет, мирясь с тормозами базы.

генерировать id самому и вставлять его в базу

   
 
 автор: cheops   (25.08.2006 в 12:49)   письмо автору
 
   для: Panker   (25.08.2006 в 12:44)
 

Возможно вам будет интересен пример http://www.softtime.ru/scripts/upload.php.

   
 
 автор: NeO   (25.08.2006 в 16:09)   письмо автору
 
   для: cheops   (25.08.2006 в 12:49)
 

У меня вот так: (только есть пара недочётов, сильно не бейте за такой код)) )
форма

<form action=$url_site/index.php?m1=upload&m2=add method=POST enctype=multipart/form-data>
<table>
<tr>
<td>Закачиваемый файл:<td><input type=file size=25 name=file>
<tr>
<td>Ваше имя или ник:<td><input type=text name=name maxlength=16 size=25 value=''>
<tr>
<td>Комментарий к файлу: <td><input type=text name=comment maxlength=32 size=25 value=''>
<tr>
<td colspan=2><input type=\"checkbox\" name=\"hide\" value=\"on\" checked>Отображать в списке закачанных файлов
<tr>
<td colspan=2><b>Внимание!</b> Файл более 1mb может не закачаться!<br><input class=btn type=submit name=add value=\"Закачать файл\">
</table>
</form>


копирование в базу

<?
if(isset($add)):
 if (empty(
$file)|empty($name))
 {
 echo 
"Ошибка при добавлении файла! Вы не вставили файл или не написали своё имя!";
 }
 else
 {
// транслит имени файла
$trans = array(" "=>"_""ж"=>"zh"
"Ж"=>"Zh""ц"=>"ts""Ц"=>"Ts""ч"=>"4"
"Ч"=>"4""ш"=>"sh""Ш"=>"Sh""щ"=>"sch"
"Щ"=>"Sch""ю"=>"yu""Ю"=>"Yu"
"я"=>"ya""Я"=>"Ya""Ю"=>"Yu""Я"=>"Ya"
"Ц"=>"Ts""Ч"=>"4""Ш"=>"Sh""Щ"=>"Sch"
"Ж"=>"Zh""а"=>"a""б"=>"b""в"=>"v"
"г"=>"g""д"=>"d""е"=>"e""ё"=>"e"
"з"=>"z""и"=>"i""й"=>"i""к"=>"k"
"л"=>"l""м"=>"m""н"=>"n""о"=>"o"
"п"=>"p""р"=>"r""с"=>"s""т"=>"t"
"у"=>"u""ф"=>"f""х"=>"h""ъ"=>"''"
"ы"=>"y""ь"=>"'""э"=>"e""А"=>"A"
"Б"=>"B""В"=>"V""Г"=>"G""Д"=>"D"
"Е"=>"E""Ё"=>"E""З"=>"Z""И"=>"I"
"Й"=>"I""К"=>"K""Л"=>"L""М"=>"M"
"Н"=>"N""О"=>"O""П"=>"P""Р"=>"R"
"С"=>"S""Т"=>"T""У"=>"U""Ф"=>"F"
"Х"=>"H""Ъ"=>"'""Ы"=>"Y""Ь"=>"'"
"Э"=>"E",); 
$file_name strtr($file_name$trans);

// копирование файла во временную папку
$filedir="tmp";
$d=opendir($filedir);
@
mkdir($filedir,666);
Copy($file,"$filedir/".basename($file_name));

// вес файла
function display_size($file_size){
    if(
$file_size >= 1073741824) {
        
$file_size round($file_size 1073741824 100) / 100 " Gb.";
    } elseif(
$file_size >= 1048576) {
        
$file_size round($file_size 1048576 100) / 100 " Mb.";
    } elseif(
$file_size >= 1024) {
        
$file_size round($file_size 1024 100) / 100 " Kb.";
    } else {
        
$file_size $file_size " b.";
    }
    return 
$file_size;
}
$filesize display_size(filesize($file));



// чтение файла
$upload_filename "$filedir/$file_name"
$upload_fd fopen($upload_filename,"r"); 
$upload_bufer fread($upload_fd,filesize($upload_filename)); 
fclose($upload_fd);

if(
$_POST['hide'] == "on"$showhide "show";
else 
$showhide "hide";

// добавление файла в базу
if(mysql_query('INSERT INTO upload VALUES("0", 
"'
.$file_name.'", 
"'
.$name.'", "'.
mysql_escape_string($upload_bufer).'",
"'
.$filesize.'", 
"'
.$ip.'", 
"'
.$data2.'", 
"'
.$comment.'", 
"'
.$showhide.'", 
"0")'
))
 {
  
//удаление файла
  
unlink("tmp/$file_name");

  
// файл закачан
  
echo "Файл успешно закачан!!<br><b><a href=\"$url_site/index.php?m1=upload&m2=add\">Назад</a></b><br>";

  
//уведомление админа о закачаном файле
  
mail("$mail_admin""Upload""Закачан файл $file_name ($filesize)! Закачал $name (ip $ip).","MIME-Version: 1.0
  Content-type: text/plain; charset=Windows-1251
  From: neon@net76.ru"
);
 }
else echo 
"<b>Ошибка при добавлении файла! Пожалуйста обратитесь к администратору!</b>";
 }
endif;
?>


типа вывод закачаных файлов:

<?
echo "
<b>15 последних закачанных файлов:</b>
<table border=0 width=100%>
<tr>
<td><b>Файл</b>
<td><b>Закачал</b>
<td><b>Размер</b>
<td><b>Комментарий</b>
<td><b>Время добавления</b>"
;
$sql=mysql_query("SELECT * FROM upload WHERE hide='show' ORDER BY id DESC LIMIT 15");
WHILE(
$row=mysql_fetch_array($sql)) {
echo 
"<tr><td><a href=\"up_dwn.php?id="$row['id'], "\"><b>"$row['filename'], "</b></a> (скачано "$row['count'], ")<td>"$row['nick'], "<td>"$row['filesize'], "<td>"$row['comment'], "<td>"$row['date'], "";
}
echo 
"</table>";
?>


скачивание файла из бд:

<?
include "adm/config.php";
$id=$_REQUEST['id'];

$sql=mysql_query("SELECT * FROM upload WHERE id='$id'");
WHILE(
$dwn=mysql_fetch_array($sql)) {
$file=$dwn['file'];
$name=$dwn['filename'];
$count=$dwn['count'];
mysql_query("UPDATE upload SET count=$count+1 WHERE id='".$id."'");
header("Content-Disposition: attachment; filename=".$name."");
header("Content-length: ".strlen(stripslashes($file)));
header("Content-type: application/octet-stream");
  
header("Cache-Control: post-check=0, pre-check=0"false); 
  
header("Pragma: no-cache"); 
  
header("Content-Transfer-Encoding: binary"); 
echo 
"$file";
}
?>


бд:

CREATE TABLE `upload` (
  `id` int(1) NOT NULL auto_increment,
  `filename` text NOT NULL,
  `nick` text NOT NULL,
  `file` mediumblob NOT NULL,
  `filesize` text NOT NULL,
  `ip` text NOT NULL,
  `date` text NOT NULL,
  `comment` text NOT NULL,
  `hide` text NOT NULL,
  `count` text NOT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1;

всё...

теперь неточности - файлы иногда оказываются битыми (например не открываются картинки, архивы), не докачиваются... Файлы более где-то 1 mb не закачиваются.... Не можете подсказать в чём может быть проблема?

   
 
 автор: Panker   (25.08.2006 в 17:02)   письмо автору
 
   для: NeO   (25.08.2006 в 16:09)
 

Замечание: Upload бинарных файлов (картинок, архивов, программ и т.д.) стандартным методом часто приводит к тому, что файлы оказываются "битыми". Это связано с любовью Апача к всевозможным перекодировкам. Для того, чтоб он этим не занимался, допишите в файл httpd.conf следующее:
<Location />
CharsetRecodeMultipartForms Off
</Location>

   
 
 автор: NeO   (25.08.2006 в 17:12)   письмо автору
 
   для: Panker   (25.08.2006 в 17:02)
 

на сервере мне это никто не сделает... можно это сделать с помощью htaccess??

   
 
 автор: Panker   (25.08.2006 в 18:39)   письмо автору
 
   для: NeO   (25.08.2006 в 17:12)
 

сделай файл

httpd.conf

и туда впиши те строки!
делай этот файл так же как все html php и так далее открой блокнот нажми СОХРАНИТЬ КАК и просто имя httpd.conf и всё проблем то :)

   
 
 автор: Veli   (25.08.2006 в 20:50)   письмо автору
 
   для: Panker   (25.08.2006 в 12:44)
 

>главный вопрос!
>вот сомтрите у мня есть id это поле автоматом цифры ставтся да!
>н оесли удалиш id 3 то потмо будет 4 а 3 уже не будет! можно ли как нить сделать так что бы у меян действительно по опрялдку было?
>Толисть если идёт 1 2 3 и 4 удаляю, потмо у меня будет 1 2 3 5 ... можно ли сделать что бы потмо опять 4 появлялось и так дале!


Я бы тоже хотел об этом поподробнее услышать!

   
Rambler's Top100
вверх

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