При запуске PHP-функции exec () на сервере Windows будет ли он передавать управляющие символы ASCII в оболочку? - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу использовать функцию PHP exec() для запуска исполняемого файла на сервере Windows.Командная строка будет использовать управляющие символы ASCII в качестве разделителей для данных, передаваемых в исполняемый файл.Код, который у меня сейчас есть:

for( $i = 0; $i < $size; $i++ ){
    $input .= $arg[$i];
    $input .= "\037"; /* Unit Separator */
}

Это создает вход для программы на C из элементов массива, заданных в качестве параметра для функции инкапсуляции.Я пишу слой абстракции, который позволит PHP-сценарию разгрузить часть своей более тяжелой обработки в C-программу для повышения эффективности и сделать это прозрачно с помощью простого вызова функции.Для этого я передам любые структуры данных, используемые в качестве входных данных для алгоритма в сериализованной форме, в стандартный поток ввода программы C, возможно, с использованием простой программы эха.Параметром этой эхо-программы будет весь сериализованный вывод.Чтобы сделать это, мне нужно быть уверенным, что оболочка не будет обрезать какие-либо управляющие символы (я уже пробовал разделять входные элементы символами новой строки, и это приводило к преждевременному завершению командной строки).Я не очень хорошо знаком с тем, как работает Windows, так как я больше привык к тому, чтобы что-то делать на платформе Unix.

1 Ответ

0 голосов
/ 16 февраля 2019

Безопасный способ передать произвольные данные в программу переменного тока - это использовать proc_open() и записать данные в дескриптор файла stdin недавно созданного процесса.Тогда оболочка вообще не связывается с данными.Кроме того, могут передаваться произвольные двоичные данные, даже со встроенными нулевыми байтами.

Результат процесса затем может быть прочитан из дескриптора файла, связанного с потоком файлов stdout процесса.Для получения дополнительной информации и примеров см. Справочную страницу PHP для proc_open() здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...