как узнать путь к webpath (например /public_html) на фтп-серверах?

Discussion in 'PHP' started by Дикс, 16 Jun 2009.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    захожу на фтп с помощью пхп
    есть ли возможность сразу определить корневую директорию размещённого там сайта?

    на некоторорых серверах она называется public_html, на других www..

    гугл ничего не дал
    хотя бы составить список таких имён
     
  2. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Apache/conf/httpd.conf - параметр DocumentRoot (или файл конфигурации любого другого веб-сервера)
    или
    PHP:
    <?php phpinfo(); ?>
    параметр DOCUMENT_ROOT
     
  3. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Он же на фтп заходит, толку с этого?
     
    _________________________
  4. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    да, на двух англоязычных сайтах так и отвечали)

    вот, если кому надо:

    PHP:
    $webpath '(([a-zA-Z0-9\-](\.|_)(asia$|com$|net$|org$|biz$|name$|mobi$|info$|com$|net$|ch$|uk$|us$|pro$|eng.pro$|aca.pro$|bar.pro$|cpa.pro$|jur.pro$|law.pro$|med.pro$|ru$|su$|com.ua$|in.ua$|kiev.ua$|dp.ua$|ua$|co.uk$|cc$|de$|fm$|in$|kz$|me$|nu$|tv$|ws$|ac$|ag$|am$|at$|be$|bz$|cn$|gs$|h$|io$|it$|la$|mn$|ms$|com.mx$|co.nz$|pl$|sc$|sh$|tc$|tj$|tk$|tm$|tw$|uz$|vc$|vg$|com.ag$|net.ag$|org.ag$|com.bz$|net.bz$|com.hn$|net.hn$|org.hn$|net.nz$|org.nz$|com.pl$|net.pl$|org.pl$|info.pl$|com.sc$|net.sc$|org.sc$|com.tw$|org.tw$|com.vc$|net.vc$|org.vc)))';
    $folders = array('public_html''pages''www''html''htdocs''httpdocs''httpsdocs''docs''site''wwwroot''domains');

    $found 0;

    foreach(
    $dirs as $dir)
        if(
    $dir != '.' || $dir != '..')
        if(
    in_array($dir$folders))
        {
            
    $found $dir;
            break;
        }elseif(
    preg_match($webpath$dir)){
            
    $found $dir;
            break;
        }else
            continue;

    if(!
    $found) die('webpath not found');
     
    #4 Дикс, 16 Jun 2009
    Last edited: 16 Jun 2009
  5. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Залил и выполнил :)
     
  6. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    как ты выполнишь скрипт на фтп-сервере, не зная доменного имени и корневой папки веб-сервера?
     
  7. FireFenix

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

    Joined:
    3 Jun 2009
    Messages:
    390
    Likes Received:
    115
    Reputations:
    23
    Ты не говорил, что ты незнаешь домена :)
     
  8. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Перебор с глубиной 2-3, по тем что написали
    'public_html', 'pages', 'www', 'html', 'htdocs', 'httpdocs', 'httpsdocs', 'docs', 'site', 'wwwroot', 'domains'
    плюс часто бывает имя домена в качестве веб-диры, так что добавь еще регулярку под этот случай.
     
  9. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    омг, куда залил, если он вебдиры не знает?
     
  10. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Code:
    омг, куда залил, если он вебдиры не знает?
    
    Куда-куда, в корень

    PHP:
    ./
    а далше курить вот это,

    http://us3.php.net/manual/en/book.ftp.php

    с помощью этих команд можно сделать что угодно, например загрузить скрипт, узнающий список дир, сохраняющий это дело в файл и скачать такой файлик обратно к себе

    скрипт, закачанный в корень, можно запустить с помощью ftp_site
     
    #10 Pashkela, 17 Jun 2009
    Last edited: 17 Jun 2009
  11. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Ну давай поподробнее, как с помощью команд ФТП сервера передаваемых ftp_site ты собираешься выполнить PHP-код???
     
  12. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Ну да, тут я погрячился децл:)) Зато в процессе эксперимента нашел более клёвый способ, позволяющий решить задачу быстро и без всяких загрузок, а именно - рекурсивно получить список папок, подпапок и файлов в них и, соотвественно, вычислить любые нужные пути:

    PHP:
    <pre>
    <?php
    @set_time_limit(0); 
    @
    ini_set("display_errors","1");
    $ftp_server 'фтп-сервер';
    $ftp_user_name 'фтп-логин';
    $ftp_user_pass 'фтп-пароль';
    $conn_id ftp_connect($ftp_server);
    $login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass);
    // Рекурсивно получаем список всех файлов и директорий на ФТП
    $buff ftp_rawlist($conn_id'/'TRUE);
    ftp_close($conn_id);
    var_dump($buff);
    ?>
    </pre>
    а уж с полученным массивом $buff делать всё что душе угодно
     
    #12 Pashkela, 17 Jun 2009
    Last edited: 17 Jun 2009
  13. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    Вот только так и нужно делать. Писал это дело сто лет назад, за кривость кода не ругать )) :

    PHP:

    ...

    function 
    iswebdir($dir){
      
    $strs = array("public_html","www","pages","html","htdocs","httpdocs","docs","site","wwwroot");
      foreach (
    $strs as $ptrn){
        if (
    $dir == $ptrn
          return 
    1;
      }
      return 
    0;
    }


    ...

      
    $filelist ftp_rawlist($conn$rootdir);

      foreach (
    $filelist as $raw){
        
    $filename trim(substr($rawstrrpos($raw" ")));
        
    $len strlen($filename);
        if (
    substr($filename$len-1) == "/"
          
    $filename substr($filename0$len 1);
        if (
    $slash strrpos($filename"/"))
          
    $filename substr($filename$slash 1);
        if (
    substr($raw01) == "d" OR strstr($raw"<DIR>")){ 
          if (
    iswebdir($filename)){
            if (
    substr($rootdir,-1)=="/")
              
    $wb $rootdir.$filename;
            else
              
    $wb $rootdir."/".$filename;
        
    $webdirs[] = $wb;
            }
          }
        }
      
    $webdirs[] = $rootdir;

     
    1 person likes this.
  14. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    спасибо
    мутная это тема - искать домен по айпи
    если займетесь этим - скажу что то что выдают сервисы типа 1whois.ru и бинг - лажа
     
  15. diehard

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

    Joined:
    30 Sep 2007
    Messages:
    442
    Likes Received:
    266
    Reputations:
    15
    пропиши на морде код, отправляющий $_SERVER['SERVER_NAME'] куда надо, через час - прочекай - забери ответ, за час то траф придет какой-нибудь на сайт.