Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   [Q] file_get_content и относительные пути (php) (https://forum.antichat.xyz/showthread.php?t=113982)

draliokero 01.04.2009 00:01

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

echo file_get_contents("http://www.google.ru"); 

Помогите нужно заменить все относительные пути в ссылках и в action’ах на прямые.

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

KaZ@NoVa 01.04.2009 00:22

Заменить все относительные пути в ссылках и в action’ах на прямые можно с помощью регулярных выражений.

Цитата:

И еще вопрос: на странице, которую я получаю, через file_get_contents, есть каптча, если пути изменить на полные и отправить, пройдут ли обработку формы?
Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)

draliokero 01.04.2009 00:30

Допустим, получил страницу http://site.com/bla/bla/index.php
action у форм такой ../../file.php т.е. на два уровня выше,
сложно будет с регулярками сделать вида http://site.com/file.php :-(

Sharky 01.04.2009 00:30

Цитата:

Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)
а если проверка referer? тогда без подмены запроса не обойтись

draliokero 01.04.2009 01:46

В общем, нашел функцию... помогите, пожалуйста, теперь с циклом, чтобы все ссылки привести в абсолютный вид и вывести страницу :-)
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);

Код:

preg_match_all("#src=['\"]([^'\"].*\.(gif|jpg|jpeg|png|js))#iU", $content, $images);
...........


draliokero 02.04.2009 06:44

Может кто нибудь помочь? :-)

.:EnoT:. 02.04.2009 08:20

в помойку выкинь эти функции)

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

Вставляешь вот этот код и любуешься (желательно после <head>, но можно и в самом начале).
Код:

<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


draliokero 02.04.2009 15:44

.:EnoT:., спс, самое простое решение будет, тупо дописывать <base href="" />

REDz 03.04.2009 05:12

Чет не допонял, автор те нужен тип граб? Так это он делается другим способом...


Время: 09:45