致我的PHPeoples,
这有点怪异的PHPuzzle,但我想知道它是否是可能的。
最终目标是
的等效功能mysql mydb < file.sql
但是使用像这样的API
./restore < file.sql
其中restore
是这样的PHP脚本
#!/usr/bin/env php
$cmd = "msyql mydb";
passthru($cmd, $status);
但是,我想将STDIN传递给passthru
命令。
这里明显的好处是我可以将restore
放在管道中的某个地方,一切都很好。这是一个例子
# would be pretty awesome!
ssh $remote "msyqldump $config mydb | gzip" | gzip -dc | ./restore
无论如何,我怀疑是否可以使用passthru
,但可能会以某种方式使用proc_open
?
作为最后一个案例,如果一个无法解决的PHP版本,我会做这样的事情
./restore file.sql
使用这样的脚本
#!/usr/bin/env php
$cmd = sprintf("mysql mydb < %s", $argv[1]);
passthru($cmd, $status);
答案 0 :(得分:1)
PHPwnd
<强> ./恢复强>
#!/usr/bin/env php
<?php
// set descriptors
$desc = array(
0 => array("file", "php://stdin", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
// open child proc
$proc = proc_open("mysql -uUSER -pPASS mydb", $desc, $pipes);
if (is_resource($proc)) {
// display child proc stdout
echo stream_get_contents($pipes[1]);
// close file streams
array_map('fclose', $pipes);
// get return value
$ret = proc_close($proc);
// display return value
printf("command returned %s\n", $ret);
}
使用示例
cat file.sql.gz | gzip -dc | ./restore
答案 1 :(得分:1)
什么! PHProfound!
结果passthru
已经这样做了! PHenomenalP!
检查出来,PHPals:
<强> gzip.php 强>
#!/usr/bin/env php
<?php
passthru("gzip", $status);
if ($status !== 0) {
error_log("gzip exited with status %d", $status);
}
PHProgressivist如何!
echo "hello" | php gzip.php | gzip -dc
输出
hello