将参数发送到 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 中编码的数组来实现。所以,

  1. domain.com/process.php 创建一个 PHP 参数数组(编码为 JSON)。
  2. domain.com/process.php 调用 sub.domain.com/index.php?key=validationKey¶ms=.... 执行计算
  3. sub.domain.com/index.php?key=validation_key¶ms=... . 进行计算,然后 returns 在 JSON 中编码到 域的数组。com/process.php
  4. 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

免责声明:这只是概念验证代码。它不是生产就绪的,并且只进行了基本测试。