SlideShare a Scribd company logo
1 of 238
Download to read offline
@tweetingsherry
#phpuk17
~ ChrisSherry $ WordPress for the modern PHP developer
@tweetingsherry
#phpuk17
~ ChrisSherry $ WordPress for the modern PHP developer
@tweetingsherry
#phpuk17
~ ChrisSherry $ WordPress for the modern PHP developer
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
Version Control
@tweetingsherry
#phpuk17
See who changed what, when
@tweetingsherry
#phpuk17
See who changed what, when
Multiple people working on the
same files simultaneously
@tweetingsherry
#phpuk17
See who changed what, when
Multiple people working on the
same files simultaneously
Work on features in parallel
@tweetingsherry
#phpuk17
See who changed what, when
Multiple people working on the
same files simultaneously
Work on features in parallel
Roll back to previous versions
@tweetingsherry
#phpuk17
See who changed what, when
Multiple people working on the
same files simultaneously
Work on features in parallel
Roll back to previous versions
Go home on time
@tweetingsherry
#phpuk17
ALL THE THINGS
~/site $ git init
~/site $ git add —-all
@tweetingsherry
#phpuk17
.git index.php readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
.git index.php readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
Our users can change our
codebase using the editor tool
@tweetingsherry
#phpuk17
...


define('DISALLOW_FILE_EDIT', true);
/wp-config.php
@tweetingsherry
#phpuk17
...


define('DISALLOW_FILE_EDIT', true);
/wp-config.php
define('AUTOMATIC_UPDATER_DISABLED', true);
@tweetingsherry
#phpuk17
.git index.php readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
.git index.php readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
.git index.php readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-config.php wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
.git index.php
wp-config.php
readme.htmllicense.txt wp-activate.php wp-admin wp-blog-header.php
wp-comments-
post.php
wp-config-
sample.php
wp-content wp-cron.php wp-includes wp-links-opml.php
wp-load.php wp-login.php wp-mail.php wp-settings.php wp-signup.php wp-trackback.php xmlrpc.php
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
if (!defined('ABSPATH')) {

define(
'ABSPATH',
dirname(__FILE__) . '/'
);

}

/wp-config.php...
@tweetingsherry
#phpuk17
if (!defined('ABSPATH')) {

define(
'ABSPATH',
dirname(__FILE__) . '/wordpress/'
);

}

/wp-config.php...
@tweetingsherry
#phpuk17
option_value
https://site.com
https://site.com
WordPress
Just another WordPress site
...
option_name
siteurl
home
blogname
blogdescription
...
wp_options
@tweetingsherry
#phpuk17
option_value
https://site.com
https://site.com
WordPress
Just another WordPress site
...
/wordpress
option_name
siteurl
home
blogname
blogdescription
...
wp_options
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
mments-
t.php
wp-config-
sample.php
wp-content wp-cron.php wp-includes wp-links-opml.php wp-load.php wp-logi
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
mments-
t.php
wp-config-
sample.php
wp-content wp-cron.php
index.php
wp-includes
plugins themes
wp-links-opml.php wp-load.php wp-logi
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
mments-
t.php
wp-config-
sample.php
wp-content wp-cron.php
index.php
wp-includes
plugins themes
wp-links-opml.php wp-load.php wp-logi
index.php hello.php
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
mments-
t.php
wp-config-
sample.php
wp-content wp-cron.php
index.php
wp-includes
plugins themes
wp-links-opml.php wp-load.php wp-logi
index.php twentyeleven twentytwelve twentythirteen twentyfourteen twentyfifiteen twentysixteen
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress
mments-
t.php
wp-config-
sample.php
wp-content wp-cron.php
index.php
wp-includes
plugins themes
wp-links-opml.php wp-load.php wp-logi
wp-content
index.php twentyeleven twentytwelve twentythirteen twentyfourteen twentyfifiteen twentysixteen
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
plugins themes
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
debug-bar awesome-plugin
@tweetingsherry
#phpuk17
define(
'WP_CONTENT_DIR',
$_SERVER['DOCUMENT_ROOT'] . '/wp-content'
);


define(
'WP_CONTENT_URL', '/wp-content'
);
/wp-config.php...
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
core code
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
core code application code
@tweetingsherry
#phpuk17
YOU MADE A NEW FOLDER
I’M GLAD I CHOSE THIS TRACK
@tweetingsherry
#phpuk17
GENE WILDER 1933-2016
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content.gitignore
@tweetingsherry
#phpuk17
/.DS_Store
/wordpress
/.gitignore
@tweetingsherry
#phpuk17
~ $ git clone https://github.com/chrissherry/site
@tweetingsherry
#phpuk17
~ $ git clone https://github.com/chrissherry/site
.git index.php wp-config.php wp-content.gitignore
@tweetingsherry
#phpuk17
~ $ git clone https://github.com/chrissherry/site
.git index.php wp-config.php wp-content.gitignore
@tweetingsherry
#phpuk17
Dependency
Management
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
&
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
github.com/johnpbloch/wordpress
@tweetingsherry
#phpuk17
github.com/johnpbloch/wordpress
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
Default
type:library
/vendor/[vendor]/[name]
@tweetingsherry
#phpuk17
Default
type:library
/vendor/[vendor]/[name]
Custom
type: wordpress-core
/wordpress
@tweetingsherry
#phpuk17
~/site $ composer require johnpbloch/wordpress
~/site $ composer init
~/site $ composer install
@tweetingsherry
#phpuk17
~/site $ composer require johnpbloch/wordpress
{
"require": {

"johnpbloch/wordpress": "^4.5"

}
}
/composer.json
~/site $ composer init
~/site $ composer install
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-contentcomposer.json composer.lockgitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-contentcomposer.json composer.lockgitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-contentcomposer.json composer.lockgitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-contentcomposer.json composer.lockgitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-contentcomposer.json composer.lockgitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
debug-bar awesome-plugin
@tweetingsherry
#phpuk17
wpackagist.org
@tweetingsherry
#phpuk17
wpackagist.org
type: wordpress-plugin /wp-content/plugins
type: wordpress-theme /wp-content/themes
Custom
@tweetingsherry
#phpuk17
.git index.php wp-config.phpwordpress wp-content
plugins themes
@tweetingsherry
#phpuk17
github.com/composer/installers
@tweetingsherry
#phpuk17
{
"require": {

"johnpbloch/wordpress": "^4.5",
"wpackagist-plugin/advanced-custom-fields": "~4.4"

}
}
/composer.json
@tweetingsherry
#phpuk17
https://wordpress.org/plugins/advanced-custom-fields
@tweetingsherry
#phpuk17
https://wordpress.org/plugins/advanced-custom-fields
@tweetingsherry
#phpuk17
https://wordpress.org/plugins/advanced-custom-fields
@tweetingsherry
#phpuk17
https://wordpress.org/plugins/advanced-custom-fields
@tweetingsherry
#phpuk17
{
"require": {

"johnpbloch/wordpress": "^4.5",
"wpackagist-plugin/advanced-custom-fields": "4.4"

}
}
/composer.json
@tweetingsherry
#phpuk17
{
"require": {

"johnpbloch/wordpress": "^4.5",
"wpackagist-plugin/advanced-custom-fields": "4.4"

}
}
/composer.json
@tweetingsherry
#phpuk17
/composer.json{
"require": {

"johnpbloch/wordpress": "^4.5",
"wpackagist-plugin/advanced-custom-fields": "4.4"

},
"repositories":
[

{

"type": "composer",

"url": "https://wpackagist.org"

}
]
}
@tweetingsherry
#phpuk17
{
"require": {

"johnpbloch/wordpress": "^4.5",
"wpackagist-plugin/advanced-custom-fields": "4.4"

},
"require-dev": {
"wpackagist-plugin/debug-bar": "*"

},
"repositories":[...]
}
/composer.json
~/site $ composer require —-dev wpackagist-plugin/debug-bar
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
awesome-plugindebug-bar
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
awesome-plugindebug-bar
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep





/.gitignore
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
awesome-plugindebug-bar
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
awesome-plugindebug-bar
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep
!/wp-content/plugins/awesome-plugin







/.gitignore
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin
@tweetingsherry
#phpuk17
chrissherry/awesome-plugin v1.0
v2.0
TAGS
v1.0 (awesome)
v2.0 (more awesome!) Site B
Site AGithub
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin/composer.json
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin/composer.json
@tweetingsherry
#phpuk17
github.com/chrissherry/awesome-plugin/composer.json
@tweetingsherry
#phpuk17
{

"require": {

{...},
"chrissherry/awesome-plugin": "~1.0" 

}
/composer.json
@tweetingsherry
#phpuk17
{

"require": {

{...},
"chrissherry/awesome-plugin": "~1.0" 

},
"repositories": [
{...},
{

"type": "vcs",
"url": "https://github.com/chrissherry/awesome-p..."
}
]
}
/composer.json
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
advanced-
custom-fields
composer.json composer.lockgitignore
awesome-plugindebug-bar
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
composer.json composer.lockgitignore
awesome-theme
@tweetingsherry
#phpuk17
index.php wp-config.phpwordpress wp-content
plugins themes
composer.json composer.lockgitignore
awesome-theme storefront sydney twentysixteen
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep





/.gitignore
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep





/.gitignore
/wp-content/themes/*
!/wp-content/themes/.gitkeep
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep





/.gitignore
/wp-content/themes/*
!/wp-content/themes/.gitkeep
!/wp-content/themes/awesome-theme
@tweetingsherry
#phpuk17
/wordpress



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep





/.gitignore
@tweetingsherry
#phpuk17
ONE DOES NOT SIMPLY
CLICK TO UPDATE THINGS
@tweetingsherry
#phpuk17
wordpress.org/plugins/members
@tweetingsherry
#phpuk17
{
"require": {
...,
"wpackagist-plugin/members": "1.1.3"
},
"repositories":[...]
}
/composer.json
~/site $ composer require wpackagist-plugin/members
@tweetingsherry
#phpuk17
Defined versions for dependancies
@tweetingsherry
#phpuk17
Defined versions for dependancies
Less third party code in the
repository
@tweetingsherry
#phpuk17
Defined versions for dependancies
Less third party code in the
repository
Greater reliance on 3rd party
availability
@tweetingsherry
#phpuk17
Uploads
@tweetingsherry
#phpuk17
Uploads
@tweetingsherry
#phpuk17
/wordpress

/wp-content/uploads/*



/wp-content/plugins/*

!/wp-content/plugins/.gitkeep

...

/.gitignore
@tweetingsherry
#phpuk17
s3tools.org/s3cmd
@tweetingsherry
#phpuk17
github.com/humanmade/s3-uploads
@tweetingsherry
#phpuk17
~/site $ composer require hadyfayed/s3-uploads
{
"require": {
...,
"hadyfayed/s3-uploads": "2.0"
},
"repositories":[...]
}
/composer.json
@tweetingsherry
#phpuk17
~/site $ rsync -avz
user@site.com:/var/www/mysite/wp-content/uploads
wp-content/uploads
@tweetingsherry
#phpuk17
Smaller repository -don’t need
version control over uploads
@tweetingsherry
#phpuk17
Smaller repository -don’t need
version control over uploads
Faster clone and deploy times
@tweetingsherry
#phpuk17
Smaller repository -don’t need
version control over uploads
Faster clone and deploy times
Remote backups of our uploads
@tweetingsherry
#phpuk17
Databases
@tweetingsherry
#phpuk17
prod:~/site $ mysqldump -u user -p dbname > db.sql
~/site $ scp user@site.com:site/db.sql db.sql
~/site $ mysql -u user -p dbname < db.sql
@tweetingsherry
#phpuk17
Environments
@tweetingsherry
#phpuk17
option_name
siteurl
home
blogname
blogdescription
...
option_value
https://site.com/wordpress
https://site.com
WordPress
Just another WordPress site
...
wp_options
@tweetingsherry
#phpuk17
option_name
siteurl
home
blogname
blogdescription
...
option_value
https://staging.site.com/wordpre…
https://staging.site.com
WordPress
Just another WordPress site
...
wp_options
@tweetingsherry
#phpuk17
...
...
define('WP_HOME', 'https://site.com');
define('WP_SITEURL', 'https://site.com/wordpress');
/wp-config.php
@tweetingsherry
#phpuk17
//define('WP_HOME', 'https://site.com');
//define('WP_SITEURL', 'https://site.com/wordpress…
define('WP_HOME', 'https://staging.site.com');
define('WP_SITEURL', 'https://staging.site.com/wor…
/wp-config.php...
...
@tweetingsherry
#phpuk17
server {

listen 443;

server_name staging.site.com;
env WP_ENV=staging
...
/etc/nginx/sites-enabled/vhost.conf
@tweetingsherry
#phpuk17
server {

listen 443;

server_name staging.site.com;
env WP_ENV=staging
...
switch ($_ENV['WP_ENV']) {

case 'staging':

define('WP_HOME', 'https://staging.site.com…
define('WP_SITEURL', 'https://staging.site.…
...
/wp-config.php
/etc/nginx/sites-enabled/vhost.conf
@tweetingsherry
#phpuk17
server {

listen 443;

server_name staging.site.com;
env WP_ENV=staging
...
switch ($_ENV['WP_ENV']) {

case 'staging':

define('WP_HOME', 'https://staging.site.com…
define('WP_SITEURL', 'https://staging.site.…
...
/wp-config.php
/etc/nginx/sites-enabled/vhost.conf
define('WP_HOME', 'https://staging.site.com…
define('WP_SITEURL', 'https://staging.site.…
@tweetingsherry
#phpuk17
define('DB_NAME', 'database_name_here');

define('DB_USER', 'username_here');

define('DB_PASSWORD', 'password_here');

define('DB_HOST', 'localhost');
define('WP_HOME', 'https://site.com');
define('WP_SITEURL', 'https://site.com/wordp…
define('AUTH_KEY', 'put your unique phrase…

define('SECURE_AUTH_KEY', 'put your unique phrase…

define('LOGGED_IN_KEY', 'put your unique phrase…
define('WP_DEBUG', true);
... /wp-config.php
...
@tweetingsherry
#phpuk17
define('DB_NAME', 'database_name_here');

define('DB_USER', 'username_here');

define('DB_PASSWORD', 'password_here');

define('DB_HOST', 'localhost');
define('WP_HOME', 'https://site.com');
define('WP_SITEURL', 'https://site.com/wordp…
define('AUTH_KEY', 'put your unique phrase…

define('SECURE_AUTH_KEY', 'put your unique phrase…

define('LOGGED_IN_KEY', 'put your unique phrase…
define('WP_DEBUG', true);
...
... /wp-config.php
@tweetingsherry
#phpuk17
define('DB_NAME', 'database_name_here');

define('DB_USER', 'username_here');

define('DB_PASSWORD', 'password_here');

define('DB_HOST', 'localhost');
define('WP_HOME', 'https://site.com');
define('WP_SITEURL', 'https://site.com/wordp…
define('AUTH_KEY', 'put your unique phrase…

define('SECURE_AUTH_KEY', 'put your unique phrase…

define('LOGGED_IN_KEY', 'put your unique phrase…

define('WP_DEBUG', true);
...
... /wp-config.php
@tweetingsherry
#phpuk17
KEEP IT SAFE
KEEP IT SECRET
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
github.com/vlucas/phpdotenv
@tweetingsherry
#phpuk17
{

"require": {

{...}
"vlucas/phpdotenv": "^1.0"

},
...
}
/composer.json
~/site $ composer require vlucas/phpdotenv
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
vendor
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
vendor
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
vendor
@tweetingsherry
#phpuk17
DB_NAME=dbname

DB_USER=user

DB_PASSWORD=correcthorsebatterystaple

DB_HOST=localhost


WP_ENV=development

WP_HOME=https://site.com

WP_SITEURL=https://site.com/wordpress
/.env
@tweetingsherry
#phpuk17
DB_NAME=dbname

DB_USER=user

DB_PASSWORD=correcthorsebatterystaple

DB_HOST=localhost


WP_ENV=development

WP_HOME=https://site.com

WP_SITEURL=https://site.com/wordpress
/.env
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
Dotenv::load('.env');



@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
Dotenv::load('.env');



define('DB_NAME', $_SERVER['DB_NAME']));

define('DB_USER', $_ENV['DB_USER']);

define('DB_PASSWORD', getenv('DB_PASSWORD'));

define('DB_HOST', getenv('DB_HOST'));
define('WP_HOME', getenv('WP_HOME'));
define('WP_SITEURL', getenv('WP_SITE_URL’));
...
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
Dotenv::load('.env');



define('DB_NAME', $_SERVER['DB_NAME']));

define('DB_USER', $_ENV['DB_USER']);

define('DB_PASSWORD', getenv('DB_PASSWORD'));

define('DB_HOST', getenv('DB_HOST'));
define('WP_HOME', getenv('WP_HOME'));
define('WP_SITEURL', getenv('WP_SITE_URL’));
...
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
Dotenv::load('.env');



define('DB_NAME', $_SERVER['DB_NAME']));

define('DB_USER', $_ENV['DB_USER']);

define('DB_PASSWORD', getenv('DB_PASSWORD'));

define('DB_HOST', getenv('DB_HOST'));
...
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php /wp-config.php
Dotenv::load('.env');



Dotenv::required(['DB_NAME', 'DB_USER', 'DB_PASSWORD',
'WP_HOME', 'WP_SITEURL']);
define('DB_NAME', $_SERVER['DB_NAME']));

define('DB_USER', $_ENV['DB_USER']);

define('DB_PASSWORD', getenv('DB_PASSWORD'));

define('DB_HOST', getenv('DB_HOST'));
...
@tweetingsherry
#phpuk17
/.env
/wordpress

/wp-content/uploads/*


...

/.gitignore
@tweetingsherry
#phpuk17
Easy to locate and update
@tweetingsherry
#phpuk17
Easy to locate and update
Per environment configuration
@tweetingsherry
#phpuk17
Easy to locate and update
Per environment configuration
Not in source control
@tweetingsherry
#phpuk17
Easy to locate and update
Per environment configuration
Not in source control
Ready for open source
@tweetingsherry
#phpuk17
Easy to locate and update
Per environment configuration
Not in source control
Ready for open source
Easy to store outside of webroot
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
vendor
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
server {
...
root /var/www/site
...
/etc/nginx/sites-enabled/vhost.conf
vendor
@tweetingsherry
#phpuk17
index.php
wp-config.php
wordpress
wp-content
composer.json composer.lock.gitignore.git.env
web
server {
...
root /var/www/site
...
/etc/nginx/sites-enabled/vhost.conf
/web
vendor
@tweetingsherry
#phpuk17
composer.json composer.lock.gitignore.git.env web
server {
...
root /var/www/site
...
/etc/nginx/sites-enabled/vhost.conf
/web
vendor
@tweetingsherry
#phpuk17
index.php wp-config.php wordpress wp-content
composer.json composer.lock.gitignore.git.env web vendor
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
Dependencies managed
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
Dependencies managed
Backups of uploads & databases
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
Dependencies managed
Backups of uploads & databases
Isolated configuration for
environments
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
Dependencies managed
Backups of uploads & databases
Isolated configuration for
environments
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
roots.io/bedrock
@tweetingsherry
#phpuk17
I DONT ALWAYS USE BEDROCK
@tweetingsherry
#phpuk17
Only keeping what we need in
version control
Dependencies managed
Backups of uploads & databases
Isolated configuration for
environments
Active open source community
@tweetingsherry
#phpuk17
index.php wp-config.php wordpress wp-content
composer.json composer.lock.gitignore.git.env web vendor
@tweetingsherry
#phpuk17
index.php wp-config.php wordpress wp-content
composer.json composer.lock.gitignore.git.env web vendor
@tweetingsherry
#phpuk17
index.php wp-config.php wp app
composer.json composer.lock.gitignore.git.env web vendor
@tweetingsherry
#phpuk17
/composer.json
@tweetingsherry
#phpuk17
/composer.json{
...,
"extra": {

"installer-paths": {

"web/app/plugins/{$name}/": ["type:wordpress-plugin"],

"web/app/themes/{$name}/": ["type:wordpress-theme"]

},
"wordpress-install-dir": "wp"

}

}
}
@tweetingsherry
#phpuk17
index.php wp-config.php
composer.json composer.lock.gitignore.git.env web vendor
wp app
@tweetingsherry
#phpuk17
index.php wp-config.php
composer.json composer.lock.gitignore.git.env web vendor
wp-contentwp app
@tweetingsherry
#phpuk17
Virtual
Machines
@tweetingsherry
#phpuk17
vagrantup.com
@tweetingsherry
#phpuk17
Virtual Machine
(Virtual Server)
@tweetingsherry
#phpuk17
Host Machine
Virtual Machine
(Virtual Server)
@tweetingsherry
#phpuk17
PHP 7.1
Host Machine
@tweetingsherry
#phpuk17
PHP 7.1
Host Machine
@tweetingsherry
#phpuk17
PHP 7.1
Host Machine
PHP 7.1
Remote Server A
@tweetingsherry
#phpuk17
PHP 7.1
Host Machine
PHP 7.1
Remote Server A
@tweetingsherry
#phpuk17
Remote Server B
PHP 5.2
PHP 7.1
Host Machine
PHP 7.1
Remote Server A
@tweetingsherry
#phpuk17
Remote Server B
PHP 5.2
PHP 7.1
Host Machine
PHP 7.1
Remote Server A
FatalErrorException
@tweetingsherry
#phpuk17
Virtual Machine A Remote Server A
Remote Server BVirtual Machine B
PHP 7.1
PHP 5.2
PHP 7.1
PHP 5.2
@tweetingsherry
#phpuk17
Host machine uncluttered
@tweetingsherry
#phpuk17
Host machine uncluttered
Software versions contained
@tweetingsherry
#phpuk17
Host machine uncluttered
Software versions contained
Similar as possible to production
@tweetingsherry
#phpuk17
Host machine uncluttered
Software versions contained
Similar as possible to production
Shared filesystem runs slow
@tweetingsherry
#phpuk17
Host machine uncluttered
Software versions contained
Similar as possible to production
Shared filesystem runs slow
Memory hungry
@tweetingsherry
#phpuk17
WHY IS THE RAM
ALWAYS GONE
@tweetingsherry
#phpuk17
Provisioning
@tweetingsherry
#phpuk17
ansible.com
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
php
7.1
@tweetingsherry
#phpuk17
php 7.1
php
7.1
@tweetingsherry
#phpuk17
php 7.1
php 7.1
php
7.1
@tweetingsherry
#phpuk17
php 7.1
php 7.1
php
7.1
php
7.1
@tweetingsherry
#phpuk17
Provision servers with single command
@tweetingsherry
#phpuk17
Provision servers with single command
Descriptive configurations
@tweetingsherry
#phpuk17
Provision servers with single command
Descriptive configurations
Idempotency (same when repeated)
@tweetingsherry
#phpuk17
Provision servers with single command
Descriptive configurations
Idempotency (same when repeated)
Reproducable servers
@tweetingsherry
#phpuk17
roots.io/trellis
@tweetingsherry
#phpuk17
Multisite, wp-cli, etc
@tweetingsherry
#phpuk17
Multisite, wp-cli, etc
Deploy script with build hooks
@tweetingsherry
#phpuk17
Multisite, wp-cli, etc
Deploy script with build hooks
Active open source community
@tweetingsherry
#phpuk17
Multisite, wp-cli, etc
Deploy script with build hooks
Active open source community
Usually does more than you need
@tweetingsherry
#phpuk17
Multisite, wp-cli, etc
Deploy script with build hooks
Active open source community
Usually does more than you need
Fiddly to update
@tweetingsherry
#phpuk17
~/site $ git remote add upstream https://github.com/
roots/trellis.git
@tweetingsherry
#phpuk17
~/site $ git remote add upstream https://github.com/
roots/trellis.git
~/site $ git remote -v
origin git@github.com:chrissherry/site.git (fetch)
origin git@github.com:chrissherry/site.git (push)
upstream git@github.com:roots/trellis.git (fetch)
@tweetingsherry
#phpuk17
~/site $ git fetch upstream master
~/site $ git merge -X subtree=trellis
--squash upstream/master
@tweetingsherry
#phpuk17
MERGE CONFLICTS
MERGE CONFLICTS EVERYWHERE
@tweetingsherry
#phpuk17
roots.io/trellis
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
Autoloading
@tweetingsherry
#phpuk17
require_once dirname(__DIR__).'/vendor/autoload.php';
<?php
/wp-config.php
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
@tweetingsherry
#phpuk17
~ ChrisSherry $ WordPress for the modern PHP developer
@tweetingsherry
#phpuk17
~ ChrisSherry $ WordPress for the modern PHP developer
@tweetingsherry
#phpuk17 You’re awesome
Thank you
@tweetingsherry
#phpuk17
Next Talks
Serving 30,000,000
Requests an Hour in the
Cloud
The road to continuous
deployment: a case
study
It's all about the goto
Terrence Ryan Michiel Rook Derick Rethans
Main Track Sidetrack 1 Sidetrack 2

More Related Content

What's hot

Cucumber Ru09 Web
Cucumber Ru09 WebCucumber Ru09 Web
Cucumber Ru09 WebJoseph Wilk
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)True-Vision
 
PHP Presentation
PHP PresentationPHP Presentation
PHP PresentationAnkush Jain
 
Building a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBuilding a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBen Limmer
 
PHP Presentation
PHP PresentationPHP Presentation
PHP PresentationNikhil Jain
 
Shifting gears with Composer
Shifting gears with ComposerShifting gears with Composer
Shifting gears with ComposerJavier López
 
Browser Extensions for Web Hackers
Browser Extensions for Web HackersBrowser Extensions for Web Hackers
Browser Extensions for Web HackersMark Wubben
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger
 
Behat - Drupal South 2018
Behat  - Drupal South 2018Behat  - Drupal South 2018
Behat - Drupal South 2018Berend de Boer
 
Writing automation tests with python selenium behave pageobjects
Writing automation tests with python selenium behave pageobjectsWriting automation tests with python selenium behave pageobjects
Writing automation tests with python selenium behave pageobjectsLeticia Rss
 

What's hot (11)

Cucumber Ru09 Web
Cucumber Ru09 WebCucumber Ru09 Web
Cucumber Ru09 Web
 
Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)Rails Presentation (Anton Dmitriyev)
Rails Presentation (Anton Dmitriyev)
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
 
Php 3 1
Php 3 1Php 3 1
Php 3 1
 
Building a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profitBuilding a Single Page Application using Ember.js ... for fun and profit
Building a Single Page Application using Ember.js ... for fun and profit
 
PHP Presentation
PHP PresentationPHP Presentation
PHP Presentation
 
Shifting gears with Composer
Shifting gears with ComposerShifting gears with Composer
Shifting gears with Composer
 
Browser Extensions for Web Hackers
Browser Extensions for Web HackersBrowser Extensions for Web Hackers
Browser Extensions for Web Hackers
 
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010 Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
Matt Gauger - Lamp vs. the world - MKE PHP Users Group - December 14, 2010
 
Behat - Drupal South 2018
Behat  - Drupal South 2018Behat  - Drupal South 2018
Behat - Drupal South 2018
 
Writing automation tests with python selenium behave pageobjects
Writing automation tests with python selenium behave pageobjectsWriting automation tests with python selenium behave pageobjects
Writing automation tests with python selenium behave pageobjects
 

Viewers also liked

Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Alena Holligan
 
Learn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopLearn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopchartjes
 
JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!Luís Cobucci
 
PHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTPHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTAdam Englander
 
Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Colin O'Dell
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Michele Orselli
 
Riding The Crazyhorse: Future Generation WordPress
Riding The Crazyhorse: Future Generation WordPressRiding The Crazyhorse: Future Generation WordPress
Riding The Crazyhorse: Future Generation WordPressLiz Danzico
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projectsIgnacio Martín
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityJames Titcumb
 
A recommendation engine for your php application
A recommendation engine for your php applicationA recommendation engine for your php application
A recommendation engine for your php applicationMichele Orselli
 
SunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLSunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLGabriela Ferrara
 
A World Without PHP
A World Without PHPA World Without PHP
A World Without PHPBen Marks
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I thinkWim Godden
 
Amp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesAmp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesRobert McFrazier
 
8 Ways to Hack a WordPress website
8 Ways to Hack a WordPress website8 Ways to Hack a WordPress website
8 Ways to Hack a WordPress websiteSiteGround.com
 
From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017Chris Tankersley
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tigerElizabeth Smith
 
Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHPMarcello Duarte
 
Isomorphic WordPress Applications with NodeifyWP
Isomorphic WordPress Applications with NodeifyWPIsomorphic WordPress Applications with NodeifyWP
Isomorphic WordPress Applications with NodeifyWPTaylor Lovett
 

Viewers also liked (20)

Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP UK Conference 2017
 
Learn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshopLearn To Test Like A Grumpy Programmer - 3 hour workshop
Learn To Test Like A Grumpy Programmer - 3 hour workshop
 
JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!
 
PHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your RESTPHP UK 2017 - Don't Lose Sleep - Secure Your REST
PHP UK 2017 - Don't Lose Sleep - Secure Your REST
 
Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017Debugging Effectively - PHP UK 2017
Debugging Effectively - PHP UK 2017
 
Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17Hopping in clouds - phpuk 17
Hopping in clouds - phpuk 17
 
Riding The Crazyhorse: Future Generation WordPress
Riding The Crazyhorse: Future Generation WordPressRiding The Crazyhorse: Future Generation WordPress
Riding The Crazyhorse: Future Generation WordPress
 
Talk about talks
Talk about talksTalk about talks
Talk about talks
 
Integrating React.js with PHP projects
Integrating React.js with PHP projectsIntegrating React.js with PHP projects
Integrating React.js with PHP projects
 
Dip Your Toes in the Sea of Security
Dip Your Toes in the Sea of SecurityDip Your Toes in the Sea of Security
Dip Your Toes in the Sea of Security
 
A recommendation engine for your php application
A recommendation engine for your php applicationA recommendation engine for your php application
A recommendation engine for your php application
 
SunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQLSunshinePHP 2017 - Making the most out of MySQL
SunshinePHP 2017 - Making the most out of MySQL
 
A World Without PHP
A World Without PHPA World Without PHP
A World Without PHP
 
My app is secure... I think
My app is secure... I thinkMy app is secure... I think
My app is secure... I think
 
Amp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pagesAmp your site: An intro to accelerated mobile pages
Amp your site: An intro to accelerated mobile pages
 
8 Ways to Hack a WordPress website
8 Ways to Hack a WordPress website8 Ways to Hack a WordPress website
8 Ways to Hack a WordPress website
 
From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017From Docker to Production - SunshinePHP 2017
From Docker to Production - SunshinePHP 2017
 
Taming the resource tiger
Taming the resource tigerTaming the resource tiger
Taming the resource tiger
 
Functional Structures in PHP
Functional Structures in PHPFunctional Structures in PHP
Functional Structures in PHP
 
Isomorphic WordPress Applications with NodeifyWP
Isomorphic WordPress Applications with NodeifyWPIsomorphic WordPress Applications with NodeifyWP
Isomorphic WordPress Applications with NodeifyWP
 

Similar to WordPress for Modern PHP Developers with Version Control and Dependency Management

Introduction to php
Introduction to phpIntroduction to php
Introduction to phpjgarifuna
 
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16Build a Better Editing Experience with Advanced Custom Fields - #WCTO16
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16Jeseph Meyers
 
Scaling Complexity in WordPress Enterprise Apps
Scaling Complexity in WordPress Enterprise AppsScaling Complexity in WordPress Enterprise Apps
Scaling Complexity in WordPress Enterprise AppsMike Schinkel
 
Php session 3 Important topics
Php session 3 Important topicsPhp session 3 Important topics
Php session 3 Important topicsSpy Seat
 
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0Martijn Dashorst
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Mike Schinkel
 
Send, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeSend, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeNoushadur Shoukhin
 
basic concept of php(Gunikhan sonowal)
basic concept of php(Gunikhan sonowal)basic concept of php(Gunikhan sonowal)
basic concept of php(Gunikhan sonowal)Guni Sonow
 
Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPwahidullah mudaser
 
Php Tutorial | Introduction Demo | Basics
 Php Tutorial | Introduction Demo | Basics Php Tutorial | Introduction Demo | Basics
Php Tutorial | Introduction Demo | BasicsShubham Kumar Singh
 

Similar to WordPress for Modern PHP Developers with Version Control and Dependency Management (20)

Using PHP
Using PHPUsing PHP
Using PHP
 
Introduction to php
Introduction to phpIntroduction to php
Introduction to php
 
New PHP Exploitation Techniques
New PHP Exploitation TechniquesNew PHP Exploitation Techniques
New PHP Exploitation Techniques
 
Php essentials
Php essentialsPhp essentials
Php essentials
 
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16Build a Better Editing Experience with Advanced Custom Fields - #WCTO16
Build a Better Editing Experience with Advanced Custom Fields - #WCTO16
 
Scaling Complexity in WordPress Enterprise Apps
Scaling Complexity in WordPress Enterprise AppsScaling Complexity in WordPress Enterprise Apps
Scaling Complexity in WordPress Enterprise Apps
 
Php session 3 Important topics
Php session 3 Important topicsPhp session 3 Important topics
Php session 3 Important topics
 
Php
PhpPhp
Php
 
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
HTMX: Web 1.0 with the benefits of Web 2.0 without the grift of Web 3.0
 
Php mysql
Php mysqlPhp mysql
Php mysql
 
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
Hardcore URL Routing for WordPress - WordCamp Atlanta 2014 (PPT)
 
Send, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script codeSend, pass, get variables with php, form, html & java script code
Send, pass, get variables with php, form, html & java script code
 
PHP-Part1
PHP-Part1PHP-Part1
PHP-Part1
 
basic concept of php(Gunikhan sonowal)
basic concept of php(Gunikhan sonowal)basic concept of php(Gunikhan sonowal)
basic concept of php(Gunikhan sonowal)
 
Day1
Day1Day1
Day1
 
Php resque
Php resquePhp resque
Php resque
 
Introduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHPIntroduction to PHP - Basics of PHP
Introduction to PHP - Basics of PHP
 
Php with my sql
Php with my sqlPhp with my sql
Php with my sql
 
Php Tutorial | Introduction Demo | Basics
 Php Tutorial | Introduction Demo | Basics Php Tutorial | Introduction Demo | Basics
Php Tutorial | Introduction Demo | Basics
 
Php My SQL Tutorial | beginning
Php My SQL Tutorial | beginningPhp My SQL Tutorial | beginning
Php My SQL Tutorial | beginning
 

Recently uploaded

Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxAS Design & AST.
 
Key Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapKey Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapIshara Amarasekera
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Advantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxAdvantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxRTS corp
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxSasikiranMarri
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slidesvaideheekore1
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...kalichargn70th171
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolsosttopstonverter
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfmaor17
 
Effort Estimation Techniques used in Software Projects
Effort Estimation Techniques used in Software ProjectsEffort Estimation Techniques used in Software Projects
Effort Estimation Techniques used in Software ProjectsDEEPRAJ PATHAK
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shardsChristopher Curtin
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfkalichargn70th171
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdfSteve Caron
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITmanoharjgpsolutions
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 

Recently uploaded (20)

Mastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptxMastering Project Planning with Microsoft Project 2016.pptx
Mastering Project Planning with Microsoft Project 2016.pptx
 
Key Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery RoadmapKey Steps in Agile Software Delivery Roadmap
Key Steps in Agile Software Delivery Roadmap
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Advantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptxAdvantages of Cargo Cloud Solutions.pptx
Advantages of Cargo Cloud Solutions.pptx
 
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptxUnderstanding Plagiarism: Causes, Consequences and Prevention.pptx
Understanding Plagiarism: Causes, Consequences and Prevention.pptx
 
Introduction to Firebase Workshop Slides
Introduction to Firebase Workshop SlidesIntroduction to Firebase Workshop Slides
Introduction to Firebase Workshop Slides
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
The Ultimate Guide to Performance Testing in Low-Code, No-Code Environments (...
 
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News UpdateVictoriaMetrics Q1 Meet Up '24 - Community & News Update
VictoriaMetrics Q1 Meet Up '24 - Community & News Update
 
eSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration toolseSoftTools IMAP Backup Software and migration tools
eSoftTools IMAP Backup Software and migration tools
 
Zer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdfZer0con 2024 final share short version.pdf
Zer0con 2024 final share short version.pdf
 
Effort Estimation Techniques used in Software Projects
Effort Estimation Techniques used in Software ProjectsEffort Estimation Techniques used in Software Projects
Effort Estimation Techniques used in Software Projects
 
2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards2024 DevNexus Patterns for Resiliency: Shuffle shards
2024 DevNexus Patterns for Resiliency: Shuffle shards
 
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdfPros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
Pros and Cons of Selenium In Automation Testing_ A Comprehensive Assessment.pdf
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
[ CNCF Q1 2024 ] Intro to Continuous Profiling and Grafana Pyroscope.pdf
 
Best Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh ITBest Angular 17 Classroom & Online training - Naresh IT
Best Angular 17 Classroom & Online training - Naresh IT
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 

WordPress for Modern PHP Developers with Version Control and Dependency Management