创建 PHP 控制台工具时的 4 个有用技巧
你好。
我是Mandai,负责Wild 开发团队。
我们经常感到有必要创建一个小工具来自动执行繁琐的任务。
我认为这是一个常见的说法,你匆忙地创建了一些东西,但正如你们都经历过的那样,这并不需要你特意启动浏览器并运行它,因为它是你应该做的事情用工具来做。
我想自动化启动该浏览器的过程......
在这种情况下,我将其变成控制台工具并定期运行它,但由于 PHP 也可以用作控制台应用程序,因此我收集了一些在这种情况下有用的琐事。
我们只确认了它主要在Linux上的操作,所以不用担心。
获取主目录路径
说到控制台,我们指的是 shell 脚本,因此对于
shell 脚本,您可以使用“~”获取主目录路径。
当我指定类似的路径并尝试加载用户主目录中存在的文件时,我在 PHP 中收到错误。
<?php echo file_get_contents('~/hogehoge.txt'); # 上記のソースを実行すると、以下のエラーが発生 PHP Warning: file_get_contents(~/hogehoge.txt): failed to open stream: No such file or directory in Command line code on line 1
好吧,我想通过获取执行用户并将其附加到 /home 来创建一条路径,但
主目录路径正确存储在超级全局变量 $_SERVER 中。
<?php echo file_get_contents($_SERVER['HOME']. '/hogehoge.txt'); # 上記のソースを実行すると、テキストファイルの中身が表示される hogehoge
当您想要在用户主目录中放置类似 bash 的配置文件时,这非常有用。
$_SERVER 变量即使在控制台上执行,也包含数据,这是一个盲点。
它是一个隐藏参数,甚至没有在
文档 (正文后面的评论里已经明确提到了)
如何接受争论
在命令行世界中,根据参数改变行为是很自然的事情,所以当然您也可以使用 PHPCLI 来做到这一点。
然而,尽管它是一个超级全局变量
- 不以 _ 开头
- 未以大写形式定义
- 是c吗?是v吗? 说清楚!
我不能立即记住这些单词,如果我一段时间没有使用它们,我就会忘记它们。
存储运行时传递的参数的超全局变量$argv 。
另外,如果您想将带有换行符的字符串传递给 $argv,则用“”或“”包装字符串将按预期工作。
例如,准备一个直接直接 var_dumps 以下参数的源。
<?php var_dump($argv);
接下来,尝试使用包含换行符的字符串作为参数来执行源代码。
php test.php hogehoge '输入换行符' # 执行上述命令时,会显示以下内容 array(3) { [0] => string(8) "test.php" [1] => string(8 ) "hogehoge" [2] => string(22) "换行符" }
看起来事情进展顺利。
尝试为错误消息添加颜色(+奖励)
如果您想添加一些乐趣,为什么不为错误消息添加颜色呢?
在 Linux 上,您可以使回显字符串变得丰富多彩并更改背景颜色。
使用相同的技术可以轻松实现这一点。
<?php # hogehogeを赤字で表示するコード echo "\e[31mhogehoge\e[m"; echo "\033[31mhogehoge\033[m";
上面的两段代码都以红色显示hogehoge,但是我乍一看不明白它们的意思,所以
我将其分解一下。
<?php # hogehogeを赤字で表示するコード echo "\e[31m". "hogehoge". "\e[m"; echo "\033[31m". "hogehoge". "\033[m";
我们把它分为“hogehoge”部分和非hogehoge部分。然后,我发现了某种规律。
将要更改颜色的字符串包装在“\e[**m”或“\033[**m”]中似乎是个好主意。
之后,仅附加到第一部分的数字“31”
用于指定字体颜色。
将31分为3和1,3指定字体颜色,1指定颜色红色。
换句话说,当指定不同的字体颜色时,将1更改为2。
我写的是31的3部分指定字体颜色,但是如果变成4,则指定背景颜色。
换句话说
<?php echo "\e[41m". "hogehoge". "\e[m"; echo "\033[41m". "hogehoge". "\033[m";
上面的代码将背景颜色显示为红色。
如果您想使用匹配技术更改字体颜色和背景颜色,请将它们彼此相邻放置,并在它们之间使用分号。
<?php echo "\e[31;41m". "hogehoge". "\e[m"; echo "\033[31;41m". "hogehoge". "\033[m";
上面的代码只显示一个红色矩形,没有任何文本,但它达到了目的。
此外,您还可以使用此设置添加下划线、加粗、反转字体和背景颜色以及使文本闪烁。
<?php echo "\e[31;1m". "hogehoge". "\e[m"; // 赤い太字で表示 echo "\e[31;42;1m". "hogehoge". "\e[m"; // 赤い太字を緑の背景で表示 echo "\e[7m". "hogehoge". "\e[m"; // 文字色と背景色を反転して表示
您也可以单独使用它,因为即使倒置使用也不会导致您的眼睛闪烁。
当您只想快速检查特定代码时使用的命令选项
当你创建控制台工具时,你
可能会遇到一些小问题,比如执行结果如何返回,或者这种写法是否会导致错误。在
这种情况下,有一些 PHP 选项可以快速尝试。 “-r”。
例如,假设您想要更改权限。
您可以使用 chmod 函数快速更改它,但如果您想测试它是否有效,有一个选项可以让您直接在命令中编写 PHP 代码,而无需经历编写测试代码的麻烦。
PHP 的开始标签,“
php -r "chmod('/path/to/hoge', 777)" # 使用 ls 命令立即获取结果!
作为一个图像,我打算写一些类似 chmod 777 /path/to/hoge 的内容,但权限实际上并没有改变。
我正在通过阅读文档并重复试验和错误来找出问题所在来寻找正确的答案。
重写文件→保存→移动到控制台→运行php文件→(´·ω·`)
老实说,一遍又一遍地重复这个过程是很痛苦的,所以如果您可以轻松地提取和测试类似上面示例的内容,我认为从命令行完成它会更容易。
就是这样。