[php] скипт загрузки

Discussion in 'PHP' started by X-FRITS, 26 Aug 2008.

  1. X-FRITS

    X-FRITS Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    57
    Likes Received:
    81
    Reputations:
    7
    Привет, может ли кто-то показать на простом примере скрипт скачивания файла любого типа, и GIF типа, сделанный на PHP.

    кто не понял, это как на dump.ru
     
  2. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    PHP:
    $img=file_get_contents("http://адрес к картинке");
        
    $f=fopen("имя_картинки","w+");
    fwrite($f,$img);
    fclose($f);
    тип того.
    вместо file_get_contents можно использовать это .
     
    #2 mr.The, 26 Aug 2008
    Last edited: 26 Aug 2008
    2 people like this.
  3. X-FRITS

    X-FRITS Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    57
    Likes Received:
    81
    Reputations:
    7
    я наверное не так объяснил, я имел ввиду, что загрузку с копма на сервер.
     
  4. mr.The

    mr.The Elder - Старейшина

    Joined:
    30 Apr 2007
    Messages:
    1,080
    Likes Received:
    456
    Reputations:
    38
    на вот читай: _ttp://www.softtime.ru/scripts/upload.php
     
    1 person likes this.
  5. X-FRITS

    X-FRITS Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    57
    Likes Received:
    81
    Reputations:
    7
    ооо спасибо:) а ты не подскажеш еще как что бы можно было файлы одного типа только загружать, ну или только картинки:)
     
  6. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    ну банально так:
    PHP:
    <?php
    $type 
    'jpg';
    if(
    stristr($_FILES['filename']['type'], $type))
        echo 
    'Ok';
    else echo 
    'пшол вон';
    ?>
     
  7. n-000

    n-000 Elder - Старейшина

    Joined:
    25 Oct 2006
    Messages:
    90
    Likes Received:
    36
    Reputations:
    5
    Нужно создать массив из расширений приемлемых для загрузки, ну и помудрить с примером выше -)
     
    2 people like this.
  8. X-FRITS

    X-FRITS Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    57
    Likes Received:
    81
    Reputations:
    7
    ну я наверное не так объяснил опять:) там когда обзор идёт, что бы там были видны только фото.

    ну как тут:
    _http://xs.to/xs.php?h=xs230&d=08352&f=999999999928.jpg
     
  9. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    лично у меня все файлы обзорит..тем более что мешает юзеру нажать на меню и вместо графических файлов выбрать "все файлы"...ты думаешь это панацея? нет...
    Делай массив, как подсказал тебе n-000
     
  10. X-FRITS

    X-FRITS Elder - Старейшина

    Joined:
    24 Jun 2007
    Messages:
    57
    Likes Received:
    81
    Reputations:
    7
    2.:EnoT:. выбери пункт "Multiple Files". я не против, но мне просто самому инетеснно как это делать, потому я и спросил, а вдруг когда-то пригодится:)
     
  11. n-000

    n-000 Elder - Старейшина

    Joined:
    25 Oct 2006
    Messages:
    90
    Likes Received:
    36
    Reputations:
    5
    Тоесть ты хочеш зделать загрузку разных файлов, а где то отображать только фото ?
     
  12. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    168
    Likes Received:
    39
    Reputations:
    0
    Такой вопрос. Попробовал скрипт rushter'a upload.php (он на предыдущей странице). Все работает отлично. Только вот вопрос. Какие права нужно поставить на каталог в который загружается файл, чтобы, например, если загрузят php-файл, он не исполнялся, а только скачивался? Ставил chmod 666 но тогда пишет ошибку и не загружает файл:
    Code:
    Warning: copy(./upload/best.c) [function.copy]: failed to open stream: Permission denied in /var/www/localhost/htdocs/upload.php on line 4
    
    Хотя вроде chmod 666 как раз для этого...
     
  13. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    168
    Likes Received:
    39
    Reputations:
    0
    Если можно поподробнее, как это лучше сделать?
     
  14. imajo.ati

    imajo.ati Banned

    Joined:
    21 Feb 2008
    Messages:
    232
    Likes Received:
    62
    Reputations:
    8
    читать файл построчно и искать строку '<?php'

    хоть медленно зато 100% эффективно, если short_open_tag = Off и asp_tags = Off
     
  15. Jer1cho

    Jer1cho Member

    Joined:
    6 Jun 2008
    Messages:
    209
    Likes Received:
    65
    Reputations:
    10
    .htaccess:
    PHP:
    RemoveType application/x-httpd-php .php .php5 .phtml
     
    2 people like this.
  16. winstrool

    winstrool ~~*MasterBlind*~~

    Joined:
    6 Mar 2007
    Messages:
    1,399
    Likes Received:
    883
    Reputations:
    859
    вот пост на котором есть код для загрузки изображений, по сути дела им можно загружать любые файлы, но для этого надо его чуток подредактировать

    /threadedpost865021.html#post865021
     
    _________________________
  17. Chode

    Chode Elder - Старейшина

    Joined:
    20 Jul 2008
    Messages:
    164
    Likes Received:
    19
    Reputations:
    0
    FileFusian v1.6 http://slil.ru/26159398

    в свое время наткнулся на этот скрипт, перерабатывал под себя, настраиваться 5 минут
     
  18. MasterMushi

    MasterMushi Member

    Joined:
    19 Dec 2007
    Messages:
    29
    Likes Received:
    5
    Reputations:
    3
    Итакс Начнем

    В свое время я задался проблемой аплода кучи файлов на сервер. Все бы хорошо, вот только хотелось грузить по 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>
     
    #18 MasterMushi, 19 Sep 2008
    Last edited: 19 Sep 2008