Передача stdin в скрипт оболочки через php

0

У нас есть приложение php для командной строки, которое поддерживает специальные разрешения и хочет использовать его для ретрансляции передаваемых данных в сценарий оболочки.

Я знаю, что мы можем читать STDIN с:

while(!feof(STDIN)){
    $line = fgets(STDIN);
}

Но как я могу перенаправить этот STDIN в сценарий оболочки?

STDIN слишком велик для загрузки в память, поэтому я не могу сделать что-то вроде:

shell_exec("echo ".STDIN." | script.sh");
Теги:
stdin
pipe
shell-exec

2 ответа

0
Лучший ответ

Использование xenon-ответа с popen, похоже, делает трюк.

// Open the process handle
$ph = popen("./script.sh","w");
// This puts it into the file line by line.
while(($line = fgets(STDIN)) !== false){
    // Put in line from STDIN. (Note that you may have to use '$line . '\n''. I don't know
    fputs($ph,$line);
}
pclose($ph);
1

Если размер вашего STDIN большой, вы должны прочитать его в строковой последовательности, поскольку он выглядит так, как вы делаете, а затем сбрасывать эти строки в файл script.sh.

// Opening it 'w+' will create it if it is not present.
$scriptHandle = fopen("script.sh","w+");
// This puts it into the file line by line.
while(($line = fgets(STDIN)) !== false){
    // Put in line from STDIN. (Note that you may have to use '$line . '\n''. I don't know
    fputs($scriptHandle,$line);
}
  • 0
    Ну, это должно быть выполнено не написано, но ваш код дал мне идею. Использование popen вместо fopen, похоже, помогает. Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню