Скрипт Upload'a файлов

Discussion in 'PHP' started by roflash, 13 Dec 2007.

Thread Status:
Not open for further replies.
  1. roflash

    roflash New Member

    Joined:
    13 Dec 2007
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Помогите написать скрипт который бы мог загружать файлы на сервер. :cool:
     
  2. freddi

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

    Joined:
    5 Jul 2006
    Messages:
    399
    Likes Received:
    243
    Reputations:
    145
    ввозьми какой-нибудь шелл и посмотри как там реализованно, например с99.
     
  3. n3m0

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

    Joined:
    11 May 2007
    Messages:
    133
    Likes Received:
    92
    Reputations:
    11
    Вот твоя форма (index.html):

    HTML:
    <form enctype="multipart/form-data" action="upload.php" method="post">
     <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
     Отправить этот файл: <input name="userfile" type="file" />
     <input type="submit" value="Send File" />
    </form>
    А вот файл обработчик upload.php:

    PHP:
    <?php
    $uploaddir 
    '/var/www/uploads/';
    $uploadfile $uploaddir basename($_FILES['userfile']['name']);

    print 
    "<pre>";
    if (
    move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        print 
    "File is valid, and was successfully uploaded. ";
        print 
    "Here's some more debugging info:\n";
        
    print_r($_FILES);
    } else {
        print 
    "Possible file upload attack!  Here's some debugging info:\n";
        print 
    "Possible file upload attack!  Дополнительная отладочная информация:\n";
        
    print_r($_FILES);
    }
    print 
    "</pre>";

    ?>
    Взято с http://ua.php.net/manual/ru/features.file-upload.php
     
    1 person likes this.
  4. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    перед юзанием таких скриптов было бы не плохо поредактировать php.ini
    вот неплохая статья: http://www.phpclub.ru/detail/article/upload
     
    2 people like this.
  5. roflash

    roflash New Member

    Joined:
    13 Dec 2007
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    После того как нажимаю на кнопку пишут :
    Warning: move_uploaded_file() [function.move-uploaded-file]: open_basedir restriction in effect. File(/var/www/uploads/test.txt) is not within the allowed path(s): (/home/bukerru/:/usr/lib/php:/usr/local/lib/php:/tmp) in /home/*****/public_html/****.php on line 49
    Possible file upload attack! Here's some debugging info:nPossible file upload attack! Дополнительная отладочная информация:nArray
    (
    [userfile] => Array
    (
    [name] => test.txt
    [type] => text/plain
    [tmp_name] => /tmp/phpqQgYr2
    [error] => 0
    [size] => 10
    )

    )





    И как мне до этого файла добраться ?
     
    #5 roflash, 13 Dec 2007
    Last edited: 13 Dec 2007
  6. roflash

    roflash New Member

    Joined:
    13 Dec 2007
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Всё понял , спс.
     
  7. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Форма mass_sender.html

    Code:
    <html>
       <head>
          <title>Lee Roy's Mass Sender. Greetz to DaMaGeLaB.</title>
          <style>
             * {
                font-family: Tahoma;
             }
          </style>
          <script>
             function create_form () {
                var ref = document.getElementById('upload_url').value;
                var files_num = document.getElementById('files_num').value;
    
                if (isNaN(files_num)) {
                   alert('Wrong data entered!');
                   return;
                }
    
                if (files_num <= 0) {
                   alert('Value must be positive!');
                   return;
                }
    
                document.getElementById('sender').action = ref;
    
                form_text = '';
                for (i = 0; i < files_num; i++) {
                   form_text += '<input style="margin-bottom: 5px" type="file" name="file' + i + '" size="70">';
                }
    
                document.getElementById('container').innerHTML = form_text;
             }
    
             function submit_func() {
                document.getElementById('sender').submit();
             }
          </script>
       </head>
       <body>
          <center>
             <h3>How many files do you want to upload?</h3>
             <input id="files_num" type="text" size="10" value="0">
             <h3>What URL do you want to use as upload script?</h3>
             <input id="upload_url" type="text" size="50" value="http://www.somesite.ru/dir/upload.php">
             <br><br>
             <input type="button" value="Create form" onclick="create_form()">
             <hr style="margin-top: 15px; margin-bottom: 15px">
             <form id="sender" method="post" enctype="multipart/form-data">
                <div id="container">
                   <small>Enter apropriate number of files you want to send, and press <b>"Create form"</b> button...</small>
                </div>
             </form>
             <hr>
             <input type="button" value="Send" onclick="submit_func()">
          </center>
       </body>
    </html>
    Скрипт загрузки файлов:

    PHP:
    <?php

    define
    ("SERVER_UPLOAD_DIR""/home/bukerru/upload");

    set_time_limit(0);

    if (isset(
    $_FILES) && is_array($_FILES)) {
       foreach (
    $_FILES as $file) {
          if (
    $file['error'] == 0) {
             
    $destination sprintf("%s/%s"SERVER_UPLOAD_DIR$file['name']);
             if (@
    move_uploaded_file($file['tmp_name'], $destination))
                
    printf("File '%s' with size %s Kb was successfully uploaded...<br>\n"$file['name'], round($file[size] / 10242));
             else
                
    printf("Could not move uploaded file '%s' to destination...");
          } else
             
    printf("Error %s occuried. Could not upload file to server - skiping..."$file['error']);
       }
    } else {
       
    printf("No files was uploaded!");
    }

    ?>
    Не забудь создать директорию "/home/bukerru/upload". По идее ругаться ни на что не должен. Форма поддерживает загрузку нескольких файлов, разумеется, количество файлов нужно выбирать исходя из широты своего канала...
     
    1 person likes this.
  8. Ali_MiX

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

    Joined:
    8 Oct 2006
    Messages:
    377
    Likes Received:
    67
    Reputations:
    -2
    вот проще
    PHP:
    <?php
    if(isset($HTTP_POST_VARS['in']))
    {
      
    $fn $HTTP_POST_VARS['in'];
      
    $handle fopen ($fn'rb');
      
    $contents "";
      if(!
    $handle)
        echo 
    'Не могу открыть исходный файл';
      else
      {
        while(!
    feof($handle))
        {
          
    $data fread($handle8192);
          
    $contents .= $data;
        }
        
    fclose ($handle);

        
    // './download/' можно заменить, например, на $HTTP_GET_VARS['path']
        
    $handle fopen ('./download/' basename($fn), 'wb');
        if(!
    $handle)
          echo 
    'Не могу создать записать файл';
        else
        {
          
    fwrite($handle$contents);
          
    fclose($handle);
          echo 
    'Передача завершена';
        }
      }
    }
    ?>               

    <FORM ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post">
     <INPUT TYPE="hidden" NAME="act" VALUE="send">
     URL:<BR />
     <INPUT TYPE="text" NAME="in" SIZE="64"><BR />
     <INPUT TYPE="submit" VALUE=" Send ">
    </FORM><BR />
    </BODY></HTML>
     
  9. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    И еще проще гг :)

    PHP:

    <pre><center><b><h1>PHP simple files uploader</h1></b></center><br>
    choose path to upload:
    <form action="" method="post" enctype="multipart/form-data">
    <input type="text" name="path" size="50" value="<?echo(@getcwd());?>">
    <input type="submit" name="upl0ad" value="upload!">

    choose file to upload:
    <input type="file" name="file" size="30"></form>
    <?
    $tempupload = $_FILES['file']['tmp_name'];
    if (file_exists($tempupload)){
       $path = $_POST['path'];
       $upload = $_FILES['file']['name'];
       $pwdslash = $path."/".$upload;
       copy($tempupload, $pwdslash);
       echo "File was succesfully uploaded!";
    }
    ?>

     
  10. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    чето вы курили ребята.. зачем столько кода =)

    upload.php
    PHP:
    <form enctype=multipart/form-data  method=post>
    <input name=xek type=file>
    <input type=submit name=gogogo>
    </form>

    <?php 
    if(isset($_POST[gogogo]))
    {
    if(
    is_uploaded_file($_FILES[xek][tmp_name]))
    {
    @
    copy($_FILES[xek][tmp_name],$_FILES[xek][name]);
    }};
    ?>
     
    2 people like this.
  11. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ali_MiX, ваш скрипт, возможно, работать не будет по ряду причин:

    1) Возможно что на сервере отключены удалённые fopen;
    2) Ваш скрипт скорее сдохнет, чем зааплоадит файл, причин на то много: ограничение времени выполнения, ограничение на обьём оперативной памяти, отведённой скрипту, ибо всё содержимое он читает в буфер;
     
  12. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    PHP:
    <??>
    Все я победил!

    2blackybr
    ты нас порвал своим твердым и острым интеллектом :)
    Но можно еще короче
    PHP:
    <form enctype=multipart/form-data  method=post><input name=x type=file><input type=submit></form><?isset($_FILES[x])?(is_uploaded_file($_FILES[x][tmp_name])?(@copy($_FILES[x][tmp_name],$_FILES[x][name])):0):0;?>
     
  13. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    Macro не видел твой код когда постил)
    ЗЫ .. можно сделать вывод хтмл через echo, потом все в gzinflate() .. и кода ровно в три раза меньше :D
     
  14. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,547
    Likes Received:
    1,398
    Reputations:
    612
    blank page все равно меньше =)
     
  15. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Неправда. gzinflate в php в чистом виде не всунешь, посему надо юзать base64_encode(), итог - 215 символов ;) А мой код 211 символов. А если убрать @ то 210 ;)
    PHP:
    <?eval(gzinflate(base64_decode("TYzbCsMgEER/xbcotLTPTUz7H6GI1Q0RvCxxhebvq5ZCYZ7OzBwwW+LDtKY9MIiGDgQZiieHeqdLw2erSTMWgLZkJaZM8+QiFmJRB5Bv1j+r8/DjHeTyCq5Ou2MexOhyBuLizl1WBX3SFqxqN75QQNVkz9o+TMLjD52WbyNu15rxAw==")));?>
     
    #15 Macro, 14 Dec 2007
    Last edited: 14 Dec 2007
  16. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    ага.. можно забить еще на вывод ошибок (идеальный серв с error_reporting(0); )
    забьем на выводы ошибок))
    PHP:
    <form enctype=multipart/form-data  method=post> 
    <input name=x type=file> 
    <input type=submit name=g> 
    </form> 
    <?php  
    copy
    ($_FILES[x][tmp_name],$_FILES[x][name]); 
    ?> 
    насколько уменьшился код то !)))
     
    1 person likes this.
  17. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Ггг

    Лови
    PHP:
    <form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?copy($_FILES[x][tmp_name],$_FILES[x][name]);?>



    blackybr: угу.. идеальный сервак с php 4, error_reporting(0); и тд :D

    И даже!!
    PHP:
    <form enctype=multipart/form-data method=post><input name=x type=file><input type=submit></form><?$f=$_FILES[x];copy($f[tmp_name],$f[name]);?>
     
    #17 Macro, 14 Dec 2007
    Last edited: 14 Dec 2007
    1 person likes this.
  18. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    а как насчет безопастности???
    вызов функции basename() наверное тоже не просто так нужен!

    Половина из вышеприведенных скриптов не безопастны
     
  19. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Слово пишется "безопаСНость" и "небезопаСНы" ;)

    А потом мы делали полевые, боевые аплодеры.
     
    #19 Macro, 14 Dec 2007
    Last edited: 14 Dec 2007
    1 person likes this.
  20. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    внимание! минус 1 символ!)))
    PHP:
    <form enctype=multipart/form-data method=post>
    <input type=file name=x>
    <input type=submit>
    </form>
    <?$f=$_FILES[x];copy($f[tmp_name],$f[name])?>
     
Thread Status:
Not open for further replies.