PHP: echo file_get_contents("http://www.google.ru"); Помогите нужно заменить все относительные пути в ссылках и в action’ах на прямые. И еще вопрос: на странице, которую я получаю, через file_get_contents, есть каптча, если пути изменить на полные и отправить, пройдут ли обработку формы?
Заменить все относительные пути в ссылках и в action’ах на прямые можно с помощью регулярных выражений. Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)
Допустим, получил страницу http://site.com/bla/bla/index.php action у форм такой ../../file.php т.е. на два уровня выше, сложно будет с регулярками сделать вида http://site.com/file.php :-(
В общем, нашел функцию... помогите, пожалуйста, теперь с циклом, чтобы все ссылки привести в абсолютный вид и вывести страницу 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); ...........
в помойку выкинь эти функции) Проще всего заставить браузер грузить картинки, 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;