PHP怎么使用命令行生成文件?

在使用Thinkphp这些框架的时候有那些用PHP的命令行来直接生成控制器,应用等等,就比较好奇,想要研究一下。在网上翻找了半天发现这方面的东西很少,找到的都是简单讲了一下,也没说具体怎么实现的,很想知道。

用原生的PHP,比如我想要生成一个a.php文件,那么应该怎么做才能实现

问题已经解决了:定义好模板文件,然后在获取命令行参数,进行替换。

感谢各位的帮助。

本作品采用《CC 协议》,转载必须注明作者和本文链接
创梦流浪人
讨论数量: 16

可以使 ThinkPHP(6.x) 命令行 其他版本应该都是一样的。

php think make:controller app\admin\controller\Login
// 或
php think make:controller Login
11个月前 评论
创梦流浪人 (楼主) 11个月前
deMemory (作者) 11个月前
创梦流浪人 (楼主) 11个月前
deMemory (作者) 11个月前
创梦流浪人 (楼主) 11个月前
deMemory (作者) 11个月前

其实核心就是定义好模板文件,比如模板:

<?php

declare (strict_types = 1);

namespace {%namespace%};

class {%className%}
{
}

然后在获取命令行参数,进行替换,最后file_put_contents输入到真实文件里面去

11个月前 评论

直接写呗,$_SERVER['argv'] 就可以获取到从命令行传进来的参数,getopt 可以解析参数,剩下的就跟正常写代码一样,无非就是拼接,然后 file_put_contents

不过,为了方便,建议使用 symfony/console 作为基础包。

11个月前 评论
创梦流浪人 (楼主) 11个月前
Rache1 (作者) 11个月前
创梦流浪人 (楼主) 11个月前

给你写了一个原生的小demo:
新建模板文件controller.plain

<?php

class {%className%}
{
    //
}

新建build.php文件:

<?php

// 去除第一个参数(脚本名称)
$argv = $_SERVER['argv'];
array_shift($argv);
$className = $argv[0];

// 读取模板
$plain = file_get_contents('./controller.plain');
// 替换模板变量
$classFile = str_replace(['{%className%}'], [$className], $plain);
// 写入生成的文件
file_put_contents($className . '.php', $classFile);
echo 'created successfully.';

执行php build.php DemoController,那么就会在当前目录生成DemoController.php文件

11个月前 评论
创梦流浪人 (楼主) 11个月前
Junwind

很简单,看下文件操作,最简单是就是file_put_contents(), 脚本可以直接接受参数 $argv,$argc 等。PHP 基本知识

11个月前 评论

全局搜下.stub,有你想要的

11个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!