[Q] file_get_content и относительные пути (php)

Discussion in 'PHP' started by draliokero, 1 Apr 2009.

  1. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    PHP:
    echo file_get_contents("http://www.google.ru");
    Помогите нужно заменить все относительные пути в ссылках и в action’ах на прямые.

    И еще вопрос: на странице, которую я получаю, через file_get_contents, есть каптча, если пути изменить на полные и отправить, пройдут ли обработку формы?
     
  2. KaZ@NoVa

    KaZ@NoVa Elder - Старейшина

    Joined:
    5 Jul 2008
    Messages:
    368
    Likes Received:
    438
    Reputations:
    -16
    Заменить все относительные пути в ссылках и в action’ах на прямые можно с помощью регулярных выражений.

    Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)
     
  3. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    Допустим, получил страницу http://site.com/bla/bla/index.php
    action у форм такой ../../file.php т.е. на два уровня выше,
    сложно будет с регулярками сделать вида http://site.com/file.php :-(
     
  4. Sharky

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

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    а если проверка referer? тогда без подмены запроса не обойтись
     
  5. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    В общем, нашел функцию... помогите, пожалуйста, теперь с циклом, чтобы все ссылки привести в абсолютный вид и вывести страницу :)
    PHP:
    <?php
    /**
     * Приведение ссылки к абсолютному URI
     * 
     * @param string $link ссылка (абсолютный URI, абсолютный путь на сайте, относительный путь)
     * @param string $base базовый URI (можно без "http://")
     * @return string абсолютный URI ссылки
     */
    function uri2absolute($link$base)
    {
         if (!
    preg_match('~^(http://[^/?#]+)?([^?#]*)?(\?[^#]*)?(#.*)?$~i'$link '#'$matchesLink)) {
            return 
    false;
             } 
        if (!empty(
    $matchesLink[1])) {
            return 
    $link;
             } 
        if (!
    preg_match('~^(http://)?([^/?#]+)(/[^?#]*)?(\?[^#]*)?(#.*)?$~i'$base '#'$matchesBase)) {
            return 
    false;
             } 
        if (empty(
    $matchesLink[2])) {
            if (empty(
    $matchesLink[3])) {
                return 
    'http://' $matchesBase[2] . $matchesBase[3] . $matchesBase[4];;
                 }
            return 
    'http://' $matchesBase[2] . $matchesBase[3] . $matchesLink[3];
             }
        
    $pathLink explode('/'$matchesLink[2]);
         if (
    $pathLink[0] == '') {
            return 
    'http://' $matchesBase[2] . $matchesLink[2] . $matchesLink[3];
             }
        
    $pathBase explode('/'preg_replace('~^/~'''$matchesBase[3]));
         if (
    sizeOf($pathBase) > 0) {
            
    array_pop($pathBase);
             }
        foreach (
    $pathLink as $p) {
            if (
    $p == '.') {
                continue;
                 } elseif (
    $p == '..') {
                if (
    sizeOf($pathBase) > 0) {
                    
    array_pop($pathBase);
                     } 
                } else {
                
    array_push($pathBase$p);
                 }
            }
        return 
    'http://' $matchesBase[2] . '/' implode('/'$pathBase) . $matchesLink[3];
        }
        
    $url "http://www.google.ru/";
    $content file_get_contents($url);
    Code:
    preg_match_all("#src=['\"]([^'\"].*\.(gif|jpg|jpeg|png|js))#iU", $content, $images);
    ...........
    
     
    #5 draliokero, 1 Apr 2009
    Last edited: 1 Apr 2009
  6. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    Может кто нибудь помочь? :)
     
  7. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    в помойку выкинь эти функции)

    Проще всего заставить браузер грузить картинки, css и т.д. с другого сайта путём html

    Вставляешь вот этот код и любуешься (желательно после <head>, но можно и в самом начале).
    Code:
    <base href="http://vkontakte.ru/" />
    Но ajax у тебя работать не будет, надеюсь сам знаешь почему :)

    Ну или в крайнем случае реплейсом меняй ссылки. что-то типо того:

    PHP:
    $str file_get_contents('http://vkontakte.ru/');
    $str preg_replace('#(href|src)=["\'][http://]?([^:]*)["\']#Ui''\\1="http://vkontakte.ru/\\2"'$str);
    echo 
    $str;
     
    2 people like this.
  8. draliokero

    draliokero Member

    Joined:
    14 Mar 2009
    Messages:
    83
    Likes Received:
    6
    Reputations:
    0
    .:EnoT:., спс, самое простое решение будет, тупо дописывать <base href="" />
     
  9. REDz

    REDz New Member

    Joined:
    12 Dec 2008
    Messages:
    23
    Likes Received:
    1
    Reputations:
    0
    Чет не допонял, автор те нужен тип граб? Так это он делается другим способом...