如何在同一台服务器上使用php curl或file_get_内容获取url内容?

如何在同一台服务器上使用php curl或file_get_内容获取url内容?,php,caching,curl,file-get-contents,Php,Caching,Curl,File Get Contents,我有一些将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);

我有一些将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\u get\u contents
,但也不起作用

注:

  • http://website.net/home.php
    页面位于代码所在的同一站点中
  • 根据本地主机和服务器中的
    phpinfo()
    ,curl已启用
    允许url\u fopen
    已启用
编辑:

  • 当使用其他网站的页面而不是我的网站时,它可以正常工作

  • 网站的目标页面在我的浏览器中完全加载


我网站的网页加载速度和往常一样快,但当我使用
curl
file\u get\u contents
时,速度太慢,甚至无法获得输出

要调查它无法在live server上运行的原因,请尝试以下操作:

$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);

检查是否了解smth。关于您的提供商的SSL配置。

我认为您有DNS解决问题

有两种方法可以使用网站的locahost而不是外部域名

1。如果您有自己的服务器/VPS/专用服务器, 在127.0.0.1 website.net的
vim/etc/hosts
中添加条目,或尝试使用localhost(127.0.0.1)获取内容

2。如果您正在使用共享主机,请尝试在代码中使用下面的
url

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);
试试这个:

file_put_contents("home.html", fopen("http://website.net/home.php", 'r'));
但是卷曲也应该起作用。如果您有SSH访问服务器的权限,请尝试使用ping或其他方法解析您的域名。可能存在本地DNS问题-这将解释为什么您可以从外部域下载


对于我的示例,您需要
允许打开\u fopen\u url
,因此请首先通过
phpinfo()
验证。

看起来这是一个网络路由问题,基本上服务器无法找到到网站.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
但如果服务器上有多个虚拟主机,则这将不起作用。

检查服务器phpinfo()主机/服务器上的curl support=enabled and allow\u url\u fopen=onsure
allow\u url\u fopen=on
?curl已启用且allow\u url\u fopen已关闭,因此在exec@rajeshujade在我的机器里,侧面装得像黄油一样光滑。ping也很好。你能通过curl\u error函数看到任何错误吗?在脚本的开头添加。偶数curl函数返回您添加的ini_集('display_errors',1)中没有的true或False;错误报告(E_全部)在脚本的开头?另外,我更新了代码,请使用更新的代码。我不认为这将取决于提供程序SSL配置PHP错误
警告:文件内容(…html内容…在第行文件内容($result['content',$out);
php脚本托管在
http://website.net
本身..它没有使用外部网站为什么服务器不能访问它自己但在共享服务器上编辑主机文件是不可能的它试图访问外部IP地址并且找不到访问它的方法,这类似于在查看时找不到自己家的前门在窗口外。通过编辑/etc/hosts,您告诉服务器website.net位于服务器本身,而不是服务器外部。如果它位于共享服务器上,则服务提供商必须修复路由。您是否尝试使用外部IP地址?如果这样做有效,则这是路由问题,而不是PHP问题。页面加载和加载几分钟后在第xx行的file.php中显示
连接超时。在第xx行,您有文件内容…?我认为您的问题是由DNS问题引起的。您可以
echo gethostbyname(“yourdomainname.com”)吗
并将其与您的网站翻译成的实际IP进行匹配?它返回服务器的IP地址,并进行匹配。请使用
curl
file\u put\u contents
重新尝试,但在
curl\u setopt($ch,CURLOPT\u VERBOSE,true);
之前添加
curl\u exec($ch)
,以及
print\r(curl\u getinfo($ch));
就在
curl\u exec($ch);
之后发布结果。