- 
            
      
        
      
    Star
      
          
          (194)
      
  
You must be signed in to star a gist  - 
              
      
        
      
    Fork
      
          
          (25)
      
  
You must be signed in to fork a gist  
- 
      
 - 
        
Save JeffreyWay/1525217 to your computer and use it in GitHub Desktop.  
| alias server='open http://localhost:8000 && python -m SimpleHTTPServer' | 
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. 🐳
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/