Slide 1

Slide 1 text

virtPHP One Box. Multiple Elephpants. @jacques_thekit @jakerella @ramsey

Slide 2

Slide 2 text

Who am I? • Web craftsman, author, and speaker • Contributed array_column() to PHP • Author of rhumsaa/uuid package • User group and conference organizer • Code wrangler at ShootProof • Co-author of virtPHP

Slide 3

Slide 3 text

Like many great coding projects, it began...

Slide 4

Slide 4 text

...at a hackathon.

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

virtualenv virtualenvwrapper

Slide 7

Slide 7 text

virtPHP

Slide 8

Slide 8 text

To understand virtPHP you must first understand PHP.

Slide 9

Slide 9 text

C application

Slide 10

Slide 10 text

C application

Slide 11

Slide 11 text

Web Request Apache FastCGI Builtin Web Server

Slide 12

Slide 12 text

Web Request Apache FastCGI Builtin Web Server bash

Slide 13

Slide 13 text

bash Web Request Apache FastCGI Builtin Web Server Requester Http:// localhost:// $

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

php.ini

Slide 16

Slide 16 text

php.ini

Slide 17

Slide 17 text

php.ini extensions C application

Slide 18

Slide 18 text

php.ini extensions C application PECL

Slide 19

Slide 19 text

php.ini extensions C application PECL components PHP application PEAR

Slide 20

Slide 20 text

php.ini extensions C application PECL components PHP application PEAR

Slide 21

Slide 21 text

php.ini extensions C application PECL Your application system application

Slide 22

Slide 22 text

php.ini extensions C application PECL system application

Slide 23

Slide 23 text

So, what is virtPHP?

Slide 24

Slide 24 text

php.ini PECL PEAR system virtPHP environment

Slide 25

Slide 25 text

php.ini PECL PEAR system virtPHP environment

Slide 26

Slide 26 text

php.ini PECL PEAR environment1 php.ini PECL PEAR environment2

Slide 27

Slide 27 text

php.ini PECL PEAR environment1 php.ini PECL PEAR environment2 php.ini PECL PEAR environment3 php.ini PECL PEAR environment4

Slide 28

Slide 28 text

php.ini PECL PEAR environment1 php.ini PECL PEAR environment2 php.ini PECL PEAR environment3 php.ini PECL PEAR environment4 PHP 5.3 PHP 5.5

Slide 29

Slide 29 text

How does virtPHP work?

Slide 30

Slide 30 text

First, we create the project folder ../{your env}/

Slide 31

Slide 31 text

../{your env}/ .virtphp bin/ etc/ lib/ share/ Then, we create root folders

Slide 32

Slide 32 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … Finally, we install a lot of files … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 33

Slide 33 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … bin/ is your applications … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 34

Slide 34 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … etc/ is your configurations … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 35

Slide 35 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … lib/ is where pecl extensions go … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 36

Slide 36 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … share/pear is for pear support … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 37

Slide 37 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … share/php is for pear packages … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 38

Slide 38 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … Enlightened Pair … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/ virtphp.phar

Slide 39

Slide 39 text

The Keymaster

Slide 40

Slide 40 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … The Keymaster … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/ virtphp.phar

Slide 41

Slide 41 text

../{your env}/ .virtphp bin/ activate composer composer.phar pear peardev pecl php php-config phpize etc/ pear.conf php.ini … The Gatekeeper … lib/ php/ share/ pear/ cache/ cfg/ download/ temp/ tests/ www/ php/

Slide 42

Slide 42 text

The Gatekeeper

Slide 43

Slide 43 text

activate script

Slide 44

Slide 44 text

activate script 1. Check if a virtualenv is running

Slide 45

Slide 45 text

activate script 2. Check if a virtPHP is running

Slide 46

Slide 46 text

activate script 3. Deactivate any virtPHP that might be running

Slide 47

Slide 47 text

activate script 4. Set shell session variables

Slide 48

Slide 48 text

activate script 4. Set shell session variables • PATH • PS1 (prompt) • PHP_INI_SCAN_DIR • VIRTPHP_ENV_PATH • VIRTPHP_COMPOSER_GLOBAL • VIRT_PHP_OLD_VIRTUAL_PATH

Slide 49

Slide 49 text

activate script 4. Set shell session variables Only for the duration of the current terminal session.

Slide 50

Slide 50 text

Let’s see it in action.

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

ramsey@virtphp:~$ wget https://github.com/virtphp/ virtphp/releases/download/v0.5.1-alpha/ virtphp.phar

Slide 54

Slide 54 text

ramsey@virtphp:~$ wget https://github.com/virtphp/ virtphp/releases/download/v0.5.1-alpha/ virtphp.phar ! ramsey@virtphp:~$ chmod +x virtphp.phar

Slide 55

Slide 55 text

ramsey@virtphp:~$ wget https://github.com/virtphp/ virtphp/releases/download/v0.5.1-alpha/ virtphp.phar ! ramsey@virtphp:~$ chmod +x virtphp.phar ! ramsey@virtphp:~$ mv virtphp.phar ~/bin/virtphp

Slide 56

Slide 56 text

ramsey@virtphp:~$ wget https://github.com/virtphp/ virtphp/releases/download/v0.5.1-alpha/ virtphp.phar ! ramsey@virtphp:~$ chmod +x virtphp.phar ! ramsey@virtphp:~$ mv virtphp.phar ~/bin/virtphp ! ramsey@virtphp:~$ which virtphp /home/ramsey/bin/virtphp

Slide 57

Slide 57 text

ramsey@virtphp:~$ wget https://github.com/virtphp/ virtphp/releases/download/v0.5.1-alpha/ virtphp.phar ! ramsey@virtphp:~$ chmod +x virtphp.phar ! ramsey@virtphp:~$ mv virtphp.phar ~/bin/virtphp ! ramsey@virtphp:~$ which virtphp /home/ramsey/bin/virtphp ! ramsey@virtphp:~$ virtphp

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

ramsey@virtphp:~$ which php /usr/bin/php

Slide 63

Slide 63 text

ramsey@virtphp:~$ which php /usr/bin/php ! ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project1/bin/activate

Slide 64

Slide 64 text

ramsey@virtphp:~$ which php /usr/bin/php ! ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project1/bin/activate ! (project1) ramsey@virtphp:~$

Slide 65

Slide 65 text

ramsey@virtphp:~$ which php /usr/bin/php ! ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project1/bin/activate ! (project1) ramsey@virtphp:~$ ! (project1) ramsey@virtphp:~$ which php /home/ramsey/.virtphp/envs/project1/bin/php

Slide 66

Slide 66 text

(project1) ramsey@virtphp:~$ ! (project1) ramsey@virtphp:~$ source /home/ramsey/ .virtphp/envs/project2/bin/activate You are currently in a virtPHP session. Do you want to switch? y/n

Slide 67

Slide 67 text

(project1) ramsey@virtphp:~$ deactivate ! ramsey@virtphp:~$ ! ramsey@virtphp:~$ which php /usr/bin/php

Slide 68

Slide 68 text

ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project2/bin/activate

Slide 69

Slide 69 text

ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project2/bin/activate ! (project2) ramsey@virtphp:~$ !

Slide 70

Slide 70 text

ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project2/bin/activate ! (project2) ramsey@virtphp:~$ ! (project2) ramsey@virtphp:~$ pecl install mongo ! ...

Slide 71

Slide 71 text

ramsey@virtphp:~$ source /home/ramsey/.virtphp/ envs/project2/bin/activate ! (project2) ramsey@virtphp:~$ ! (project2) ramsey@virtphp:~$ pecl install mongo ! ... ! (project2) ramsey@virtphp:~$ php --ri mongo ! mongo ! MongoDB Support => enabled Version => 1.5.5 ...

Slide 72

Slide 72 text

(project2) ramsey@virtphp:~$ source /home/ramsey/ .virtphp/envs/project1/bin/activate You are currently in a virtPHP session. Do you want to switch? y/n y ! (project1) ramsey@virtphp:~$

Slide 73

Slide 73 text

(project2) ramsey@virtphp:~$ source /home/ramsey/ .virtphp/envs/project1/bin/activate You are currently in a virtPHP session. Do you want to switch? y/n y ! (project1) ramsey@virtphp:~$ ! (project1) ramsey@virtphp:~$ php --ri mongo Extension 'mongo' not present.

Slide 74

Slide 74 text

(project2) ramsey@virtphp:~$ source /home/ramsey/ .virtphp/envs/project1/bin/activate You are currently in a virtPHP session. Do you want to switch? y/n y ! (project1) ramsey@virtphp:~$ ! (project1) ramsey@virtphp:~$ php --ri mongo Extension 'mongo' not present. ! (project1) ramsey@virtphp:~$ pecl install mongo-1.2.12 ! ...

Slide 75

Slide 75 text

(project2) ramsey@virtphp:~$ source /home/ramsey/ .virtphp/envs/project1/bin/activate You are currently in a virtPHP session. Do you want to switch? y/n y ! (project1) ramsey@virtphp:~$ ! (project1) ramsey@virtphp:~$ php --ri mongo Extension 'mongo' not present. ! (project1) ramsey@virtphp:~$ pecl install mongo-1.2.12 ! ... ! (project1) ramsey@virtphp:~$ php --ri mongo ! mongo ! MongoDB Support => enabled Version => 1.2.12

Slide 76

Slide 76 text

No content

Slide 77

Slide 77 text

Roadmap to v1

Slide 78

Slide 78 text

install command virtphp freeze > requirements.json virtphp install

Slide 79

Slide 79 text

Support on Linux for: • Apache • CGI • FPM (potential) • phpdbg (Research for need and capability)

Slide 80

Slide 80 text

Support on OSX for: • Apache • CGI • CLI • Built-in web server

Slide 81

Slide 81 text

Support on Windows for: • IIS (maybe) • CGI • CLI • Built-in web server

Slide 82

Slide 82 text

How you can help

Slide 83

Slide 83 text

How you can help Feedback

Slide 84

Slide 84 text

How you can help Pull requests welcomed

Slide 85

Slide 85 text

How you can help Feature requests

Slide 86

Slide 86 text

virtPHP Thank you. virtphp.org @virtPHP ! @jacques_thekit @jakerella @ramsey

Slide 87

Slide 87 text

virtPHP: One Box, Multiple Elephpants Copyright © 2014 Jacques Woodcock, Ben Ramsey, and Jordan Kasper. Woodcock, Jacques, Ben Ramsey, and Jordan Kasper. “virtPHP: One Box, Multiple Elephpants.” Day Camp for Developers. EICC. Web conference. 22 Aug. 2014. Conference Presentation. virtPHP