Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


🔮 PHP School workshop framework. The stuff you use to build your workshop!

Subscribe to updates I use php-workshop

Statistics on php-workshop

Number of watchers on Github 39
Number of open issues 11
Average time to close an issue 28 days
Main language PHP
Average time to merge a PR about 19 hours
Open pull requests 8+
Closed pull requests 5+
Last commit over 1 year ago
Repo Created almost 4 years ago
Repo Last Updated over 1 year ago
Size 774 KB
Homepage http://www.phpsch...
Organization / Authorphp-school
Latest Release2.2.0
Page Updated
Do you use php-workshop? Leave a review!
View open issues (11)
View php-workshop activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating php-workshop for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)

PHP Workshop

The core of PHP School, the workshop application. This is the library which runs and compares users solutions to pre-defined known working solutions bundled with each workshop.

Check the documentation to learn how to create your own workshop.

php-workshop open issues Ask a question     (View All Issues)
  • almost 3 years Page exercise problem so it doesn't run off the screen
  • over 3 years Analyse files included in users submission
  • over 3 years Allow exercises problems and solutions to be translated
  • over 3 years Add translator
  • over 3 years Add menu entry where language can be chosen
  • over 3 years Capture ctrl-c so we can revert patched code
  • over 3 years ResultsRenderer needs tests badly
  • almost 4 years Check code for errors and warning
php-workshop open pull requests (View All Pulls)
  • Check code for errors and warnings.
  • Phpunit deprecations
  • WIP - Api docs
  • Custom runners without files
  • Dispatch event when an exercise is selected
  • Custom runner
  • Realpath listener & Event Refactor
  • Switch to kadet/keylighter for syntax highlighting
php-workshop list of languages used
php-workshop latest release notes
2.2.0 2.2.0



  • Builds for PHP 7.1 & 7.2 (#160)


  • Updated kadet/keylighter to 0.8.3 to fix an error on PHP 7.2 (#159)
  • Updated aydin-hassan/cli-md-renderer to ^2.3 (#162)


  • Fixed a bug where cli arguments added via events were not passed to the result objects (#157)
  • Fixed solution program syntax highlighting (#161)


  • Removed support for symfony 2.x components and dropped builds from travis with different versions of symfony (#160)
2.1.0 2.1.0



  • Updated nikic/php-parser to ^3.0 (#154)
  • Dropped php-school/psx in favour of kadet/keylighter (#154)
  • Updated aydin-hassan/cli-md-renderer to ^2.2 which also uses kadet/keylighter instead of php-school/psx (#154)
2.0.0 2.0.0



  • Added new exercise runner (Custom Runner) which allows for an exercise to not require a php solution. For example an exercise can now request the student install a piece of software and then the exercise will verify that it was installed. (#141)
  • Global function for specifying an event listener as lazy. Eg the listener is registered in the container and should be pulled at runtime (#138)
  • Exercise runners now return their required checks via getRequiredChecks (#137)
  • Each runner now requires a factory which implements ExerciseRunnerFactoryInterface which can add arguments to the command and create instances of the runner (#137)


  • Refactor results and result renderers and improve the verification output (#142)
  • CLI exercises can now return an array of argument arrays which will run the program with each set of arguments, just like CGI exercises (BC is preserved here - 1 set of arguments is still accepted) (#142)
  • Event listener config format has changed. Listeners must be grouped under an arbitrary key (think name of the feature requiring the listeners - see PR for example) (#138)
  • Refactored some listeners to use more specific events and event objects (#140)
  • Extract getSolution to it's own interface ProvidesSolution. BC is preserved as CliExercise & CgiExercise now extend from it (#139)
  • Refactor everything dealing with the input file to use an Input object where the command line arguments can be retrieved from. This is BC break for checks, commands, self checking exercises and event listeners dealing with the fileName parameter (#135)
Other projects in PHP