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