我可以向同一台服务器发送CURL请求吗?

时间:2011-03-23 21:51:02

标签: php curl

我需要实现一种方法来对位于同一服务器或另一台服务器上的页面进行POST调用。我们不能使用include,因为我们调用的文件通常调用不同的数据库或具有相同名称的函数。

我一直在尝试使用curl来实现它,虽然它在从另一台服务器调用文件时工作得很好,但在调用文件所在的同一服务器时,我什么都没有。

编辑添加某些代码: 我正在做的简化版本:

File1.php

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

File2.php

<?php
echo "I'M IN!!";
?>

调用File1.php之后,我什么都没得到,但是如果File2.php在另一台服务器上,那么我得到一个结果。 有什么帮助吗?

我尝试使用服务器URL(http ...)和文件的总地址(/ home / wwww ....)

3 个答案:

答案 0 :(得分:51)

请注意,如果您向自己的网站发出CURL请求,那么您正在使用默认会话处理程序,而您通过CURL请求的页面使用与生成请求的页面相同的会话,会陷入僵局。

默认会话处理程序会在页面请求期间锁定会话文件。当您尝试使用同一会话请求另一个页面时,该后续请求将挂起,直到请求超时或会话文件可用。由于您正在执行内部CURL,因此运行CURL的脚本将锁定会话文件,并且CURL请求永远无法完成,因为目标页面永远无法加载会话。

答案 1 :(得分:4)

因为当您尝试使用public ip向本地服务器请求时,apache无法解析到其本地域。所以你必须检查哪个本地ip apache正在为该域使用。然后,您需要编辑/ etc / hosts文件,并使用本地IP和您的域添加新行。例如:

apache虚拟主机中该域的本地IP为:172.190.1.120,我的域名为mydomain.com 所以我要补充一下:

172.190.1.120 mydomain.com

然后你的卷曲会正常工作。

答案 2 :(得分:2)

你应该重构你的代码。除了Marc B提到的内容之外,这种方法还会不必要地减慢脚本速度(可能会大幅度降低)并导致很多混乱。没有冒犯,但这只是对错误逻辑的一个令人难以置信的hacky修复。