У нас есть приложение командной строки php, которое поддерживает специальные разрешения и хочет использовать его для передачи данных по конвейеру в сценарий оболочки.
Я знаю, что мы можем читать STDIN с:
while(!feof(STDIN)){
$line = fgets(STDIN);
}
Но как я могу перенаправить этот STDIN в сценарий оболочки?
STDIN слишком велик для загрузки в память, поэтому я не могу сделать что-то вроде:
shell_exec("echo ".STDIN." | script.sh");
Если размер вашего 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);
}
Использование ксенонового ответа с попеном, похоже, помогает.
// 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);