-
-
Save JeffreyWay/1525217 to your computer and use it in GitHub Desktop.
alias server='open http://localhost:8000 && python -m SimpleHTTPServer' |
@iammerrick @padolsey @paulirish Python's SimpleHTTPServer
module exists for a long time now (afair 2.0), so there should be no problem with most *nix based systems that are post-2000 :-)
edit:// haha @EmilStenstrom you were faster!
In Python 3, SimpleHTTPServer
has been merged into http.server
. So:
python -m http.server
it has to be there.
Furthermore many people do not know that the same works with a simple SMTP server (read: email):
python -m smtpd -n -c DebuggingServer localhost:port
DebuggingServer
outputs all mail to the console. It's nice if you need to test some forms or mail code 👍
You can also add a default bind port like so:
##
# Quickly starts a webserver from the current directory.
#
# Thanks to:
# http://superuser.com/questions/52483/terminal-tips-and-tricks-for-mac-os-x
#
# @param [optional, Integer] bind port number, default 8000
web_serve() {
$(which python) -m SimpleHTTPServer ${1:-8000}
}
(source: https://github.com/fnichol/bashrc/blob/master/bashrc#L874-883)
If you like a bit of Ruby action, especially if you're doing Sass and Compass, this might be of interest: http://get-serve.com/
And as you add features, etc, you get mongoose. Okay, so it is another sub-100k binary, and it's not using either Python or Ruby, but it reads htpasswd
files and run CGI. What else do you need? :)
I do a lot of Twisted stuff, so my version looks like this:
alias server="twistd -n web --path ."
no python needed, here's the good ole emergency web server.
while true; do nc -l 127.0.0.1 8889 < foo.html; done
or
nc -l 127.0.0.1 8889 < foo.html
Inspired by @padolsey’s snippet, I’ve replaced the server
alias in my dotfiles repository with the following function:
# Start an HTTP server from a directory, optionally specifying the port
function server() {
local port="${1:-8000}"
open "http://localhost:${port}/" && python -m SimpleHTTPServer "$port"
}
For a node.js version, made this a while ago: https://github.com/balupton/simple-server
My version: defaults the port, but allows you to override it. And opens the browser with your real hostname, instead of localhost, for pasting to other people.
function server() { # via https://gist.github.com/1525217
local host=`hostname`
local port="${1:-8888}"
(sleep 1 && open "http://${host}:${port}/")&
python -m SimpleHTTPServer "$port"
}
Thanks guys, from ubuntu I now do this:
function server() {
local port="${1:-8000}"
gnome-open "http://localhost:${port}/"
python -m SimpleHTTPServer "$port"
}
Overcomplicated?
function server() {
local port="${1:-8080}"
local phpfiles=$(find . -type f -iname "*.php" | awk 'END {print NR;}')
local phpversion=$(php -v | grep "PHP 5" | sed 's/.*PHP \([^-]*\).*/\1/' | cut -d\ -f 1)
local phpvmajor=$(echo ${phpversion} | cut -d. -f 1)
local phpvminor=$(echo ${phpversion} | cut -d. -f 2)
open "http://localhost:${port}/"
if [ ${phpvmajor} -ge 5 -a ${phpvminor} -ge 4 -a ${phpfiles} -gt 0 ]; then
php -S localhost:${port}
else
python -m SimpleHTTPServer "${port}"
fi
}
This supports simple native servers for Ruby, Sinatra, PHP & fallback to Python SimpleHTTPServer
as default
server() {
local port="${2:-8000}"
open "http://localhost:${port}/"
if [[ "$1" == "ruby" ]]; then
ruby -run -ehttpd . -p$port
elif [[ "$1" == "sinatra" ]]; then
ruby -rsinatra -e'set :public_folder, "."; set :port, $port'
elif [[ "$1" == "php" ]]; then
php -S localhost:$port
else
# Set the default Content-Type to `text/plain` instead of `application/octet-stream`
# And serve everything as UTF-8 (although not technically correct, this doesn’t break anything for binary files)
python -c $'import SimpleHTTPServer;\nmap = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map;\nmap[""] = "text/plain";\nfor key, value in map.items():\n\tmap[key] = value + ";charset=UTF-8";\nSimpleHTTPServer.test();' "$port"
fi
}
My universal version, works with npm, python, php and can run under windows, linux and mac
# Instant Server for Current Directory
# https://gist.github.com/JeffreyWay/1525217
function server()
{
local port=${1:-8000}
iscmd python && {
(sleep 1 && o "http://localhost:${port}/")&
python -m SimpleHTTPServer ${port}
}
iscmd npm && (npm -g ls --depth=0 | grep server@) >/dev/null && {
# Use npm server
(sleep 1 && o "http://localhost:${port}/")&
server ${port}
}
iscmd php && {
(sleep 1 && o "http://localhost:${port}/")&
php -S localhost:${port}
}
}
Also in my dotfiles. the iscmd is defined in my dotfiles too.
What about running a PHP built-in development server in a Docker container?
server() {
local port="${1:-8000}"
local path="${2:-.}"
(sleep 1 && open "http://localhost:${port}")&
docker run --rm --interactive --tty --name="php-built-in-development-web-server-$port" --publish $port:$port --network="local-network" --volume "$PWD":/usr/src/myapp --workdir /usr/src/myapp --user $(id -u):$(id -g) php:7.2-alpine php -S 0.0.0.0:$port -t $path
}
Portable 😄 You don't really have to worry about Windows, Mac, Linux if it is running in Docker. 🐳
SimpleHTTPServer has shipped with Python since forever, so it's cross platform. It takes command line arguments too, so you can specify a port number as the last argument if you like.
http://docs.python.org/library/simplehttpserver.html