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
 
Learning of Php and My SQL Tutorial | For Beginners
Learning of Php and My SQL Tutorial | For BeginnersLearning of Php and My SQL Tutorial | For Beginners
Learning of Php and My SQL Tutorial | For BeginnersRatnesh Pandey
 

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
 
Learning of Php and My SQL Tutorial | For Beginners
Learning of Php and My SQL Tutorial | For BeginnersLearning of Php and My SQL Tutorial | For Beginners
Learning of Php and My SQL Tutorial | For Beginners
 

Recently uploaded

Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyFrank van der Linden
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software DevelopersVinodh Ram
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningVitsRangannavar
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 

Recently uploaded (20)

Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Engage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The UglyEngage Usergroup 2024 - The Good The Bad_The Ugly
Engage Usergroup 2024 - The Good The Bad_The Ugly
 
Professional Resume Template for Software Developers
Professional Resume Template for Software DevelopersProfessional Resume Template for Software Developers
Professional Resume Template for Software Developers
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
cybersecurity notes for mca students for learning
cybersecurity notes for mca students for learningcybersecurity notes for mca students for learning
cybersecurity notes for mca students for learning
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 

WordPress for Modern PHP Developers with Version Control and Dependency Management