我相信标题有点模糊。但是我的英语不好,所以我缺少一个更好的。
我目前正在编写一个也从源代码执行composer.phar的工具。
因此,当使用composer.phar安装一些内容时,它有时会询问问题并希望获得额外的输入,例如所需的格式或简单的Y / N问题。
当我使用exec()时,似乎无法对这些问题做出反应。
所以我想知道如何用PHP实现这一点。
有什么想法吗?
更新 为了显示一个简单的例子,我这样做:
exec("php /Users/johannesklauss/Development/web/composer.phar create-project symfony/framework-standard-edition /Users/johannesklauss/Development/web/Symfony 2.1.x-dev");
这里的问题是作曲家在,并询问是否应保留版本控制历史记录:
是否要删除现有的VCS(.git,.svn ..)历史记录? [Y,N]?
所以我需要在控制台输入y
或n
。但这对exec来说是不可能的。所以我需要一些交互模式或者什么。
答案 0 :(得分:2)
提醒一句:寻找可以发送到初始命令的标志以“自动回答”。你对composer.phar会问什么问题或它会问他们的命令没有真正的保证。它应被视为“黑客”,我们大脑中的正常反应应该适用于所有它的谨慎和背景等......
无论如何,我认为你需要的是proc_open(),这让你开始一个进程,并且可以访问stdin和stdout。请参阅该文档页面上的示例#1代码,它与您可能需要的内容非常接近。
一旦您有权访问该进程的stdin / stdout资源,您可以随意读取/写入它们。好消息是,这将让你“阅读”提示,并至少仔细检查它是否在询问你的预期(例如,如果你不认识提示,则抛出异常)