• Stars
    star
    744
  • Rank 60,965 (Top 2 %)
  • Language
    PHP
  • License
    MIT License
  • Created about 12 years ago
  • Updated about 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Lovely PHP wrapper for using the command-line

ShellWrap

What is it?

It's a beautiful way to use powerful Linux/Unix tools in PHP. Easily and logically pipe commands together, capture errors as PHP Exceptions and use a simple yet powerful syntax. Works with any command line tool automagically.

Features

  • Flexible and sexy syntax.
  • Exceptions are thrown if the executable returns an error.
  • Paths to binaries are automatically resolved.
  • All arguments are properly escaped.
  • Callback functions for streaming output.

Examples

<?php 
require_once 'vendor/autoload.php';
use MrRio\ShellWrap as sh;

// List all files in current dir
echo sh::ls();

// Checkout a branch in git
sh::git('checkout', 'master');

// You can also pipe the output of one command, into another
// This downloads example.com through cURL, follows location, then pipes through grep to 
// filter for 'html'
echo sh::grep('html', sh::curl('http://example.com', array(
	'location' => true
)));

// Touch a file to create it
sh::touch('file.html');

// Remove file
sh::rm('file.html');

// Remove file again (this fails, and throws an exception because the file doesn't exist)

try {
	sh::rm('file.html');
} catch (ShellWrapException $e) {
	echo 'Caught failing sh::rm() call';
}


// This throws an exception, as 'invalidoption' is not a valid argument
try {
	echo sh::ls(array('invalidoption' => true));
} catch (ShellWrapException $e) {
	echo 'Caught failing sh::ls() call';
}

// Commands can be written multiple ways
sh::git('reset', array('hard' => true), 'HEAD');
sh::git('reset', '--hard', 'HEAD');
sh::git(array('reset', '--hard', 'HEAD'));

// Arguments passed in are automatically escaped, this expands to
// date --date '2012-10-10 10:00:00'
echo sh::date(array(
	'date' => '2012-10-10 10:00:00'
));

// If arg keys are one letter, is assumes one dash prefixing it
// date -d '2012-10-10 10:00:00'
echo sh::date(array(
	'd' => '2012-10-10 10:00:00'
));


?>

Example: Tailing a file and adding timestamps to output

You can stream the output of a command into a callback function. For example:

sh::tail('-f log', function($in) {
	echo "\033[32m" . date('Y-m-d H:i:s') . "\033[39m " . $in;
});

Make sure the file 'log' exists. This will output a timestamp, and the input. Try echoing into the log file.

The escape codes are to add a little colour to the terminal.

Interactive Shell

ShellWrap also ships with an interactive shell mode. You can access this by typing:

./bin/shellwrap

Warning

Don't use any user inputted data with these commands. Even with very paranoid filtering, you can't know all the potential pitfalls of each command you're using. Use your noggin.

Acknowledgements

Inspired by the Python project sh by Andrew Moffat

More Repositories

1

vtop

Wow such top. So stats. More better than regular top.
JavaScript
4,063
star
2

DOCX.js

Generate Microsoft Word DOCX files in pure client-side JavaScript. Try in Chrome
JavaScript
156
star
3

TitaniORM

A database helper library intended for use inside Titanium Mobile applications.
JavaScript
44
star
4

js-snes-player

Emulator for playing SNES SPC tunes in JavaScript
JavaScript
35
star
5

chart.php

PHP
27
star
6

provision-mac

Shell
7
star
7

vonrise

Highrise + Vonage Integration for Google Chrome
JavaScript
6
star
8

googlepedia

Shows you a relevant Wikipedia article along with your search results
JavaScript
6
star
9

cookie-compliance

The simplest way to abide by the EU Cookie Directive
JavaScript
4
star
10

headphone-detector

Shell command which tells you whether sound is playing though speakers or headphones.
Objective-C
3
star
11

googlepedia-chrome

Shows Wikipedia results alongside Google results.
JavaScript
3
star
12

CurlWrap

Simple wrapper for cURL in PHP. See also: ShellWrap
PHP
3
star
13

webpegs

2
star
14

codereview

PHP
2
star
15

hotload-lambda-example

JavaScript
2
star
16

IodineGBA

A GameBoy Advance emulator written entirely in JavaScript and powered by HTML5.
JavaScript
2
star
17

cook-e

Comply with the EU cookie directive without breaking a sweat
PHP
2
star
18

volavon

Turns your volume down when your Vonage line rings, and you haven't got headphones plugged in.
Shell
2
star
19

magento

My own fork of magento with various bug fixes, all patches pushed upstream to their ticket system.
1
star
20

Web-Development-Course

A beginner/intermediate course for web application development.
1
star
21

try_git

1
star
22

dotfiles

Shell
1
star
23

mrrio.github.com

JavaScript
1
star
24

facebook-frape-protection

Google Chrome Extension. Protects you from being fraped by requiring a 4 digit pin.
JavaScript
1
star