From 9b0369a6cf413758681d289d9d4e2fe81c79c921 Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Thu, 31 Oct 2013 20:28:06 +0100 Subject: [PATCH] PHP HTTP server --- plugins/php/phphttp.fish | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 plugins/php/phphttp.fish diff --git a/plugins/php/phphttp.fish b/plugins/php/phphttp.fish new file mode 100644 index 0000000..21cbed2 --- /dev/null +++ b/plugins/php/phphttp.fish @@ -0,0 +1,87 @@ +# PHP HTTP server. +function phphttp + set -l port 8000 + set -l path + set -l host 127.0.0.1 + + # Ignore argument for slice. + set argv $argv ignore + + # Process options. I think that fish should have some builtin for + # option parsing, but it doesn't. + while count $argv > /dev/null + set -l option $argv[1] + + switch $option + # When two hyphens appear, stop processing, while removing + # hyphens from $argv. + case -- + set argv $argv[2..-1] + break + + # Public mode. + case -p\* --p --pu --pub --publ --publi --public p public + if test $host = 0 + echo phphttp: Duplicate option --public >&2 + end + set host 0 + + # Help. + case -h\* --h --he --hel --help '-\?' h help + echo 'phphttp [--public] ' + return + + # Anything else stops processing. + case \* + break + end + + # Check if the option was one letter. + switch $option + case --\* + # Doesn't count as single option + + case -\?\?\* + set argv[1] -(expr substr $argv[1] 3 length $argv[1]) + continue + end + + set argv $argv[2..-1] + end + + if test (count $argv[1..-1]) -ge 4 + echo 'phphttp: Expected up to two arguments, got '(math (count $argv) - 1)'.' >&2 + return + end + + # argv is bigger by 1 because of "ignore" argument. + if test (count $argv) -ge 2 + # Check legality of first argument + switch $argv[1] + # Fine values + case {0,1,2,3,4,5,6,7,8,9}\* + # Do nothing + + case \* + # The dev team thinks of everything. Or something. + if test -d $argv[1] + if test (count $argv) -eq 2 + echo "phphttp: directory specified without port." >&2 + else + echo "phphttp: swapped directory and port arguments." >&2 + end + return + else + echo "phphttp: $argv[1] is not a port." >&2 + return + end + end + + set port $argv[1] + end + if test (count $argv) -eq 3 + set path -t$argv[2] + end + + php -S$host:$port $path +end