SlideShare a Scribd company logo
Olá SymfonyConOlá SymfonyCon
Lisboa!Lisboa!
File Storage forFile Storage for
ModernModern PHPPHP ApplicationsApplications
Hi, I'm Frank!Hi, I'm Frank!
@frankdejonge@frankdejonge
Free-lance DeveloperFree-lance Developer
++
Free-software DeveloperFree-software Developer
I18n Routing in 4.1I18n Routing in 4.1
Routing Speedup in 3.2Routing Speedup in 3.2
EventSauce.ioEventSauce.io
Event-sourcing LibraryEvent-sourcing Library
FlysystemFlysystem
Filesystem AbstractionFilesystem Abstraction
50.000.000 installs!50.000.000 installs!
FlysystemFlysystem
Filesystems Lisbon 2018
Filesystems Lisbon 2018
The things I've seen...The things I've seen...The things I've seen...The things I've seen...The things I've seen...
Filesystems Lisbon 2018
 FTP  FTP 
 FTP =   FTP =  
File storage forFile storage for modernmodern
PHP applications.PHP applications.
It depends!It depends!
(and that's the problem)(and that's the problem)
1. Filesystems
2. Modern Apps & FS
3. Choosing an FS
4. Storage in Code
How not to fail atHow not to fail at
filesystemsfilesystems..
What is aWhat is a
filesystem?filesystem?
Filesystems Lisbon 2018
FILESYSTEMS EVERYWHEREFILESYSTEMS EVERYWHEREFILESYSTEMS EVERYWHEREFILESYSTEMS EVERYWHEREFILESYSTEMS EVERYWHERE
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Common ProblemsCommon Problems
and/or Symptomsand/or Symptoms
Unstructured FilesystemUnstructured Filesystem
The "/uploads/" directory.The "/uploads/" directory.
Are these files used?Are these files used?
Can I delete these files?Can I delete these files?
Where did these filesWhere did these files
come from?come from?
Filesystems Lisbon 2018
Can we changeCan we change
filesystems?filesystems?
Filesystems Lisbon 2018
But is it fine?But is it fine?But is it fine?But is it fine?But is it fine?
Assumptions
Creating a feature
Assumptions
Creating a feature
Experience with tools
Feature created
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Actual Usage
Feature Adoption
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Actual Usage
Feature Adoption
Experience
Actual Problems
Filesystems Lisbon 2018
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Actual Usage
Feature Adoption
Experience
Actual Problems
Filesystems Lisbon 2018
What is aWhat is a
filesystem, actually?filesystem, actually?
A filesystem is a
system that controls
how data is stored
and retrieved.
A system is a
collection of parts,
conventions, and
interactions, forming
a complex whole.
So, what is aSo, what is a
filesystem?filesystem?
A filesystem is a system
that provides a collection
of parts, conventions, and
interactions, forming a
complex whole that
controls how data is
stored and retrieved.
Filesystems Lisbon 2018
Something you use toSomething you use to
store and retrieve data.store and retrieve data.
src/
Filesystem.php
AdapterInterface.php
tests/
Filesystem.php
AdapterInterface.php
src/Filesystem.php
src/AdapterInterface.php
tests/Filesystem.php
tests/AdapterInterface.php
Structure types:Structure types:
Nested                        or                        Linear
Nested filesystemsNested filesystems
Are very common.
Your desktop has it.
Have directories
which have files and more directories.
Linear filesystemLinear filesystem
Are like key/value stores
only have files
require a different approach.
are very "cloud"
Filesystem OfferingFilesystem Offering
FS = NASFS = NAS
AWS Volume |AWS Volume | Digital Ocean BlobDigital Ocean Blob
StorageStorage | Gluster FS || Gluster FS | CephCeph
FS + CDNFS + CDN
AWS S3 |AWS S3 | Digital Ocean SpacesDigital Ocean Spaces
Rackspace Cloud Files |Rackspace Cloud Files | GoogleGoogle
Cloud StorageCloud Storage
FS + SharingFS + Sharing
Dropbox |Dropbox | Box.comBox.com || Google DriveGoogle Drive
Microsoft OneDriveMicrosoft OneDrive
FS + Not Really a FSFS + Not Really a FS
WebDAV |WebDAV | MongoDB GridFSMongoDB GridFS
PostgreSQL Large Object StoragePostgreSQL Large Object Storage
What isWhat is NOTNOT
a filesystem?a filesystem?
Content Distribution NetworkContent Distribution Network
Streaming ServerStreaming Server
File Sharing ServiceFile Sharing Service
Media ServerMedia Server
File ManagerFile Manager
Web ServerWeb Server
DatabaseDatabase
Filesystems Lisbon 2018
Ryan Singer (2010)Ryan Singer (2010)
So much complexity
in software comes
from trying to make
one thing do two
things.
Frank de Jonge (right now)Frank de Jonge (right now)
Stop trying to make a
filesystem do 100
things.
Create
Read
Update
Delete
Create
Read
Update
Delete
Inspect
List
CRUDCRUDLILI™™
Filesystems and PHP.Filesystems and PHP.
$result = file_put_contents($location, $contents);
$contents = file_get_contents($location);
unlink($location);
$timestamp = mtime($location);
$mimetype = (new Finfo(FILEINFO_MIME_TYPE))->file($location);
glob($location . '/*'); // ?
scandir($location); // ?
readdir(opendir($location));
// Or...
array_map('normalize_fileinfo',
iterator_to_array(new DirectoryIterator($location)));
// Or...
array_map('normalize_fileinfo',
iterator_to_array(new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($location))));
WATWATWATWATWAT
$resource = fopen($src, 'r+');
$handle = fopen($dest, 'w+');
while ( ! feof($resource)) {
$chunk = fread($resource, 1024);
fwrite($handle, $chunk, 1024);
}
$result = fclose($handle);
fclose($resource);
$resource = fopen($src, 'r+');
if ($resource === false) handle_error(); //
$handle = fopen($dest, 'w+');
if ($handle === false) handle_error(); //
while ( ! feof($resource)) {
$chunk = fread($resource, 1024);
if ($chunk === false) handle_error(); //
$writeResult = fwrite($handle, $chunk, 1024);
if ($writeResult === false) handle_error(); //
}
$result = fclose($handle);
if ($result === false) handle_error(); //
$closeResult = fclose($resource);
if ($closeResult === false) handle_error(); //
WATWATWATWATWAT
/**
* Why not just use .... ?
*/
copy($src, $dest);
use Flysystemuse Flysystem
for file storagefor file storage
Uniform APIUniform API
  
use LeagueFlysystemAdapterLocal;
$adapter = new Local(__DIR__.'/path/to/dir');
$filesystem = new Filesystem($adapter);
$filesystem->write($destination, $contents);
$filesystem->read($location);
$filesystem->update($destination, $contents);
$filesystem->listContents($location, $recursive);
$filesystem->delete($location);
$filesystem->getSize($location);
use LeagueFlysystemAwsS3v2AwsS3Adapter;
$adapter = new AwsS3Adapter($client, 'bucket-name');
$filesystem = new Filesystem($adapter);
$filesystem->write($destination, $contents);
$filesystem->read($location);
$filesystem->update($destination, $contents);
$filesystem->listContents($location, $recursive);
$filesystem->delete($location);
$filesystem->getSize($location);
use LeagueFlysystemAdapterFtp;
$adapter = new Ftp($ftpSettings);
$filesystem = new Filesystem($adapter);
$filesystem->write($destination, $contents);
$filesystem->read($location);
$filesystem->update($destination, $contents);
$filesystem->listContents($location, $recursive);
$filesystem->delete($location);
$filesystem->getSize($location);
$resource = $remoteFs->readStream('some/path.mp4');
$localFs->writeStream('another/path.mp4', $resource);
fclose($resource);
$resource = $remoteFs->readStream('some/path.mp4');
$localFs->writeStream('another/path.mp4', $resource);
fclose($resource);
// do stuff
$resource = $localFs->readStream('another/path.mp4');
$remoteFs->writeStream('some/path.mp4', $resource);
fclose($resource);
$resource = $azure->readStream('some/path.mp4');
$aws->writeStream('another/path.mp4', $resource);
fclose($resource);
Relative PathsRelative Paths
  
domain/concern.txt
domain/concern.txt
/configuration/
/new/path/
use LeagueFlysystemAdapterLocal;
// Configuration
$adapter = new Local('/configuration/');
$filesystem = new Filesystem($adapter);
// Usage
$filesystem->writeStream('financial-reports/latest.csv', $resource);
use LeagueFlysystemAdapterLocal;
// Configuration
$adapter = new Local('/new/path/');
$filesystem = new Filesystem($adapter);
// Usage
$filesystem->writeStream('financial-reports/latest.csv', $resource);
use LeagueFlysystemAwsS3v2AwsS3Adapter;
// Configuration
$adapter = new AwsS3Adapter($client, 'bucket-name');
$filesystem = new Filesystem($adapter);
// Usage
$filesystem->writeStream('financial-reports/latest.csv', $resource);
Flysystem =Flysystem =
No Vendor Lock-inNo Vendor Lock-in
Isolation +Isolation +
Encapsulation +Encapsulation +
Predictability +Predictability +
PortabilityPortability
Don't use Flysystem for everything.Don't use Flysystem for everything.
Choosing anotherChoosing another
FilesystemFilesystem
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Using the localUsing the local
filesystem isfilesystem is
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Why?Why?
We want to scale (horizontally).
... so, we want stateless apps.
We don't have to serve files ourselves.
Share files across multiple application.
We're not askingWe're not asking
the rightthe right questionsquestions..
Where?Where?
On Premise?On Premise?On Premise?On Premise?On Premise?
"Cloud""Cloud""Cloud""Cloud""Cloud"
Still a Computer™Still a Computer™Still a Computer™Still a Computer™Still a Computer™
Who will doWho will do
maintenance?maintenance?
How will weHow will we
use the files?use the files?
Why are weWhy are we
going to store it?going to store it?
How long are weHow long are we
going to keep the files?going to keep the files?
How big willHow big will
the files be?the files be?
Needs > CapabilitiesNeeds > Capabilities
NeedNeed
Something you requireSomething you require
CapabilityCapability
What something can doWhat something can do
Write Down!Write Down!
- Agile Manifesto- Agile Manifesto
Working Software
over Comprehensive
Documentation
Filesystems Lisbon 2018
  +    +  
ADRADR
Architecture Decision RecordArchitecture Decision Record
ContextContext
The team uses AWS / AzureThe team uses AWS / Azure
ContextContext
We expect massive storage growthWe expect massive storage growth
RequirementsRequirements
Data must be stored on premiseData must be stored on premise
RequirementsRequirements
Data must be stored in the EUData must be stored in the EU
DecisionDecision
We'll use AWS S3 / Azure BlobWe'll use AWS S3 / Azure Blob
StorageStorage
ConsequencesConsequences
Operations of files will requireOperations of files will require
download and re-upload.download and re-upload.
Share ResponsibilitiesShare Responsibilities
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Actual Usage
Feature Adoption
Experience
Actual Problems
Create Use-Case
Driven Storage
Models
interface ProfilePictureStorage {
/**
* @param resource $profilePicture
*/
public function store(User $user, $profilePicture);
}
interface FinancialReportStorage {
/**
* @param resource $reportFile
*/
public function store(Organization $organization, $reportFile);
}
class FilesystemFinancialReportStorage
implements FinancialReportStorage {
private $filesystem;
public function __construct(FilesystemInterface $filesystem) {
$this->filesystem = $filesystem;
}
public function store(Organization $organization, $reportFile)
{
$path = sprintf('%s/%s/financial-report.csv',
$organization->id()->toString(),
date('Y/m/d'));
$this->filesystem->writeStream($path, $reportFile);
}
}
Isolate your use-case.Isolate your use-case.
Assumptions
Creating a feature
Experience with tools
Feature created
Initial usage
Put in production
Actual Usage
Feature Adoption
Experience
Actual Problems
Document experiencesDocument experiences
When stuff goesWhen stuff goes
(Blameless) Post-Mortem(Blameless) Post-Mortem
Storage was unavailableStorage was unavailable
Full diskFull disk
Deleted old filesDeleted old files
manuallymanually
Automated cleanupAutomated cleanup
routinesroutines
# What happened# What happened
# What caused it# What caused it
# What fixed it# What fixed it
# How to prevent# How to prevent
ResuméResumé
Use FlysystemUse Flysystem
Keep it simpleKeep it simple
Documents requirementsDocuments requirements
Document decisionsDocument decisions
(using ADR)(using ADR)
CreateCreate specificspecific storagestorage
classes per use-caseclasses per use-case
Use generic solutions forUse generic solutions for
generic problemsgeneric problems
Use special solutions forUse special solutions for
special problemsspecial problems
Filesystems Lisbon 2018
Filesystems Lisbon 2018
Gluster FSGluster FS
Gluster FSGluster FS
on Kuberneteson Kubernetes
Persistent VolumePersistent Volume
on Gluster FSon Gluster FS
on Kuberneteson Kubernetes
AA
ServiceService
on Kuberneteson Kubernetes
with PersistentVolumewith PersistentVolume
on Gluster FSon Gluster FS
on Kuberneteson Kubernetes
So what do I do?So what do I do?
It depends!It depends!
Thank you for listening!Thank you for listening!
@frankdejonge@frankdejonge

More Related Content

What's hot (18)

Perforce Object and Record Model
Perforce Object and Record Model  Perforce Object and Record Model
Perforce Object and Record Model
Perforce
 
On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappers
Positive Hack Days
 
Chap 5 php files part-2
Chap 5 php files   part-2Chap 5 php files   part-2
Chap 5 php files part-2
monikadeshmane
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
joshua.mcadams
 
Php file handling in Hindi
Php file handling in Hindi Php file handling in Hindi
Php file handling in Hindi
Vipin sharma
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
Sebastian Marek
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent tests
Frank Kleine
 
Introducing PHP Latest Updates
Introducing PHP Latest UpdatesIntroducing PHP Latest Updates
Introducing PHP Latest Updates
Iftekhar Eather
 
Apache Hacks
Apache HacksApache Hacks
Apache Hacks
Beth Skwarecki
 
Bioinformatics p5-bioperlv2014
Bioinformatics p5-bioperlv2014Bioinformatics p5-bioperlv2014
Bioinformatics p5-bioperlv2014
Prof. Wim Van Criekinge
 
php file uploading
php file uploadingphp file uploading
php file uploading
Purushottam Kumar
 
What's new in PHP 5.5
What's new in PHP 5.5What's new in PHP 5.5
What's new in PHP 5.5
Tom Corrigan
 
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuMengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Alferizhy Chalter
 
Ruby on Rails: Tasty Burgers
Ruby on Rails: Tasty BurgersRuby on Rails: Tasty Burgers
Ruby on Rails: Tasty Burgers
Aaron Patterson
 
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner) Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet
 
Bioinformatica 10-11-2011-p6-bioperl
Bioinformatica 10-11-2011-p6-bioperlBioinformatica 10-11-2011-p6-bioperl
Bioinformatica 10-11-2011-p6-bioperl
Prof. Wim Van Criekinge
 
Raspberry pi Part 25
Raspberry pi Part 25Raspberry pi Part 25
Raspberry pi Part 25
Techvilla
 
rtwerewr
rtwerewrrtwerewr
rtwerewr
esolinhighered
 
Perforce Object and Record Model
Perforce Object and Record Model  Perforce Object and Record Model
Perforce Object and Record Model
Perforce
 
On secure application of PHP wrappers
On secure application  of PHP wrappersOn secure application  of PHP wrappers
On secure application of PHP wrappers
Positive Hack Days
 
Chap 5 php files part-2
Chap 5 php files   part-2Chap 5 php files   part-2
Chap 5 php files part-2
monikadeshmane
 
Utility Modules That You Should Know About
Utility Modules That You Should Know AboutUtility Modules That You Should Know About
Utility Modules That You Should Know About
joshua.mcadams
 
Php file handling in Hindi
Php file handling in Hindi Php file handling in Hindi
Php file handling in Hindi
Vipin sharma
 
vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking vfsStream - effective filesystem mocking
vfsStream - effective filesystem mocking
Sebastian Marek
 
vfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent testsvfsStream - a better approach for file system dependent tests
vfsStream - a better approach for file system dependent tests
Frank Kleine
 
Introducing PHP Latest Updates
Introducing PHP Latest UpdatesIntroducing PHP Latest Updates
Introducing PHP Latest Updates
Iftekhar Eather
 
What's new in PHP 5.5
What's new in PHP 5.5What's new in PHP 5.5
What's new in PHP 5.5
Tom Corrigan
 
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntuMengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Mengembalikan data yang terhapus atau rusak pada hardisk menggunakan ubuntu
Alferizhy Chalter
 
Ruby on Rails: Tasty Burgers
Ruby on Rails: Tasty BurgersRuby on Rails: Tasty Burgers
Ruby on Rails: Tasty Burgers
Aaron Patterson
 
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner) Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet Camp Paris 2015: Power of Puppet 4 (Beginner)
Puppet
 
Raspberry pi Part 25
Raspberry pi Part 25Raspberry pi Part 25
Raspberry pi Part 25
Techvilla
 

Similar to Filesystems Lisbon 2018 (20)

Filesystem Abstraction with Flysystem
Filesystem Abstraction with FlysystemFilesystem Abstraction with Flysystem
Filesystem Abstraction with Flysystem
Frank de Jonge
 
Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023
Mark Niebergall
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023
Mark Niebergall
 
Into The Wonderful
Into The WonderfulInto The Wonderful
Into The Wonderful
Matt Wood
 
File handling in C++
File handling in C++File handling in C++
File handling in C++
Hitesh Kumar
 
Downloading a Billion Files in Python
Downloading a Billion Files in PythonDownloading a Billion Files in Python
Downloading a Billion Files in Python
James Saryerwinnie
 
Introduction to PowerShell
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
Boulos Dib
 
Writing and using php streams and sockets tek11
Writing and using php streams and sockets   tek11Writing and using php streams and sockets   tek11
Writing and using php streams and sockets tek11
Elizabeth Smith
 
php fundamental
php fundamentalphp fundamental
php fundamental
zalatarunk
 
php
phpphp
php
Ramki Kv
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of php
pooja bhandari
 
Writing and using php streams and sockets
Writing and using php streams and socketsWriting and using php streams and sockets
Writing and using php streams and sockets
Elizabeth Smith
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Nate Abele
 
Php mysql training-in-mumbai
Php mysql training-in-mumbaiPhp mysql training-in-mumbai
Php mysql training-in-mumbai
Unmesh Baile
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Synapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on phpSynapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on php
SynapseindiaComplaints
 
Synapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on phpSynapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on php
SynapseindiaComplaints
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
Jeroen van Dijk
 
object oriented programming in PHP & Functions
object oriented programming in PHP & Functionsobject oriented programming in PHP & Functions
object oriented programming in PHP & Functions
BackiyalakshmiVenkat
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
Alessandro Franceschi
 
Filesystem Abstraction with Flysystem
Filesystem Abstraction with FlysystemFilesystem Abstraction with Flysystem
Filesystem Abstraction with Flysystem
Frank de Jonge
 
Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023Filesystem Management with Flysystem - php[tek] 2023
Filesystem Management with Flysystem - php[tek] 2023
Mark Niebergall
 
Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023Filesystem Management with Flysystem at PHP UK 2023
Filesystem Management with Flysystem at PHP UK 2023
Mark Niebergall
 
Into The Wonderful
Into The WonderfulInto The Wonderful
Into The Wonderful
Matt Wood
 
File handling in C++
File handling in C++File handling in C++
File handling in C++
Hitesh Kumar
 
Downloading a Billion Files in Python
Downloading a Billion Files in PythonDownloading a Billion Files in Python
Downloading a Billion Files in Python
James Saryerwinnie
 
Introduction to PowerShell
Introduction to PowerShellIntroduction to PowerShell
Introduction to PowerShell
Boulos Dib
 
Writing and using php streams and sockets tek11
Writing and using php streams and sockets   tek11Writing and using php streams and sockets   tek11
Writing and using php streams and sockets tek11
Elizabeth Smith
 
php fundamental
php fundamentalphp fundamental
php fundamental
zalatarunk
 
Php introduction with history of php
Php introduction with history of phpPhp introduction with history of php
Php introduction with history of php
pooja bhandari
 
Writing and using php streams and sockets
Writing and using php streams and socketsWriting and using php streams and sockets
Writing and using php streams and sockets
Elizabeth Smith
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Nate Abele
 
Php mysql training-in-mumbai
Php mysql training-in-mumbaiPhp mysql training-in-mumbai
Php mysql training-in-mumbai
Unmesh Baile
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
Synapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on phpSynapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on php
SynapseindiaComplaints
 
Synapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on phpSynapseindia reviews sharing intro on php
Synapseindia reviews sharing intro on php
SynapseindiaComplaints
 
The Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/PressThe Enterprise Wor/d/thy/Press
The Enterprise Wor/d/thy/Press
Jeroen van Dijk
 
object oriented programming in PHP & Functions
object oriented programming in PHP & Functionsobject oriented programming in PHP & Functions
object oriented programming in PHP & Functions
BackiyalakshmiVenkat
 
Developing IT infrastructures with Puppet
Developing IT infrastructures with PuppetDeveloping IT infrastructures with Puppet
Developing IT infrastructures with Puppet
Alessandro Franceschi
 

Recently uploaded (20)

Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptxBesu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Rajdeep Chakraborty
 
816111728-IELTS-WRITING test óft-PPT.pptx
816111728-IELTS-WRITING test óft-PPT.pptx816111728-IELTS-WRITING test óft-PPT.pptx
816111728-IELTS-WRITING test óft-PPT.pptx
787mianahmad
 
The Business Dynamics of Quick Commerce.pdf
The Business Dynamics of Quick Commerce.pdfThe Business Dynamics of Quick Commerce.pdf
The Business Dynamics of Quick Commerce.pdf
RDinuRao
 
Effects of physical activity, exercise and sedentary behaviors to
Effects of physical activity, exercise and sedentary behaviors toEffects of physical activity, exercise and sedentary behaviors to
Effects of physical activity, exercise and sedentary behaviors to
DancanNyabuto
 
2. Asexual propagation of fruit crops and .pptx
2. Asexual propagation of fruit crops and .pptx2. Asexual propagation of fruit crops and .pptx
2. Asexual propagation of fruit crops and .pptx
aschenakidawit1
 
NASIG ISSN 2025 updated for the_4-30meeting.pptx
NASIG ISSN 2025 updated for the_4-30meeting.pptxNASIG ISSN 2025 updated for the_4-30meeting.pptx
NASIG ISSN 2025 updated for the_4-30meeting.pptx
reine1
 
Key Elements of a Procurement Plan.docx.
Key Elements of a Procurement Plan.docx.Key Elements of a Procurement Plan.docx.
Key Elements of a Procurement Plan.docx.
NeoRakodu
 
kurtlewin theory of motivation -181226082203.pptx
kurtlewin theory of motivation -181226082203.pptxkurtlewin theory of motivation -181226082203.pptx
kurtlewin theory of motivation -181226082203.pptx
TayyabaSiddiqui12
 
A Bot Identification Model and Tool Based on GitHub Activity Sequences
A Bot Identification Model and Tool Based on GitHub Activity SequencesA Bot Identification Model and Tool Based on GitHub Activity Sequences
A Bot Identification Model and Tool Based on GitHub Activity Sequences
natarajan8993
 
Speech 2-Unity in Diversity, Strength in Solidarity
Speech 2-Unity in Diversity, Strength in SolidaritySpeech 2-Unity in Diversity, Strength in Solidarity
Speech 2-Unity in Diversity, Strength in Solidarity
Noraini Yunus
 
2025-05-04 A New Day Dawns 03 (shared slides).pptx
2025-05-04 A New Day Dawns 03 (shared slides).pptx2025-05-04 A New Day Dawns 03 (shared slides).pptx
2025-05-04 A New Day Dawns 03 (shared slides).pptx
Dale Wells
 
Reflections on an ngo peace conference in zimbabwe
Reflections on an ngo peace conference in zimbabweReflections on an ngo peace conference in zimbabwe
Reflections on an ngo peace conference in zimbabwe
jujuaw05
 
Bidding World Conference 2027 - NSGF Mexico.pdf
Bidding World Conference 2027 - NSGF Mexico.pdfBidding World Conference 2027 - NSGF Mexico.pdf
Bidding World Conference 2027 - NSGF Mexico.pdf
ISGF - International Scout and Guide Fellowship
 
Profit Growth Drivers for Small Business.pdf
Profit Growth Drivers for Small Business.pdfProfit Growth Drivers for Small Business.pdf
Profit Growth Drivers for Small Business.pdf
TheodoreHawkins
 
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
ASHISHKUMAR504404
 
Bidding World Conference 2027 - Ghana.pptx
Bidding World Conference 2027 - Ghana.pptxBidding World Conference 2027 - Ghana.pptx
Bidding World Conference 2027 - Ghana.pptx
ISGF - International Scout and Guide Fellowship
 
Wood Age and Trees of life - talk at Newcastle City Library
Wood Age and Trees of life - talk at Newcastle City LibraryWood Age and Trees of life - talk at Newcastle City Library
Wood Age and Trees of life - talk at Newcastle City Library
Woods for the Trees
 
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvvBasic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
hkthmrz42n
 
Setup & Implementation of OutSystems Cloud Connector ODC
Setup & Implementation of OutSystems Cloud Connector ODCSetup & Implementation of OutSystems Cloud Connector ODC
Setup & Implementation of OutSystems Cloud Connector ODC
outsystemspuneusergr
 
ICONX - Presentation - Mining RACE - english - international
ICONX - Presentation - Mining RACE - english - internationalICONX - Presentation - Mining RACE - english - international
ICONX - Presentation - Mining RACE - english - international
Bitcoin Mining RACE
 
Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptxBesu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Besu Shibpur Enquesta 2012 Intra College General Quiz Finals.pptx
Rajdeep Chakraborty
 
816111728-IELTS-WRITING test óft-PPT.pptx
816111728-IELTS-WRITING test óft-PPT.pptx816111728-IELTS-WRITING test óft-PPT.pptx
816111728-IELTS-WRITING test óft-PPT.pptx
787mianahmad
 
The Business Dynamics of Quick Commerce.pdf
The Business Dynamics of Quick Commerce.pdfThe Business Dynamics of Quick Commerce.pdf
The Business Dynamics of Quick Commerce.pdf
RDinuRao
 
Effects of physical activity, exercise and sedentary behaviors to
Effects of physical activity, exercise and sedentary behaviors toEffects of physical activity, exercise and sedentary behaviors to
Effects of physical activity, exercise and sedentary behaviors to
DancanNyabuto
 
2. Asexual propagation of fruit crops and .pptx
2. Asexual propagation of fruit crops and .pptx2. Asexual propagation of fruit crops and .pptx
2. Asexual propagation of fruit crops and .pptx
aschenakidawit1
 
NASIG ISSN 2025 updated for the_4-30meeting.pptx
NASIG ISSN 2025 updated for the_4-30meeting.pptxNASIG ISSN 2025 updated for the_4-30meeting.pptx
NASIG ISSN 2025 updated for the_4-30meeting.pptx
reine1
 
Key Elements of a Procurement Plan.docx.
Key Elements of a Procurement Plan.docx.Key Elements of a Procurement Plan.docx.
Key Elements of a Procurement Plan.docx.
NeoRakodu
 
kurtlewin theory of motivation -181226082203.pptx
kurtlewin theory of motivation -181226082203.pptxkurtlewin theory of motivation -181226082203.pptx
kurtlewin theory of motivation -181226082203.pptx
TayyabaSiddiqui12
 
A Bot Identification Model and Tool Based on GitHub Activity Sequences
A Bot Identification Model and Tool Based on GitHub Activity SequencesA Bot Identification Model and Tool Based on GitHub Activity Sequences
A Bot Identification Model and Tool Based on GitHub Activity Sequences
natarajan8993
 
Speech 2-Unity in Diversity, Strength in Solidarity
Speech 2-Unity in Diversity, Strength in SolidaritySpeech 2-Unity in Diversity, Strength in Solidarity
Speech 2-Unity in Diversity, Strength in Solidarity
Noraini Yunus
 
2025-05-04 A New Day Dawns 03 (shared slides).pptx
2025-05-04 A New Day Dawns 03 (shared slides).pptx2025-05-04 A New Day Dawns 03 (shared slides).pptx
2025-05-04 A New Day Dawns 03 (shared slides).pptx
Dale Wells
 
Reflections on an ngo peace conference in zimbabwe
Reflections on an ngo peace conference in zimbabweReflections on an ngo peace conference in zimbabwe
Reflections on an ngo peace conference in zimbabwe
jujuaw05
 
Profit Growth Drivers for Small Business.pdf
Profit Growth Drivers for Small Business.pdfProfit Growth Drivers for Small Business.pdf
Profit Growth Drivers for Small Business.pdf
TheodoreHawkins
 
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
THE SEXUAL HARASSMENT OF WOMAN AT WORKPLACE (PREVENTION, PROHIBITION & REDRES...
ASHISHKUMAR504404
 
Wood Age and Trees of life - talk at Newcastle City Library
Wood Age and Trees of life - talk at Newcastle City LibraryWood Age and Trees of life - talk at Newcastle City Library
Wood Age and Trees of life - talk at Newcastle City Library
Woods for the Trees
 
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvvBasic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
Basic.pptxsksdjsdjdvkfvfvfvfvfvfvfvfvfvvvv
hkthmrz42n
 
Setup & Implementation of OutSystems Cloud Connector ODC
Setup & Implementation of OutSystems Cloud Connector ODCSetup & Implementation of OutSystems Cloud Connector ODC
Setup & Implementation of OutSystems Cloud Connector ODC
outsystemspuneusergr
 
ICONX - Presentation - Mining RACE - english - international
ICONX - Presentation - Mining RACE - english - internationalICONX - Presentation - Mining RACE - english - international
ICONX - Presentation - Mining RACE - english - international
Bitcoin Mining RACE
 

Filesystems Lisbon 2018