ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Итакс Начнем
  #21  
Старый 19.09.2008, 13:08
MasterMushi
Новичок
Регистрация: 19.12.2007
Сообщений: 29
Провел на форуме:
35267

Репутация: 25
Wink Итакс Начнем

В свое время я задался проблемой аплода кучи файлов на сервер. Все бы хорошо, вот только хотелось грузить по 10-20 файлов за раз. Было это нужно для создания картинной галереи и материала было очень много. Также хотелось чтобы картинки были с хорошо измененными именами сразу поставлены на регистрации в базу.

Первое с чем столкнулся - не каждый хостинг имеет инициализированной на фришном плане переменной $_ENV['tmp'] что в результате при любом использовании $_FILES выдает пустой результат. Второе - не было изначально задано папки на которую вела бы эта самая переменная. Папка и переменная нужны для сохранения временных файлов которые мы еще не обработали и не скопировали куда нужно.

Третье - это папка назначения. Такую папку на время аплода нужно chmod-ить до 766 а после аплода ставить возможность исполнения файлов (тоесть чтобы по клику на ссылку с картинкой картинка не выдавалась как ошибка доступа 403) опять таки не каждый фришных хостинг отрабатывает

Ну и последнее - масс аплоад. Поискав по сети я не нашел вразумительных обьяснений. Сделал проще - отработал форму как с массивом в динамике. Вот пример того что получилось:

PHP код:
<body><table border="0" cellpadding="0" cellspacing="2" align="left" >
 <tr valign="top"><td width="100">&nbsp;&nbsp;&nbsp;</td>
    <td>
    
<?php 
     $Gallery_root
='gallery/'// Задаем пусть к директории для сохранения результата
    //error_reporting(E_ALL); //  Эта строка нам поможет при отладке проблем с настройками сервера Как только все заработает - убираем нафиг
    
if (!empty($_POST["startupload"])) // Проверяем была ли кликнута кнопка начала загрузки
    

      echo 
'<font style="font-size: 12px;">'
      require_once(
'db.php');   // Запрашиваем класс для работы с базой данных
      
require_once("config.php");
      
$db_uploader = new DB($host,$user,$password,$database); //подключаемся к базе
      
if (!$db_uploader->open())    // Если не удалось то отваливаемся с ошибкой-описанием неудачи
         
{ die ($db_uploader->error());}
      
$fuploads=1// Счетчик  загружаемых файлов
      
chmod($Gallery_root0777);  //ставим права скрипту чтобы он мог подгрузить картинки
      
while ($fuploads <= $_POST["toupload"]) // Пока мы не отработали все файлы которые пришли с формы делаем следующее....
       
{
        
$ufilename='file'.$fuploads// Тут мы делаем имя для каждого поля динамической формы
        
if (!empty($_FILES[$ufilename]["name"]))  //  Если поле формочки не была пустыи и в нго запихнули файл тогда
            
{
            
              if (!
is_uploaded_file($_FILES[$ufilename]['tmp_name'])) { // Проверяем хорошо ли был загружен файл
                 
echo "File ".$_FILES[$ufilename]["name"]." had not been Uploaded<br>";} //Если нет тогда пишем о неудаче
                
else {  // А если файл был загружен на ура тогда делаем следующее
            
            
              
if($_FILES[$ufilename]["size"] > 1024*3*1024//Проверяем трехмеговый лимит размера файла (хостинги некоторые требуют)
                  
{
                     echo (
"File size exceeds maximum allowed (3.0Mb"); //И отваливаемся если перебор
                  
}
              else
                  {  
$finfilename=md5($_FILES[$ufilename]["tmp_name"]); //Кодируем шаблон на имя файла в чтото хешевое
                      
$finext=explode(".",$_FILES[$ufilename]["name"]); // Разбиваем загруженный файл на имя и расширение
                      
$finfilename=$finfilename.'.'.$finext[1]; //Убираем старое имя и складываем новое имя и расширение
                     
if(move_uploaded_file($_FILES[$ufilename]["tmp_name"],$Gallery_root.$finfilename)) // Перемещаем загруженный файл в галлерею
                      
{   
                         
$sql_qwery "insert into images_table (image_filename, uploaded_time, gallery_id) values ('".$finfilename."',".strtotime("now").", 0)";
                         
/*запрос тут для примера 
                            images_table - табличка в базе у которой 4 поля  
                            gallery_id - это айди в таблице с галлереями на которую назначим картинку для начала назначим ноль потом назначим все что надо
                            все остальное делается так:
create table images_table
(
        id     int unsigned not null auto_increment primary key,
          image_filename   char(50)
          gallery_id  int unsigned,
          uploaded_time        int unsigned
)  
  все достаточно просто.
                         */
                          
if (!$db_uploader->query($sql_qwery)) //Собственно делаем запрос на регистрацию загруженой картинки в базу
                               
{ echo '&nbsp;&nbsp;&nbsp;<font color="#880000"><b>Failed:</b> New image adding error</font><br>'//При ошибке в регистрации отваливаемся
                                 
die ($db_uploader->error()); }; 
                               
//Пишем что и куда мы запихнули
                                 
echo 'File: <b>';
                                 echo 
$_FILES[$ufilename]["name"];
                                 echo 
'</b> ( ';
                                 echo 
$_FILES[$ufilename]["type"];
                                 echo 
', ';
                                 echo 
$_FILES[$ufilename]["size"];
                                 echo 
"b) was uploaded to".$Gallery_root;
                                 echo 
' as <b>';
                                 echo 
$finfilename;
                                 echo 
"</b><br> \n";
      
                      } else  
//теперь в случае если картинку не удалось загрузить мы пишем об этом 
                        
echo '&nbsp;&nbsp;&nbsp;<font color="#880000"><b>Failed:</b> image upload error</font> Name: '.$_FILES[$ufilename]["name"].' <br> Temp name: '.$_FILES[$ufilename]["tmp_name"];
                      
                 }
            }
         } 
         
$fuploads++; //Докидываем +1 к счетчику загруженных файлов
       
}
      
      
chmod($Gallery_root0555);  //Снимаем права с директории до состояния "Разрешено пользоваться но не изменять"
     // После трудной работы класса БД мы грохаем обьект.   if ($db_uploader){$db_uploader->freeresult();$db_uploader->close();} 
    
echo '</font><br>';
    
    }
  
?>
    
    
    </td></tr>
 <tr valign="top"><td width="100">&nbsp;&nbsp;&nbsp;</td>
    <td>                         
     <font class="hilight">How many files do you want to upload?</font>
       <form action="index.php?page=galleryuploader" method="post">
          <table border="0" cellpadding="0" cellspacing="2" align="left">
          <tr>
           <td class="content" align="left" width="50">
             Range 1-30
           </td>
           <td>
            <input name="fcount" type="text" style="width:140px" 
            <?php
             $fcount
=10//Число полей по умолчанию
             
if (!empty($_POST["fcount"])) //Проверяем было ли задано новое число полей
               
$fcount=$_POST["fcount"]; //Если да то выставляем новый параметр в счетчик
                 
if (($fcount 0) && ($fcount 31))
                    echo 
'value="'.$fcount.'"';
                 else echo 
'value="10"';
               }
              else echo 
'value="'.$fcount.'"';
            
?>>
             </td>
            <td> 
               <input type="submit" name="setnumber" value="  Set  " style=" border-width:1px; color:#626754; background:#FFFFFF">
            </td>
            </tr>
          </table>
     </form>
     <br><br>
     <font class="hilight">Chose files from you PC</font>
     <form action="index.php?page=galleryuploader" method="post" enctype="multipart/form-data">
      <table class="content" width="270" height="12" border="0" cellpadding="0" cellspacing="1" bgcolor="#eeeeee" valign="top">
      <tr>
         <td align="center" bgcolor="#cccccc">###</td>
         <td align="center" bgcolor="#cccccc">Local file path</td>
      </tr>
<?php
      
$fcount
=10// Перестраховываемся по значению количества полей по умолчанию
if (!empty($_POST["fcount"])) //Если задано новое количество
      
$fcount=$_POST["fcount"]; //Назначаем
if (($fcount 1) || ($fcount 30)) $fcount=10
//Но не более 30ти файлов за раз (некоторые хостинги вообще только до 20ти файлов отрабатывают а некоторые и вообще по 2)
  
$ucounter=1//Счетчик для генерирования имен полей
  
while ($ucounter <= $fcount
    { 
//Пока не достигли предела разрешенного количества полей
      
echo '<tr valign="center"><td width="70" class="content" align="left">&nbsp;&nbsp;File ';
      echo 
$ucounter;
      echo 
':</td><td><input type="file" name="file';
      echo 
$ucounter//гененрируем поля с именами попорядку
      
echo '" id="upload_field"></td></tr>'."\n";
      
$ucounter++; //+1 к счетчику сгенерированных имен полей
    
}

?>
      <tr><td>&nbsp;</td><td align="left">
      <input type="hidden" name="toupload" value="<?php echo $fcount;?>">
      <input type="submit" name="startupload" value=" Upload " style=" border-width:1px; color:#626754; background:#FFFFFF; width: 185px;"></td>
      </tr>
      </table>
      </form>
    </td></tr>
    </table>
</body>

Последний раз редактировалось MasterMushi; 19.09.2008 в 13:13..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузки для новичков Sharingan Авторские статьи 39 26.05.2010 19:52
Нужны люди которые будет покупать загрузки постоянно! $NW$ Трафик, лоады, инсталлы, загрузки - Покупка, продажа 3 23.07.2008 18:07
Постоянно покупаем загрузки и траффик :) itload Трафик, лоады, инсталлы, загрузки - Покупка, продажа 0 15.07.2008 16:08
Постоянно покупаем загрузки и траффик :) itload Трафик, лоады, инсталлы, загрузки - Покупка, продажа 0 02.05.2008 18:19
Постоянно покупаем загрузки и траффик (любые объемы). itload Трафик, лоады, инсталлы, загрузки - Покупка, продажа 2 15.02.2008 21:30



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ