Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
[Q] file_get_content и относительные пути (php) |

01.04.2009, 00:01
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
[Q] file_get_content и относительные пути (php)
PHP код:
echo file_get_contents("http://www.google.ru");
Помогите нужно заменить все относительные пути в ссылках и в action’ах на прямые.
И еще вопрос: на странице, которую я получаю, через file_get_contents, есть каптча, если пути изменить на полные и отправить, пройдут ли обработку формы?
|
|
|

01.04.2009, 00:22
|
|
Постоянный
Регистрация: 05.07.2008
Сообщений: 555
Провел на форуме: 3134311
Репутация:
1467
|
|
Заменить все относительные пути в ссылках и в action’ах на прямые можно с помощью регулярных выражений.
И еще вопрос: на странице, которую я получаю, через file_get_contents, есть каптча, если пути изменить на полные и отправить, пройдут ли обработку формы?
Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)
|
|
|

01.04.2009, 00:30
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
Допустим, получил страницу http://site.com/bla/bla/index.php
action у форм такой ../../file.php т.е. на два уровня выше,
сложно будет с регулярками сделать вида http://site.com/file.php :-(
|
|
|

01.04.2009, 00:30
|
|
Познавший АНТИЧАТ
Регистрация: 01.05.2006
Сообщений: 1,021
Провел на форуме: 3424739
Репутация:
921
|
|
Если ссылки будут указывать именно на тот же скрипт-капчу, но просто с полным путём, то всё должно быть ок =)
а если проверка referer? тогда без подмены запроса не обойтись
|
|
|

01.04.2009, 01:46
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
В общем, нашел функцию... помогите, пожалуйста, теперь с циклом, чтобы все ссылки привести в абсолютный вид и вывести страницу :-)
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; 01.04.2009 в 04:57..
|
|
|

02.04.2009, 06:44
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
Может кто нибудь помочь? :-)
|
|
|

02.04.2009, 08:20
|
|
Постоянный
Регистрация: 29.05.2007
Сообщений: 852
Провел на форуме: 4832771
Репутация:
1916
|
|
в помойку выкинь эти функции)
Проще всего заставить браузер грузить картинки, 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;
|
|
|

02.04.2009, 15:44
|
|
Познающий
Регистрация: 14.03.2009
Сообщений: 86
Провел на форуме: 385811
Репутация:
12
|
|
.:EnoT:., спс, самое простое решение будет, тупо дописывать <base href="" />
|
|
|

03.04.2009, 05:12
|
|
Новичок
Регистрация: 12.12.2008
Сообщений: 27
Провел на форуме: 76822
Репутация:
8
|
|
Чет не допонял, автор те нужен тип граб? Так это он делается другим способом...
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|