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

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

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

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

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

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

shell_exec("echo ".STDIN." | script.sh");

0

Решение

Если размер вашего 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);
}
1

Другие решения

Использование ксенонового ответа с попеном, похоже, помогает.

// 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);
0

По вопросам рекламы [email protected]