У меня есть код для преобразования страницы 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
, это слишком медленно и даже не может получить вывод.
Я думаю, что у вас есть проблема разрешения 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);
Чтобы выяснить причину, почему она не работает на реальном сервере, попробуйте это:
$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);
Я думаю, что это зависит от конфигурации SSL провайдера.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
Проверьте что-л. о конфигурации SSL вашего провайдера.
Похоже, это проблема сетевой маршрутизации, в основном сервер не может найти маршрут к 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
но это не будет работать, если у вас есть несколько виртуальных хостов на сервере.
Попробуй это:
file_put_contents("home.html", fopen("http://website.net/home.php", 'r'));
но завиток тоже должен работать. Если у вас есть SSH-доступ к серверу, попробуйте разрешить ваше доменное имя с помощью ping или чего-то еще. Возможно наличие проблемы с локальным DNS — она объяснит, почему вы можете загружать файлы с внешних доменов.
Для моего примера вам понадобится allow_fopen_url
чтобы быть включен, поэтому, пожалуйста, убедитесь, что phpinfo()
первый.