微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 作曲家脚本中的用户输入

在composer包中,我有post-install-cmd脚本,如下所示:

#!/bin/bash
echo 'Hello!'
read -p 'Database password: ' DB_PASS
PHP setup/index.PHP database_password=$DB_PASS
echo 'Complete!'

但是在composer安装后我遇到了这个错误

...
Generating autoload files
> post-install-cmd: _scripts/ask_db_data.sh
Executing command (CWD): _scripts/ask_db_data.sh
Hello!
Script _scripts/ask_db_data.sh handling the post-install-cmd event returned with an error


[RuntimeException]                                                   
Error Output: Hello!  

Exception trace:
() at phar:///usr/local/bin/composer/src/Composer/Eventdispatcher/Eventdispatcher.PHP:196
 Composer\Eventdispatcher\Eventdispatcher->dodispatch() at phar:///usr/local/bin/composer/src/Composer/Eventdispatcher/Eventdispatcher.PHP:94
 Composer\Eventdispatcher\Eventdispatcher->dispatchScript() at phar:///usr/local/bin/composer/src/Composer/Installer.PHP:350
 Composer\Installer->run() at phar:///usr/local/bin/composer/src/Composer/Command/InstallCommand.PHP:134
 Composer\Command\InstallCommand->execute() at phar:///usr/local/bin/composer/vendor/symfony/console/Command/Command.PHP:256
 Symfony\Component\Console\Command\Command->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:838
 Symfony\Component\Console\Application->doruncommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:189
 Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.PHP:167
 Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.PHP:120
 Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.PHP:98
 Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:43
 require() at /usr/local/bin/composer:25

我如何在作曲家脚本中询问用户输入?

解决方法:

好的,您正在尝试执行bash / shell脚本来读取字符串并将其传递给您的PHP文件.我不确定,为什么这样做不成功.

另一种方法是留在post-install-cmd的PHP代码中.
这是一个事件,它可以访问Composer和IO.
要使用Console,您需要Composer中的$io对象.
您可以使用getIO()获取它.

然后,您可以使用方法ask()或askConfirmation()以交互方式询问用户“缺失”值.

非常简短:

$io = $this->getIO();
$pw = $io->ask('Enter your Password: ');

exec('PHP setup/index.PHP database_password=' . escapeshellarg($pw));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐