-
-
Save JeffreyWay/1525217 to your computer and use it in GitHub Desktop.
alias server='open http://localhost:8000 && python -m SimpleHTTPServer' |
I've gone slightly further with my serve bash script. It accepts both an optional port, file, and opens a browser for you.
servedir may be of interest, too.
With PHP 5.4 you can do:
$ php -Slocalhost:8080
Note: Does not support directory listing.
Not just Mac-based developers. All linux guys have it by default as well. Very handy shortcut to have all around.
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.
@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. 🐳
ian, yeah it's definitely been in snow leopard since the beginning to it's easy to assume all mac-based developers have it.