创建 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”部分与其他部分分开。然后,我们就可以看到一个规律。将要更改颜色的字符串用“\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 -r "chmod('/path/to/hoge', 777)" # 您可以使用 ls 命令立即查看结果!
我本想写成 `chmod 777 /path/to/hoge`,但权限实际上并没有改变。
我阅读了文档并尝试查找答案,但仍然没有找到。
编辑文件 → 保存 → 转到控制台 → 运行 php 文件 → (´・ω・`)
说实话,一遍又一遍地重复这个过程很麻烦,所以如果你能像上面的例子那样轻松地提取一些东西并进行测试,那么从命令行执行它可能更省力。
就是这样。
0