Как получить содержимое URL-адреса с помощью php curl или file_get_content на том же сервере?

У меня есть код для преобразования страницы PHP в HTML:

$dynamic = "http://website.net/home.php";
$out = "home.html" ;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"$dynamic");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$file = curl_exec($ch);

file_put_contents($out, $file);

Это прекрасно работает в localhost, но занимает слишком много времени / не работает на живом сайте.

я пробовал php_get_contents, но это также не работает.

Замечания:

  • http://website.net/home.php Страница находится на том же сайте, где размещен код.
  • curl является включен а также allow_url_fopen является на согласно phpinfo() как на локальном хосте, так и на сервере.

РЕДАКТИРОВАТЬ:

  • Работает нормально при использовании другой сайт страница вместо моего сайта.

  • Целевая страница сайта прекрасно загружается в моем браузере.

Веб-страница моего сайта загружается как обычно быстро, но когда я использую curl или же file_get_contents, это слишком медленно и даже не может получить вывод.

3

Решение

Я думаю, что у вас есть проблема разрешения DNS.

Существует два способа использовать locahost вашего сайта вместо внешнего доменного имени.

1. Если у вас есть собственный сервер / VPS / выделенный сервер,
Добавить запись в vim /etc/hosts для 127.0.0.1 website.net или попробуйте получить содержимое с помощью localhost (127.0.0.1).

2. Если вы используете виртуальный хостинг, тогда попробуйте использовать ниже url(s) в вашем коде,

http://localhost.mywebsite.net/~username/home.php.
OR
Try to call http://localhost.mywebsite.net/home.php

Попробуйте это, чтобы получить содержание URL —

$dynamic = TRY_ABOVE_URL(S)
$out = "home.html" ;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$dynamic);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$file = curl_exec($ch);

if($file === false) {
echo 'Curl error: ' . curl_error($ch);
}

file_put_contents($out, $file);
2

Другие решения

Чтобы выяснить причину, почему она не работает на реальном сервере, попробуйте это:

$dynamic = "http://website.net/home.php";

$out     = "home.html" ;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $dynamic);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$file = curl_exec($ch);

if($file === false)
{
echo 'Curl error: ' . curl_error($ch);
}

curl_close($ch);

file_put_contents($out, $file);
0

Я думаю, что это зависит от конфигурации SSL провайдера.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);

Проверьте что-л. о конфигурации SSL вашего провайдера.

0

Похоже, это проблема сетевой маршрутизации, в основном сервер не может найти маршрут к website.net (сам по себе). Это проблема с сервером, а не проблема с PHP. Самое быстрое решение — отредактировать файл hosts на сервере и установить для website.net значение 127.0.0.1.

На Linux-серверах вам нужно добавить следующую строку в конец / etc / hosts:

127.0.0.1 website.net

В качестве альтернативы вы можете попробовать получить http://127.0.0.1/home.php но это не будет работать, если у вас есть несколько виртуальных хостов на сервере.

0

Попробуй это:

file_put_contents("home.html", fopen("http://website.net/home.php", 'r'));

но завиток тоже должен работать. Если у вас есть SSH-доступ к серверу, попробуйте разрешить ваше доменное имя с помощью ping или чего-то еще. Возможно наличие проблемы с локальным DNS — она ​​объяснит, почему вы можете загружать файлы с внешних доменов.

Для моего примера вам понадобится allow_fopen_url чтобы быть включен, поэтому, пожалуйста, убедитесь, что phpinfo() первый.

0
По вопросам рекламы [email protected]