Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:远程函数调用并返回结果?_Php - Fatal编程技术网

PHP:远程函数调用并返回结果?

PHP:远程函数调用并返回结果?,php,Php,我对PHP不是很精通。我想知道如何在两台web服务器之间进行通信。为了获得许可,(从第一台服务器)在远程服务器上运行功能(查询)。并将结果返回给第一台服务器 实际上,主题是: Web服务器(1)------------->Web服务器(2)------------->数据库服务器 Web服务器(1)您可以通过使用API来实现。在第二台服务器上创建一个页面,该页面接受变量并使用这些变量与服务器通信(取决于您需要什么)。该页面的标准回复应该是JSON或XML。然后通过请求该文件并从第二台服务器获得回

我对PHP不是很精通。我想知道如何在两台web服务器之间进行通信。为了获得许可,(从第一台服务器)在远程服务器上运行功能(查询)。并将结果返回给第一台服务器

实际上,主题是:
Web服务器(1)
------------->
Web服务器(2)
------------->
数据库服务器


Web服务器(1)
您可以通过使用API来实现。在第二台服务器上创建一个页面,该页面接受变量并使用这些变量与服务器通信(取决于您需要什么)。该页面的标准回复应该是JSON或XML。然后通过请求该文件并从第二台服务器获得回复,从服务器1读取该文件

*注意:如果是私人文件,请确保使用身份验证方法阻止用户访问该文件

我能想到的一个好方法是通过URL向第二台服务器发送请求。在GET(或POST)参数中,指定要调用的方法,以及(为了安全起见)随时间变化的某种散列。其中的散列确保没有第三方可以在第二台服务器上任意运行该函数

要发送请求,可以使用cURL:

function get_url($request_url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $request_url);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $response = curl_exec($ch);
  curl_close($ch);

  return $response;
}
这将发送一个GET请求。然后,您可以使用:

$request_url = 'http://second-server-address/listening_page.php?function=somefunction&securityhash=HASH';
$response = get_url($request_url);

在第二台服务器上,设置
listening_page.php
(当然可以使用您喜欢的任何文件名),以检查GET请求并验证请求的完整性(即散列、正确和有效的参数)

你的目标绝对是可能的。您需要设置某种api,以便服务器1向服务器2发出请求

我建议您仔细阅读SOAP和RESTAPI

通常,您将使用类似CURL的方法从服务器1联系服务器2

谷歌卷曲,你应该很快得到的想法


要给你一个完整的解决方案并不容易,所以我希望这一正确的方向会有帮助。

你看过?RPC吗?这个例子是关于RPC的,你的意思是?RPC代表远程过程调用,它似乎是你想要做的。它是一个通用协议(或概念)。变体有RMI(Java)、XML-RPC、JSON-RPC。。。。有很多选择。你甚至可以创建自己的。但这并不意味着在你的情况下这是最好的方式。所以你说的是REST API?是的,但这取决于用户,REST API很好,但如果他愿意,他当然可以使用纯文本作为回答。朋友们,很抱歉打断了你的讨论。但是,由于我是PHP新手,PHP可以直接接收JSON或XML结果吗?我的意思是,JSON或AJAX结果将返回到Javascript并在HTML元素上打印。@4lvin:JSON和XML只是一种数据格式。PHP有
json\u encode
json\u decode
来创建和解析json.Woah!这样做简单吗?所以我可以直接进行任何函数()调用并获得返回,就像在同一个本地函数中一样简单..?是的。不过,您需要“公开”希望调用的函数。(即,服务器2获取GET请求,然后执行请求的函数,然后将响应传递回服务器1,因此服务器1不直接调用远程函数,但具有类似的效果)。我已经测试过,它可以正常工作。buddy:D非常简单。这是正确的解决方案吗?我的意思是,其他人说要使用RESTAPI、SOAP等。为什么请……您实现的本质上是一个API。服务器1正在从服务器2的API请求信息。REST和SOAP是传递数据的方法。它们实现了某些请求数据的约定,并以有意义和一致的方式构造了它们的返回数据。如果你要从服务器2请求大量数据,你应该考虑把更多的想法放在你的API中。这类任务有很多相关资源(谷歌“构建api”或类似的资源)。啊,我现在明白了:)REST和SOAP更适合于复杂和大量的数据传输。好吧。我的情况将与您的一个可能很少的数据输入和返回的原因是好的。但最后一个问题(请回答)。多负载安全吗?我的意思是,如果有多个并发用户调用这个1文件(Server2API文件),我可以用你的方式吗?谢谢你关于使用SOAP和RESTAPI的建议。但是,Alex的方法很简单&有效。那么,您能解释一下他的解决方案和SOAP/RESTAPI之间的区别吗?谢谢:)如上所述,使用http get是一个非常好的解决方案,但构建API最终将提供更好的功能、安全性等。如果您只是查询结果,那么使用get是快速而简单的。例如,如果您想要对用户进行身份验证,将要插入的数据发布到数据库等,那么公开的get可能并不理想。