编写PHP脚本交互命令

编写PHP脚本交互命令

例如:
Laravel安装命令
	composer global require "laravel/installer"
	laravel new blog
控制台
	php artisan serve


以下概括基于Laravel框架,其同时支持win和类Unix系统


win环境下
	laravel命令调用的是 laravel.bat批处理文件
	且 laravel.bat 所在的目录必须添加到 $PATH 环境变量

	laravel.bat 文件内容:
		@ECHO OFF
		setlocal DISABLEDELAYEDEXPANSION
		SET BIN_TARGET=%~dp0/../laravel/installer/laravel
		php "%BIN_TARGET%" %*

	注释:
		dp0 可以理解为 laravel.bat 所在的当前目录
		最终是 php 去执行一个文件,显然该文件是php格式的,没有后缀


Linux系统下
	laravel命令调用的是 laravel文件,无后缀名,其实是shell脚本文件

	laravel 文件内容:

		#!/usr/bin/env sh

		dir=$(d=${0%[/\\]*}; cd "$d" > /dev/null; cd "../laravel/installer" && pwd)

		# See if we are running in Cygwin by checking for cygpath program
		if command -v 'cygpath' >/dev/null 2>&1; then
			# Cygwin paths start with /cygdrive/ which will break windows PHP,
			# so we need to translate the dir path to windows format. However
			# we could be using cygwin PHP which does not require this, so we
			# test if the path to PHP starts with /cygdrive/ rather than /usr/bin
			if [[ $(which php) == /cygdrive/* ]]; then
				dir=$(cygpath -m "$dir");
			fi
		fi

		dir=$(echo $dir | sed 's/ /\ /g')
		"${dir}/laravel" "$@"

	注释:
		laravel 文件必须有可执行权限

		laravel 所在的目录必须添加到 $PATH 环境变量,这样才可以全局使用,否则只能进入该目录然后
			执行脚本 ./laravel 
		或者,将 laravel 文件移动到/usr/bin目录下,这样同样可以通过输入 laravel 命令来执行laravel文件

		脚本文件有无后缀名并不重要,只需要文件内容可以被脚本解释器解释就行,比如,两个内容相同的
			脚本文件被执行 php test 和 php test.php 结果一样。
		
		可以通过 which php 来找到php解释器的路径



实际执行的 laravel 文件内容:
	#!/usr/bin/env php
	<?php

	if (file_exists(__DIR__.'/../../autoload.php')) {
	    require __DIR__.'/../../autoload.php';
	} else {
	    require __DIR__.'/vendor/autoload.php';
	}

	$app = new Symfony\Component\Console\Application('Laravel Installer', '2.0.1');
	$app->add(new Laravel\Installer\Console\NewCommand);

	$app->run();

	?>


在php中
	$_SERVER['argv']   交互时传入的参数数组,参数是由空格隔开的。
	$_SERVER['argc']   交互时传入的参数的个数。


关于 #!/usr/bin/env php
	在脚本文件头部加入 #!/usr/bin/env php 表示使用的环境变量设定的解释器来执行该脚本。
	使用 php test.php 或者 /usr/local/php test.php 这种方式来运行的话头部是否有定义毫
	无影响,因为我就是要PATH环境变量或者/usr/local/php来运行。

	但是如果使用 ./test.php 方式来运行的话,头部必须定义一个解释器,否则无法被解释执行。

	同时不同的写法使用的解释器也不一样,如下

	#!/usr/bin/php
	#!/usr/bin/env php
	#!/usr/bin/env -S -P/usr/local/bin:/usr/bin php
	#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} php


制作一个php脚本命令
	vi test_php
	输入内容:
		#!/usr/bin/env php
		<?php
			var_dump($_SERVER['argv']);

			echo PHP_EOL;
		?>
	chmod 777 test_php

	试运行:
	./test_php asd 123

	没问题的话移到系统环境目录

	mv test_php /usr/bin/test_php

	运行:
	test_php asd 123

	打印:
	array(3) {
	  [0]=>
	  string(17) "/usr/bin/test_php"
	  [1]=>
	  string(3) "asd"
	  [2]=>
	  string(3) "123"
	}

	更详细交互实现可参考Laravel的实现过程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值