Наконец-то я понял, в чём было дело!
1. Функция var_export, если ей передать параметр-ресурс, всегда возвращает NULL, т.к. не может представить содержимое ресурса на PHP-языке. А вот функция print_r в этом случае возвращает строку "Resource id #N", где N - некоторый номер.
2. Мой 1-й скрипт получал NULL из-за несоответствия данных: 2-й скрипт отправлял ему данные в формате "application/x-www-form-urlencoded", а он обрабатывал их как json-данные.
Так что вот правильный вариант.
1-й скрипт:
<?php
/*
01.php
*/
require_once 'GSDebug2.php';
$sF_Script = basename(__FILE__);
$oShowVars = new CShowVars($sF_Script);
echo "Скрипт \"$sF_Script\": Начало работы.<br>";
$sInput = file_get_contents('php://input');
$oShowVars->Do(
'$sInput', $sInput
);
echo "Скрипт \"$sF_Script\": Конец работы.<br>";
exit;
?>
2-й скрипт:
<?php
/*
02.php
*/
require_once 'GSDebug2.php';
$oShowVars = new CShowVars(basename(__FILE__));
echo '<pre>';
echo 'Отправка запроса на сервер...<br>';
$rContext = stream_context_create(
[
'http' => [
'method' => 'POST',
'header' => 'content-type: application/json',
'content' => json_encode(
[
'type' => 'confirmation',
'group_id' => 1
]
)
]
]
);
$sResult = file_get_contents('http://.../01.php', false, $rContext);
echo 'Ответ сервера:<br>', $sResult, '<br>';
$oShowVars->Do(
'$rContext', $rContext
);
echo '</pre>';
exit;
?>
И вспомогательный скрипт для отладки:
<?php
/*
GSDebug2.php
*/
// Класс CShowVars
// ====================================================================================================
class CShowVars
/*
Выводит значения переменных (выражений) в окно браузера.
*/
{
public string $sTitle;
private $asLine = [];
public function __construct(string $_sTitle = '')
/*
ПАРАМЕТРЫ
$_sTitle
Заголовок блока, выводимого в браузере.
Заголовок не является обязательным. Наличие заголовка позволяет понять, из какого скрипта осуществляется вывод.
*/
{
if ($_sTitle) $_sTitle = ' ' . $_sTitle . ' ';
$this->sTitle = $_sTitle;
}
public function Do()
/*
Выводит имена и значения указанных переменных и/или выражений в окно браузера.
ПАРАМЕТРЫ
Функция рассчитана на чётное количество параметров.
Каждый нечётный параметр должен представлять собой имя переменной (выражения),
каждый чётный - значение этой переменной (выражения).
Если имя переменной будет пустой строкой, функция выведет в окно пустую строку как разделитель.
ПРИМЕР
$oShowVars->Do(
'$_sMailsTo', $_sMailsTo,
'$_sHiddenMailsTo', $_sHiddenMailsTo
);
В окне браузера будет выведено:
///////////////////////////////////////////////////////////////////////////////////////////////////////
|| $_sMailsTo = 'gsv4@inbox.ru'
|| $_sHiddenMailsTo = 'admin@cc-s.ru'
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
*/
{
$iSepLen = 100;
$iSepPadLen = $iSepLen - mb_strlen($this->sTitle);
$iSepPadLenL = $iSepPadLen >> 1;
$iSepPadLenR = $iSepPadLen - $iSepPadLenL;
$sSepA = str_repeat('/', $iSepPadLenL) . $this->sTitle . str_repeat('/', $iSepPadLenR);
$sPrefix = '|| ';
$sSepB = str_repeat('\\', $iSepLen);
$iTotalParams = func_num_args();
if ($iTotalParams < 2 || $iTotalParams & 1)
throw new Exception('CShowVars::Do: Функция рассчитана на чётное количество параметров!');
$asLine = $this->asLine;
$asLine = [$sSepA];
$i = 0;
foreach (func_get_args() as $xArg) {
if (++$i & 1)
$sVarName = $xArg;
else if ($sVarName === '')
$asLine[] = $sPrefix;
else {
$sVarType = gettype($xArg);
switch ($sVarType) {
case 'integer':
$asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . number_format($xArg, 0, ',', ' ');
break;
case 'array':
case 'object':
$asVarValue = explode("\n", var_export($xArg, true));
$asLine[] = $sPrefix . $sVarName . ' = ' . array_shift($asVarValue);
foreach ($asVarValue as $sVarValue) $asLine[] = $sPrefix . $sVarValue;
break;
case 'resource':
case 'resource (closed)':
$asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . print_r($xArg, true);
break;
default:
$asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . var_export($xArg, true);
}
}
}
$asLine[] = $sSepB;
echo implode(PHP_EOL, $asLine), PHP_EOL;
$asLine = [];
return true;
} // function Do()
} // class CShowVars
?>
Результат работы 2-го скрипта:
Отправка запроса на сервер...
Ответ сервера:
Скрипт "01.php": Начало работы.
////////////////////////////////////////////// 01.php //////////////////////////////////////////////
|| $sInput = [string] '{"type":"confirmation","group_id":1}'
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Скрипт "01.php": Конец работы.
////////////////////////////////////////////// 02.php //////////////////////////////////////////////
|| $rContext = [resource] Resource id #3
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\