Как вывести контент с одного сайта на другой

1. Михаил (15.08.2015 / 16:40)
Как вывести контент с одного сайта на другой не используя фрейм, нужно для того что бы не описывать подробно страницу на которую ссылаешься и пользователь своими глазами видел её, важно что бы ссылки не подменялись.
Вот неудачный пример http://evro.link/test.html
вот код:
<?
$content = file_get_contents("http://visavi.net");

$pos = strpos($content, "<html>");

$content = substr($content, $pos);

$pos = strpos($content, "</html>");

$content = substr($content, 0, $pos);

$content = mb_convert_encoding($content, "utf-8");

echo $content; 
?>


2. Сергей (15.08.2015 / 19:36)
1. Salvador, Ajax не пойдёт ?

3. Dmitry Kokorin (15.08.2015 / 20:22)
Curl? Как вариант

Добавлено через 02:12 сек.
Изображения и стили с помощью replace заменить пути

4. Михаил (15.08.2015 / 21:44)
2. LETGAM, да что угодно, главное не фрейм

Добавлено через 03:21 сек.
3. DimmoS, я php только начал учить, пока не знаю что такое Curl, мне бы сам код как пример, а там разберусь с мануалом на пару

Добавлено через 06:55 сек.
цель показать нужную часть сайта, скриншотер сайтов не подходит, есть такой скрипт, здесь главное что бы человек кликая по ссылкам демонстрируемого сайта мог перейти по той ссылке по какой кликнул, а в приведенном мною коде все ссылки заменяются на мои

Добавлено через 08:13 сек.
фрейм не подходит так, как человек не перейдет на тот сайт что в рекламе, все внутренние переходы будут в фрейме

5. karpov-ml (15.08.2015 / 22:03)
Фрейм может быть запрещен еще на сервере, на который устанавливается он. будет пустая страница, либо в оепре будет просить открыть в новой вкладке.

6. Михаил (16.08.2015 / 02:49)
5. karpov-ml, и это то же минус фрейму, вот думаю эта тема будет интересна не только мне

7. Dmitry Kokorin (16.08.2015 / 07:32)
<?php

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://site.ru/'); 
  
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_USERAGENT, "Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1");  
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept-Language: en-us,en;q=0.7","Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5")); 
$data = curl_exec($curl); 
curl_close($curl); 

$data = str_replace('что_заменить', 'на_что_заменить', $data);
echo $data;


8. Михаил (16.08.2015 / 10:14)
7. DimmoS, Это то, что нужно, скрипт мобильным прикидывается?

9. Михаил (16.08.2015 / 12:11)
Как я не мучился с этим:
$data = str_replace('что_заменить', 'на_что_заменить', $data); 
ссылки всегда заменяются на мои, можно рабочий пример?

10. Сергей (16.08.2015 / 13:28)
9. Salvador, адрес страницы дай , которую нужно запарсить заграбить и вывести .

11. Михаил (16.08.2015 / 13:49)
можно ещё добавить "откуда пришли на страницу" работает это или нет я не знаю
 <?php
$ref = 'http://visavi.net/'; // откуда пришли на страницу
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://visavi.net/forum/topic.php?tid=42562&start=0'); 
curl_setopt($curl, CURLOPT_REFERER, $ref); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_USERAGENT, "Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1");  
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept-Language: en-us,en;q=0.7","Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5")); 
$data = curl_exec($curl); 
curl_close($curl); 

$data = str_replace('DimmoS', 'Программист', $data);
echo $data; ?>


12. Евгений (16.08.2015 / 14:05)
Честно говоря, я не совсем понимаю, какую цель преследует автор, но если нужно спарсить определенную часть с сайта, я бы использовал готовое решение - http://simplehtmldom.sourceforge.net/

13. Михаил (16.08.2015 / 17:09)
12. Ronson, спаривать как раз ничего не нужно, наоборот разделить.
а моя цель добиться вывода на странице сайт донора и при этом чтобы все его ссылки оставались целыми, на данный момент выходит
так: http://evro.link/topic.php?tid=42562&start=0&rand=8811
а надо так: http://visavi.net/topic.php?tid=42562&start=0&rand=8811
В грабберах преследуют цель вывести чужой контент с подменной ссылок сайта донора на свои, а мне нужно что бы сайт отображался на странице как можно ближе к реальному виду и структуре, но со стилями похоже не возможно, хотя бы ссыли донора отображались верно.
Всё это как замена скриншотеру сайтов с динамически меняющимся отображением сайта.
А настоящая цель это лень, у меня тысячи сайтов которых нужно отобразить на специальных страницах, влом их описывать и нужные изображения по местам расставлять smile

14. Dmitry Kokorin (16.08.2015 / 21:04)
13. Salvador,
<?php

$data = str_replace("evro.link", "visavi.net", $data);

Или

$data = str_replace('href="', 'href="http://visavi.net/', $data);


15. Михаил (16.08.2015 / 21:07)
14. DimmoS, Спасибо

16. Dmitry Kokorin (16.08.2015 / 21:10)
15. Salvador, если не поможет то есть еще вариант

Добавлено через 02:50 сек.
Но, по-идее либо тот либо другой по-любому должен работать

17. Михаил (16.08.2015 / 21:16)
14. DimmoS, http://evro.link/test.html отличный результат, три дня искал решение.
$data = str_replace("evro.link", "visavi.net", $data); 
Не подходит, пробовал сразу
$data = str_replace('href="', 'href="http://visavi.net', $data);
идеально, даже мой дизайн адаптируется под http://visavi.net

18. Dmitry Kokorin (16.08.2015 / 21:20)
Есть одна проблема.. Посетитель ткнув на любую ссылку уйдет на тот сайт

19. Михаил (16.08.2015 / 21:30)
Это не проблема, пытался добиться такого результата, мне просто лень описывать множество ресурсов, так гораздо удобнее, это же не граббер =) граббер проще было найти

20. Dmitry Kokorin (16.08.2015 / 21:30)
Чтобы это обойти нужно сделать так
<?php

$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=',$data); 

//а в test.html уже ловить
$query = $_GET['query'];
curl_setopt($curl, CURLOPT_URL, 'http://'.$query); 


21. Михаил (16.08.2015 / 21:33)
20. DimmoS, а что делает этот код?
<?php

$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=',$data); 

//а в test.html уже ловить
$query = $_GET['query'];
curl_setopt($curl, CURLOPT_URL, 'http://'.$query);  
?

22. Dmitry Kokorin (16.08.2015 / 21:35)
21. Salvador, как в граббах подмена ссылки.. Посетитель думает что он реально сидит на сайте с контентом а на самом деле сидит и смотрит сграбленые страницы

Добавлено через 01:40 сек.
Только есть в этом и минус. .подмена ссылки палится

23. Михаил (16.08.2015 / 21:45)
22. DimmoS, Ради интереса попробовал : http://evro.link/test.html
<?php
$ref = 'http://visavi.net/'; // откуда пришли на страницу
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://visavi.net/forum/topic.php?tid=42562&start=0'); 
curl_setopt($curl, CURLOPT_REFERER, $ref); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_USERAGENT, "Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1");  
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept-Language: en-us,en;q=0.7","Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5")); 
$data = curl_exec($curl); 
curl_close($curl); 
$query = $_GET['query'];
curl_setopt($curl, CURLOPT_URL, 'http://'.$query);
$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=',$data); 
echo $data;
Мне кажется что обновлений не будет, страница фиксирована, да и смысла в этом мало для меня, разве что файлы качать, но может кому пригодиться вместо скриншотера что бы поисковики санкции не налагали

24. Михаил (16.08.2015 / 21:56)
Что такое КЦ?
Ошибка Ошибка! Для изменения авторитета вам необходимо набрать 150 КЦ!

25. Dmitry Kokorin (16.08.2015 / 22:25)
1 - для поисковиков это типа копия страницы
2 - кц это твои сообщения на форуме + комментарии к блогам + коммы к загрузкам + к фотогалерее и тп

26. Михаил (17.08.2015 / 15:01)
Если убрать вывод: echo $data; то скрипт смонтированный в страницу будет посылать запрос на сайт донора?

27. Dmitry Kokorin (17.08.2015 / 15:50)
26. Salvador,
1 нет! Сам на себя
2 ты код который я тебе дал не совсем правильно воткнул

28. Михаил (17.08.2015 / 15:57)
27. DimmoS, Код который сейчас собираюсь использовать
<?php
$ref = 'http://visavi.net'; // откуда пришли на страницу
$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, 'http://visavi.net'); 
curl_setopt($curl, CURLOPT_REFERER, $ref); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_USERAGENT, "Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1");  
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept-Language: en-us,en;q=0.7","Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5")); 
$data = curl_exec($curl); 
curl_close($curl); 


//$query = $_GET['query'];
//curl_setopt($curl, CURLOPT_URL, 'http://'.$query);
$data = str_replace('href="', 'href="http://visavi.net', $data);
echo $data;
?>
На данный момент встроен в тестовую страницу http://evro.link/test.html что получилось не так и как правильно?

Добавлено через 02:43 сек.
Если сам на себя будет посылать запрос, то и сервер будет грузить и лучше его убирать или закомментировать пока не используется?

29. Dmitry Kokorin (17.08.2015 / 16:02)
<?php

$ref = 'http://visavi.net/'; // откуда пришли на страницу 
$query = isset($_GET['query']) ? $_GET['query'] : $ref; 

$curl = curl_init();  
curl_setopt($curl, CURLOPT_URL, $query); 
curl_setopt($curl, CURLOPT_REFERER, $ref); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($curl, CURLOPT_USERAGENT, "Nokia6630/1.0 (2.3.129) SymbianOS/8.0 Series60/2.6 Profile/MIDP-2.0 Configuration/CLDC-1.1");   
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Accept-Language: en-us,en;q=0.7","Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"));  
$data = curl_exec($curl);  
curl_close($curl);  
$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=http://visavi.net/',$data);  
echo $data;


30. Михаил (17.08.2015 / 16:03)
я думал что скрипт вообще не будет запускаться и переспросил на всякий случай, что его заставляет срабатывать ?

31. Dmitry Kokorin (17.08.2015 / 16:06)
В $query будет храниться запрос для curl

Добавлено через 00:38 сек.
Разбери код внимательнее

32. Михаил (17.08.2015 / 16:15)
$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=http://visavi.net/',$data);  
http://visavi.net/ ,без слеша на конце пошло
$data = str_replace('<a href="','<a href="http://evro.link/test.html?query=http://visavi.net',$data);  

Добавлено через 02:50 сек.
31. DimmoS, а где можно почитать о том как переменные сохраняют данные и где их хранят? я только недавно начал изучать, в мануале ничего нет на эту тему или я не нашёл

33. Dmitry Kokorin (17.08.2015 / 16:23)
Переменная хранит все что угодно
$string = 'qwerty';
$number = 1234567890;
$data = 'я пошел в лес там было 28 березы и сайт http://visavi.net';

34. Михаил (17.08.2015 / 16:27)
33. DimmoS, а где она хранит, существует временный файл, например на сервере в обработчике или создаёт отдельный на хостинге?

35. Dmitry Kokorin (17.08.2015 / 16:37)
В интерпретаторе ниче никогда не хранится.. Все хранится на стороне сервера/обработчика/скрипта
Обработчик = твой скрипт на хостинге

36. Михаил (17.08.2015 / 16:43)
Вот, теперь сошлись пазлы, очень ценный ответ.
И просто любопытство.
Скрипт не выводит картинки http://evro.link/test.html?query=http://visavi.net/ это так и должно? или что то не так сделал? страницы выводятся через чпу может из за этого? это не проблема, мне так подойдет

37. Михаил (17.08.2015 / 16:55)
нет, точно чпу непричем, вот отдельную страницу создал http://evro.link/pers.php?query=http://visavi.net/

Добавлено через 02:55 сек.
И ещё очень интересный эксперимент, я подставил в адресной строке вместо http://visavi.net другой сайт и получился такой результат: http://evro.link/pers.php?query=http://php.ru/forum/viewtopic.php?t=31259 дело в query ?

38. Dmitry Kokorin (17.08.2015 / 17:00)
Замену надо
<?php

$data = str_replace('<img src="', '<img src="http://visavi.net/', $data);

Добавлено через 05:29 сек.
http://evro.link/test.html?query=http://ya.ru

39. Dmitry Kokorin (17.08.2015 / 17:10)
Стили также
<?php

$data = str_replace('href="', 'href="http://visavi.net/", $data);


40. Михаил (17.08.2015 / 17:37)
<?php 
$data = str_replace('<link rel="stylesheet" type="text/css" href="/assets/markitup/style.css" />', '<link rel="stylesheet" type="http://visavi.net/text/css" href="http://visavi.net/assets/markitup/style.css" />, $data);
пробовал по разному, не получается, где я ошибся?

41. Dmitry Kokorin (17.08.2015 / 17:43)
<?php
  
$data = str_replace('<link rel="stylesheet" type="text/css" href="/assets/markitup/style.css" />', '<link rel="stylesheet" type="text/css" href="http://visavi.net/assets/markitup/style.css" />', $data);
Кавычки внимательно расставляй

42. Михаил (17.08.2015 / 19:23)
Интересно, почему такая конструкция прокатывает:
<?php

$host = '<a href="' ; 
$dom = '<a href="http://evro.link/pers.php?query=http://visavi.net/' ; 

$data = str_replace($host,$dom,$data); 
А такая нет?:
<?php

$st = '<link rel="stylesheet" type="text/css" href="assets/markitup/style.css"/>';
$stv = '<link rel="stylesheet" type="text/css" href="http://visavi.net/assets/markitup/style.css"/>';
$data = str_replace($st, Sstv, $data);


43. Dmitry Kokorin (17.08.2015 / 20:15)
<?php 

$st = '<link rel="stylesheet" type="text/css" href="assets/markitup/style.css"/>'; 
$stv = '<link rel="stylesheet" type="text/css" href="http://visavi.net/assets/markitup/style.css"/>'; 
$data = str_replace($st, $stv, $data);
Внимательно смотри

URL: https://visavi.net/topics/42562