[PHP-cli]thinkphp6.0命令行中的交互

2022-04-28 13:18 6558 次阅读 PHP成长
thinkphp6.0的命令行模式官方文档写得已经很详细了,这里不过多介绍了。
而命令行执行任务需要暂停任务,等待人为交互来处理也很简单。
#### STDIN
一个已打开的指向stdin的流,可以用下方法来调用
```php
$stdin = fopen(‘php://stdin’,’r’);
```
如果想从stdin读取一行内容,可以使用
```php
$line = trim(fgets(STDIN));//从STDIN读取一行
Fscanf(STDIN,’%d\n’,$number);//从STDIN读取数字
```

#### STDOUT
一个已打开的指向 stdout的流。可以用如下方式来调用
```php
$stdout = fopen(‘php://stdout’,’w’);
```
#### STDERR
一个已打开的指向 stdout的流。可以用如下方式来调用
```php
$stderr = fopen(‘php://stderr’,’w’);
```
### 场景:遍历并移动一个目录下的文件,选择是否移动到上一个文件的文件夹
```php
fwrite(STDOUT, '--------是否移动到上一个文件所在文件夹 Y or N? ');
$input = fgets(STDIN);
$continue = true;
while ($continue){
if ($input == 'y'.PHP_EOL){
echo '----移动到[文件夹]'.PHP_EOL;
break;
}else{
if (is_dir($out_path.DIRECTORY_SEPARATOR.$value_dir)){
echo '----[文件夹]文件夹已存在'.PHP_EOL;
}else{
mkdir($out_path.DIRECTORY_SEPARATOR.$value_dir,0755,true);
echo '----创建文件夹[文件夹]'.PHP_EOL;
}
echo '----移动到文件夹'.PHP_EOL;
break;
}
$input = fgets(STDIN); // 从控制台读取输入
}
```
这里主要就用到两个常量`STDIN`和`STDIN`,大概效果就如下图
![](https://skapi-1253927675.cos.ap-guangzhou.myqcloud.com/blog/202204/3d96d20c2f2592e7070587c6ef4f3611.png)