将参数发送到 PHP 中的子域的最佳方法是什么
What is the best way to send parameters to a subdomain in PHP
我遇到一个情况,不知道怎么解决。我有一个名为 domain.com 的域和一个名为 sub.domain.com
的子域
现在,我在 PHP 中有一些处理要在 domain.com 上进行,我想传递一些变量并接收来自 sub.domain.com 的响应。这可以通过在 JSON 中编码的数组来实现。所以,
- domain.com/process.php 创建一个 PHP 参数数组(编码为 JSON)。
- domain.com/process.php 调用 sub.domain.com/index.php?key=validationKey¶ms=.... 执行计算
- sub.domain.com/index.php?key=validation_key¶ms=... . 进行计算,然后 returns 在 JSON 中编码到 域的数组。com/process.php
- domain.com/process.php 对这些数据做了一些事情。
我怎样才能做到这一点?
提前感谢任何解决方案
这里明显的解决方案是直接执行 PHP 代码,但假设由于某种原因这是不可能的(sub.domain.com 可能在不同的服务器上),那么您可以将数据发回来回使用 cURL
鉴于查询字符串中的大量数据有时会出现问题,此代码使用 POST。
在 domain.com 中,您的代码将如下所示:
<?php
$key = "validKey";
$data = json_encode(['data'=>[1,2,3], 'moreData'=>[4,5,6]]);
$payload = ['key'=>$key, 'params'=>$data];
echo "Setting up cURL<br>";
// I've used sub.domain.com here, but the URL could be anything
$ch = curl_init('http://sub.domain.com/processor.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
echo "Executing cURL<br>";
$result = curl_exec($ch);
$responseCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE );
if ($responseCode != "200") {
exit("Error: Response $responseCode");
}
echo "Received response<br>";
$response = json_decode($result);
var_dump($response);
sub.domain.com 中的代码(我在上面称它为 'processor.php')将是:
<?php
// Simple key validation function
function isValidKey(string $key):bool {
// Do whatever validation you need here
return ($key === "validKey");
}
// Simple entry validation. Return a 404 to discourage anyone just poking about
if (($_SERVER['REQUEST_METHOD'] !== 'POST') ||
(empty($_POST['key']))
) {
http_response_code(404);
exit;
}
// Invalid key? return 401 Unauthorised
if (!isValidKey($_POST['key'])) {
http_response_code(401);
exit;
}
// No params, or not JSON, return 400 Bad Request
if (empty($_POST['params']) || (is_null($data=json_decode($_POST['params'])))) {
http_response_code(400);
exit;
}
// process data here. Return results
header("Content-type: application/json");
$result = ['status'=>'OK','answer'=>'Answer', "data"=>$data ];
echo json_encode($result);
如果一切正常,运行 来自浏览器的 domain.com 代码应该给出以下结果:
Setting up cURL
Executing cURL
Received response
/home/domain.com/html/process.php:28:
object(stdClass)[1]
public 'status' => string 'OK' (length=2)
public 'answer' => string 'Answer' (length=6)
public 'data' =>
object(stdClass)[2]
public 'data' =>
array (size=3)
0 => int 1
1 => int 2
2 => int 3
public 'moreData' =>
array (size=3)
0 => int 4
1 => int 5
2 => int 6
免责声明:这只是概念验证代码。它不是生产就绪的,并且只进行了基本测试。
我遇到一个情况,不知道怎么解决。我有一个名为 domain.com 的域和一个名为 sub.domain.com
的子域现在,我在 PHP 中有一些处理要在 domain.com 上进行,我想传递一些变量并接收来自 sub.domain.com 的响应。这可以通过在 JSON 中编码的数组来实现。所以,
- domain.com/process.php 创建一个 PHP 参数数组(编码为 JSON)。
- domain.com/process.php 调用 sub.domain.com/index.php?key=validationKey¶ms=.... 执行计算
- sub.domain.com/index.php?key=validation_key¶ms=... . 进行计算,然后 returns 在 JSON 中编码到 域的数组。com/process.php
- domain.com/process.php 对这些数据做了一些事情。
我怎样才能做到这一点?
提前感谢任何解决方案
这里明显的解决方案是直接执行 PHP 代码,但假设由于某种原因这是不可能的(sub.domain.com 可能在不同的服务器上),那么您可以将数据发回来回使用 cURL
鉴于查询字符串中的大量数据有时会出现问题,此代码使用 POST。
在 domain.com 中,您的代码将如下所示:
<?php
$key = "validKey";
$data = json_encode(['data'=>[1,2,3], 'moreData'=>[4,5,6]]);
$payload = ['key'=>$key, 'params'=>$data];
echo "Setting up cURL<br>";
// I've used sub.domain.com here, but the URL could be anything
$ch = curl_init('http://sub.domain.com/processor.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
echo "Executing cURL<br>";
$result = curl_exec($ch);
$responseCode = curl_getinfo($ch, CURLINFO_RESPONSE_CODE );
if ($responseCode != "200") {
exit("Error: Response $responseCode");
}
echo "Received response<br>";
$response = json_decode($result);
var_dump($response);
sub.domain.com 中的代码(我在上面称它为 'processor.php')将是:
<?php
// Simple key validation function
function isValidKey(string $key):bool {
// Do whatever validation you need here
return ($key === "validKey");
}
// Simple entry validation. Return a 404 to discourage anyone just poking about
if (($_SERVER['REQUEST_METHOD'] !== 'POST') ||
(empty($_POST['key']))
) {
http_response_code(404);
exit;
}
// Invalid key? return 401 Unauthorised
if (!isValidKey($_POST['key'])) {
http_response_code(401);
exit;
}
// No params, or not JSON, return 400 Bad Request
if (empty($_POST['params']) || (is_null($data=json_decode($_POST['params'])))) {
http_response_code(400);
exit;
}
// process data here. Return results
header("Content-type: application/json");
$result = ['status'=>'OK','answer'=>'Answer', "data"=>$data ];
echo json_encode($result);
如果一切正常,运行 来自浏览器的 domain.com 代码应该给出以下结果:
Setting up cURL
Executing cURL
Received response
/home/domain.com/html/process.php:28:
object(stdClass)[1]
public 'status' => string 'OK' (length=2)
public 'answer' => string 'Answer' (length=6)
public 'data' =>
object(stdClass)[2]
public 'data' =>
array (size=3)
0 => int 1
1 => int 2
2 => int 3
public 'moreData' =>
array (size=3)
0 => int 4
1 => int 5
2 => int 6
免责声明:这只是概念验证代码。它不是生产就绪的,并且只进行了基本测试。