通过php将stdin导入shell脚本

时间:2015-01-04 20:08:04

标签: php pipe stdin shell-exec

我们有一个命令行php应用程序,它维护特殊权限,并希望用它将管道数据传递到shell脚本。

我知道我们可以用以下内容读取STDIN:

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

但是如何将STDIN重定向到shell脚本?

STDIN太大而无法加载到内存中,因此我无法执行以下操作:

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

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);