【问题标题】:how to use CURL to request a php page on another server and then process the response如何使用 CURL 请求另一台服务器上的 php 页面,然后处理响应
【发布时间】:2011-07-29 13:16:31
【问题描述】:

我正在尝试从另一台服务器连接到 mysql 数据库并处理该服务器上的所有查询,然后使用 CURL 将所有数据发送到原始服务器。

我已经研究了几个小时,但似乎找不到正确的方法。

所以这就是我想要做的整体:

  1. 当有人从服务器 A 访问页面时,服务器 A 会向服务器 B 发送请求,然后服务器 B 将连接到数据库。

  2. 一旦服务器 B 连接到数据库,它将从某些行和字段中获取信息,然后将其发送回服务器 a。

  3. 一旦服务器 A 收到信息,它就会回显等等...

首先,这样做安全吗?它不会喜欢在两台甚至一台服务器上打开一扇门吗?

其次,我不知道该怎么做。

示例代码会很棒!

【问题讨论】:

标签: php mysql curl


【解决方案1】:

在服务器 A 上

$post_fields = array(
    'variable_name' => 'variable_value',
    'variable' => $variable,
);
$ch = curl_init('http://www.serverB.com/example.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,  $post_fields);
curl_setopt($ch, CURLOPT_POST, 1);
$result = curl_exec($ch);

$result 现在包含您从服务器 B 请求的页面的 HTML。

在服务器 B 上

// pseudocode
$variable = $_POST['variable'];
$variable_name = $_POST['variable_name'];
$db_results = $db->getQuery('SELECT * FROM table WHERE `variable` = ?', array($variable))->toString();
echo $db_results;

安全吗?

这取决于。是否需要保护来自数据库的信息不被公众看到?显然,通过上面的设置,信息只是echod 输出到服务器 B 上的一个页面。如果有人找到该页面,那么他们将能够看到这些信息。

如果这无关紧要,那么它会完美保存并且不会打开任何门(您拥有这两个网站,对吗?)。

如果您需要防止这种情况发生,那么我建议从服务器 A 向服务器 B 发送一个令牌,以验证正确的脚本正在尝试访问信息。类似于 API 密钥的东西,您可以在 curl 请求中将其作为标头传递,然后从服务器 B 上的 $_SERVER 中取出并进行验证。

【讨论】:

  • 您好,感谢您的回答。您为服务器 b 建议的代码 ("$db_results = $db->getQuery('SQL')->toString(); echo $db_results;")。你能解释一下如何从我的数据库中获取信息并将其发送到服务器 a。此外,是否可以在此过程进行的同时将变量从服务器 a 传递到服务器 b?因为我有一个变量,它的值是 sql 查询需要选择某一行,但是这个变量放在服务器 a 上,所以我想将它传递给服务器 b。
  • $db_results = $db->getQuery('SQL')->toString(); echo $db_results 是伪代码,用于说明如何从数据库中获取结果并将它们转换为可以echod 输出到页面的字符串。您需要自己编写此位以反映您的数据库结构和您的数据库访问方法,例如 PDO、ORM 等。原始答案更新以说明通过post 传递变量
  • 你好,我似乎在服务器 b 上使用该代码收到此错误:“致命错误:在第 6 行的 /db_access.php 中的非对象上调用成员函数 toString()”其中代码“$db_results = $db->getQuery('SELECT * FROM table WHERE variable = ?', array($variable))->toString(); echo $db_results;”
  • 另外,你使用“getQuery”的地方不应该是“mysql_query”吗?感谢您的帮助伙伴。
  • 那是pseudocode。您需要像我之前提到的那样为 mysql_query 等进行更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多