Skip to content
A read-eval-print-loop for php
Emacs Lisp Python PHP
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Mailing list at:

PHP Dependencies


  • PHP 5+


Python Dependencies

  • sqlite
    • Python < 2.6: sudo easy_install pysqlite
    • Python >= 2.6: sudo easy_install sqlite3
  • readline
    • sudo easy_install readline

Installing Globally

Note that this install currently clobbers any previous /etc/phpsh/rc.php

  • python build
  • sudo python install
  • phpsh

Installing Locally

Note that this install currently clobbers any previous ~/.phpsh/rc.php

  • python install --prefix=~
  • export PYTHONPATH=~/lib/python2.6/site-packages (Adjust this if your python minor version differs from 2.6)
  • ~/bin/phpsh

You will probably want to put the PYTHONPATH line in your .bashrc or such, and just add ~/bin to your PATH as well.

There are more details on installing from a at

After Install

Vanilla PHP

  • Just run phpsh and have fun.

Connecting to an Actual Codebase

  • cd ~/www
  • ctags -R # for phpsh ctags integration, recommended
  • phpsh lib/init.php # or some file(s) that load codebase libraries


  • Modify /etc/phpsh/rc.php. Then:
    • cd ~/www
    • phpsh
  • And for times when you just want vanilla php:
    • phpsh -c none

Individual Configuration

  • For individual configuration, also see rc.example.php in the php distribution.

Hacking on phpsh

  • For faster iteration, after installing once, you can run phpsh from src/ directly without reinstalling.
    • cd ~/www
    • ~/projects/phpsh/src/phpsh

Todo (after phpsh 1.2)

  • Simple phpsh breakpoints that you can insert into your php code.

    • jlindamood has suggested adding a very basic debugging facility in which phpsh.php would define some function called like phpsh_breakpoint() which you would be able to put in your code that would cause the php> to re-happen at that breakpoint so that you can investigate whatever state until you issue like a phpsh_resume() (or whatever it would be called).

    • My suspicion is that that can be done pretty easily be having a new message type from phpsh.php to (Currently there is only the 'ready' message when phpsh.php is ready to receive a new line of codes from

  • Magic fatal undoing?

    • brent suggested adding some kind of katamari-esque memory snapshotting, so that on fatals like calling a nonexistent function (which are not catchable in php-land, sadly) can be magically recovered from. I think dweatherford or larry would be good to ask about this kind of black magic.
  • Convert from /tmp file to named pipe for 'ready' message passing

  • Maybe phpsh_check_syntax shouldn't actually be installed as a script, and just be a pkg_resource? Didn't want to worry about zip file overhead, and installing didn't seem like a big deal.
  • Similarly, php_manual.db should probably go in share/ not etc/ but similarly was worried about b.s. with setuptools..
  • Paging for long php> d .. results? Or is terminal scroll fine..
  • Thread loading ctags and starting php? Would speed start but not restart.
  • Command-line apc for faster php startup for large codebases.
  • Note on php start error to start from codebase place?
  • Make tab to show function signature work with multiline func sigs.
Something went wrong with that request. Please try again.