Я перевернул свою проблему до этого минимального примера, который прекрасно показывает, что что-то не так:
var_dump(shell_exec(escapeshellarg('C:\Program Files (x86)\GnuPG\bin\gpg.exe') . ' --version'));
var_dump(shell_exec(escapeshellarg('C:\Program Files (x86)\GnuPG\bin\gpg.exe') . ' --import ' . escapeshellarg('input.txt')));
Ожидаемый результат - две строки var_dump (). Вместо этого только первая команда приводит к строке вывода, тогда как последняя превращается в NULL! Whaaaaaat?!
Как это вообще технически возможно? Обратите внимание, что не имеет значения, существует ли input.txt и является ли он допустимым файлом открытого ключа. В любом случае выходные данные из команды --import равны NULL, хотя --version выводит строку, как и ожидалось, как любая другая терминальная программа в истории компьютеров, и даже при том, что фактически выводит данные на терминал.
Что происходит, что заставляет GPG игнорировать всю логику и установленные правила, выводя данные, которые все еще каким-то образом не обнаруживаются в shell_exec ?! Подобные вещи действительно лишают меня дара речи, но теперь я, наконец, сел и задал этот вопрос, потому что это сводит меня с ума.
(В отчаянии я перепробовал все, что связано с --output ииспользуя "-" и "stdout" и все виды значений, но это никак не влияет.)