SlideShare a Scribd company logo
1 of 55
Download to read offline
Portable PHP
“All for one, one for all.”
Alexandre Dumas
Anatol Belski
PHP Specialist
November 2015
Interoperable PHP
Anatol Belski
@weltling
ab@php.net
#php.pecl@efnet
#winphp-dev@freenode
PHP 7.0 release manager
PHP core developer
OSS guy
Interoperable PHP
OSTC
• PHP
• Hyper-V
• Azure
• Samba
• Docker
Interoperable PHP
Interoperability
Hardware
Architecture
OS
Program
Interoperable PHP
A cross-platform program is …
- Hardware
- OS
- Architecture
- …
independent and can run under various
constellations.
Interoperable PHP
Topics
• Filesystem
• Time API
• Performance
• 32- vs 64-bit
• Thread safety
• Beyond
Interoperable PHP
Brief UNIX/Windows diff
UNIX/Linux
• gcc
• many libs
• processes
• C99
• Ext*, reiserFS, HFS, etc.
• UNIX permissions
Windows
• vc++
• core API + OSS libs
• threads
• C99 starting with VC12
• NTFS, FAT
• ACLs
Filesystem
Interoperable PHP
File permissions
UNIX/Linux
• chmod +x file
• chmod -r file
• chmod ugo-r file
• chmod +r file
• no equivalent
• no equivalent
• chmod +t somedir
Windows
• no equivalent
• icacls file /deny nick:(R)
• no equivalent
• icacls file /grant nick:(R)
• icacls file /grant nick:(GR,GW)
• icacls file /inheritance:e
• no equivalent
Interoperable PHP
File/process permissions
• UNIX/Linux
• chmod(), chown(), etc.
• process permissions are handled same way as file ones
• Windows
• icacls
• impersonation
• Unmapped UNIX users built-in SID mapping
Interoperable PHP
Access time
• ext3, ext4 and others
• noatime,nodiratime in /etc/fstab
• NTFS
• fsutil behavior query DisableLastAccess
• fsutil behavior set DisebleLastAccess 0
Interoperable PHP
NTFS streams
C:tmp> echo hello > foo.txt
C:tmp>echo world > foo.txt:bar.txt
C:tmp>dir /r foo.txt
Volume in drive C is SYSTEM
Volume Serial Number is AE0A-76BD
Directory of C:tmp
08/31/2015 11:50 PM 8 foo.txt
8 foo.txt:bar.txt:$DATA
1 File(s) 8 bytes
0 Dir(s) 59,944,050,688 bytes free
Interoperable PHP
PHP FS snippet 1
<?php
var_dump(file_exists("/"));
// Windows
bool(true)
//Linux
bool(true)
Interoperable PHP
PHP FS snippet 2
<?php
var_dump(dirname('/windows/system', 2));
// Windows
string(1) "“
//Linux
string(1) “/"
Interoperable PHP
PHP FS snippet 3
<?php
$f = fopen("file.txt", "w");
var_dump(unlink("file.txt"));
// Windows
Warning: unlink(file.txt): Permission denied in Command line code on line 1
bool(false)
//Linux
bool(true)
Interoperable PHP
PHP FS snippet 4
<?php
var_dump(fopen("some/directory", "r"));
// Windows
Warning: fopen(some/directory): failed to open stream: Permission denied in
Command line code on line 1
bool(false)
//Linux
resource(5) of type (stream)
Interoperable PHP
Some PHP FS functions
• readdir()
• glob()
• symlink()
• relapath()
• temp dir
• PHP extension paths
Time APIs
Interoperable PHP
System time APIs
• TSC
• RDTSC
• RDTSCP
• PM clock
• HPET timer
• POSIX clock
• WIN8+
Interoperable PHP
gettimeofday()
• UNIX/Linux
• us resolution + dependency on userspace tools
• Windows
• Win8+ with resolution <1us
Interoperable PHP
Time examples in PHP
• microtime() != microtime()
• uniqid() is based on usleep()
• usleep()
• timeout handling
Interoperable PHP
Timeout handling
<?php
set_time_limit(3);
/* do some work */
$until = microtime(true) + 2;
while($until > microtime(true));
sleep(1);
/* do some work */
$until = microtime(true) + 1;
while($until > microtime(true));
cho “reached here”;
PHP Performance
Interoperable PHP
PHP opcode caches
• Opcache
• WinCache
• APC
• APCu
Interoperable PHP
Performance PHP way
• QB extension
• Zephir
• Recki-ct
• Memcache, etc.
• Write good PHP 
Interoperable PHP
Performance compiler way
• PGO (VC++)
• LTO/FDO (gcc)
• Assembler
• Compiler intrinsics
Interoperable PHP
PGO
Instrument
• Produce an instrumented build
Train
• Run training scenarios
Optimize
• Produce optimized build using the training data
Interoperable PHP
PGO commands
• configure –enable-pgi
• nmake
• x64Releasephp.exe run-training-script.php
• nmake clean
• configure –enable-pgo
• nmake
Interoperable PHP
FDO commands
• make clean
• make prof-gen
• sapi/cli/php run-training-script.php
• make prof-clean
• make prof-use
64-bit
Interoperable PHP
Do you think this works?
$x = str_repeat("x", PHP_INT_MAX);
Interoperable PHP
64- vs 32-bit in PHP
64-bit
• In general slower
• 9.22337204 × 109 GB
RAM addressable
• 64-bit integers
• LFS
• 64-bit string length
32-bit
• In general faster
• Less than 2 GB RAM
addressable
• 32-bit integers
• 32-bit file operations
• 32-bit string length
Interoperable PHP
Types in PHP7
• zend_long for integers
• zend_ulong for numeric hashes
• size_t for string length
• zend_off_t for file offsets
• zend_stat_t for file status information
• See UPGRADING for more info
Interoperable PHP
64-bit affecting some functions
• stat()
• lstat()
• filesize()
• substr()
• ftell()
• fseek()
Treads vs. Processes
Interoperable PHP
Process
Program
code
OS
Processor
core #n
Interoperable PHP
Threads
Thread #3
Thread
#1
Thread
#2
Interoperable PHP
Process/Thread
Process single
threaded
stack
text
data
heap
Process multi
threaded
stack
stack
text
data
heap
Thread 1
Thread 2
Interoperable PHP
Treads vs processes
• Thread locking
• Shared memory
• security
• performance
Thread 1
Thread 2
static __thread int i = 0;
static int j = 0;
void
start_thread(void *dummy)
{
char hello[6];
char *world;
memcpy(hello, "hello", 5);
world = malloc(sizeof(char) * 5);
memcpy(world, "world", 5);
i++;
}
int main(int argc, char **argv)
{
pthread_t t0, t1;
rc = pthread_create(&t0, NULL,
start_thread, NULL);
rc = pthread_create(&t1, NULL,
start_thread, NULL);
return 0;
}
Interoperable PHP
PHP SAPIs
• Apache (worker, prefork, winnt)
• CGI/FastCGI/FPM (NGINX, IIS, Apache, etc.)
• Embed
• Many unsupported SAPIs removed in PHP7
Interoperable PHP
Apache mpm_prefork
Master
Child 1
Child 2
Child n
Interoperable PHP
Apache mpm_worker
Master
Child 1
Child 2
Child n
v
Thread 1
Thread 2
Thread n
v
v
Thread 1
Thread 2
Thread n
v
v
v
Thread 1
Thread 2
Thread n
v
v
v
v
Interoperable PHP
Apache mpm_winnt
v
Master Child
Thread 1
Thread 2
Thread n
v
vv
Interoperable PHP
void ***tsrm_ls in PHP 5
Interoperable PHP
TS layer in PHP 7
• Global thread specific pointer per binary unit
• Optional special setup to cache TS resource
• No additional tsrm_ls arguments in functions
Interoperable PHP
TLS
● __thread qualifier is not a standard
● __declspec(thread) is not a standard
● thread_local is C++11 standard (not in PHP)
● pthread_setspecific, TlsSetValue, etc.
Interoperable PHP
TLS types in PHP 7
TSRM/TSRM.h
#ifdef TSRM_WIN32
# define TSRM_TLS __declspec(thread)
#else
# define TSRM_TLS __thread
#endif
Zend/zend_types.h
#ifdef ZTS
#define ZEND_TLS static TSRM_TLS
#define ZEND_EXT_TLS TSRM_TLS
#else
#define ZEND_TLS static
#define ZEND_EXT_TLS
#endif
Interoperable PHP
TS or NTS with PHP?
TS
• Less RAM consuming
• Faster startup
• Less library
compatibility
• More complexity
• Slower processing
NTS
• More RAM consuming
• Slower startup
• More library
compatibility
• Less complexity
• Faster processing
Interoperable PHP
Some PHP core functions
• mt_rand()
• fork()
• chroot()
• setlocale()/localeconv()
• symlink()/link()
• fputcsv()
• mail()
• getenv()/putenv()
Interoperable PHP
C APIs implementations in PHP
snprintf sprintf spprintf strlcat strlcpy
glob sscanf strnatcmp strtod
gettimeofday usleep nanosleep
select opendir readdir rewinddir
flock socketpair syslog openlog
closelog ...
Questions?
Thanks for your
attention!
Interoperable PHP
Links
• https://msdn.microsoft.com/en-us/library/e7k32f4k.aspx
• http://blogs.msdn.com/b/vcblog/archive/2013/05/06/speeding-up-php-performance-for-your-application-using-profile-guided-optimization-
pgo.aspx
• https://msdn.microsoft.com/en-us/library/windows/desktop/aa364404%28v=vs.85%29.aspx
• https://wiki.php.net/rfc/removal_of_dead_sapis
• https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
• https://wiki.php.net/rfc/native-tls
• https://wiki.php.net/rfc/size_t_and_int64_next

More Related Content

What's hot

How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)
SATOSHI TAGOMORI
 

What's hot (20)

Net core
Net coreNet core
Net core
 
Mono Repo
Mono RepoMono Repo
Mono Repo
 
Opensourceman ( url for slides with animations https://goo.gl/R638tW )
Opensourceman ( url for slides with animations https://goo.gl/R638tW )Opensourceman ( url for slides with animations https://goo.gl/R638tW )
Opensourceman ( url for slides with animations https://goo.gl/R638tW )
 
How to create/improve OSS products and its community
How to create/improve OSS products and its communityHow to create/improve OSS products and its community
How to create/improve OSS products and its community
 
Dot Net Core
Dot Net CoreDot Net Core
Dot Net Core
 
Engage 2019: Introduction to Node-Red
Engage 2019: Introduction to Node-RedEngage 2019: Introduction to Node-Red
Engage 2019: Introduction to Node-Red
 
Nodejs basics
Nodejs basicsNodejs basics
Nodejs basics
 
Migrating .NET Application to .NET Core
Migrating .NET Application to .NET CoreMigrating .NET Application to .NET Core
Migrating .NET Application to .NET Core
 
Cross platform dotnet development using dotnet core
Cross platform dotnet development using dotnet coreCross platform dotnet development using dotnet core
Cross platform dotnet development using dotnet core
 
.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchester.NET Core Blimey! Windows Platform User Group, Manchester
.NET Core Blimey! Windows Platform User Group, Manchester
 
.Net Core
.Net Core.Net Core
.Net Core
 
.Net Core
.Net Core.Net Core
.Net Core
 
.Net Core - not your daddy's dotnet
.Net Core - not your daddy's dotnet.Net Core - not your daddy's dotnet
.Net Core - not your daddy's dotnet
 
Introduction to .NET Core
Introduction to .NET CoreIntroduction to .NET Core
Introduction to .NET Core
 
NWJS. Web on desktop
NWJS. Web on desktopNWJS. Web on desktop
NWJS. Web on desktop
 
How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)How to create/improve OSS product and its community (revised)
How to create/improve OSS product and its community (revised)
 
What's New in ASP.NET Core 2.0
What's New in ASP.NET Core 2.0What's New in ASP.NET Core 2.0
What's New in ASP.NET Core 2.0
 
Careerdays dev ops
Careerdays   dev opsCareerdays   dev ops
Careerdays dev ops
 
Continuous Delivery on a Modern Web Stack
Continuous Delivery on a Modern Web StackContinuous Delivery on a Modern Web Stack
Continuous Delivery on a Modern Web Stack
 
Comunicando nuestras apps con el mundo exterior
Comunicando nuestras apps con el mundo exteriorComunicando nuestras apps con el mundo exterior
Comunicando nuestras apps con el mundo exterior
 

Similar to Portable PHP

Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
DefconRussia
 

Similar to Portable PHP (20)

Interoperable PHP
Interoperable PHPInteroperable PHP
Interoperable PHP
 
Php internal architecture
Php internal architecturePhp internal architecture
Php internal architecture
 
posix.pdf
posix.pdfposix.pdf
posix.pdf
 
Php
PhpPhp
Php
 
PHP ITCS 323
PHP ITCS 323PHP ITCS 323
PHP ITCS 323
 
TAKING PHP SERIOUSLY - Keith Adams
TAKING PHP SERIOUSLY - Keith AdamsTAKING PHP SERIOUSLY - Keith Adams
TAKING PHP SERIOUSLY - Keith Adams
 
Golang
GolangGolang
Golang
 
Golang
GolangGolang
Golang
 
Php training100%placement-in-mumbai
Php training100%placement-in-mumbaiPhp training100%placement-in-mumbai
Php training100%placement-in-mumbai
 
Desktop Apps with PHP and Titanium
Desktop Apps with PHP and TitaniumDesktop Apps with PHP and Titanium
Desktop Apps with PHP and Titanium
 
FITC - Node.js 101
FITC - Node.js 101FITC - Node.js 101
FITC - Node.js 101
 
Cutting Back Processing Time
Cutting Back Processing TimeCutting Back Processing Time
Cutting Back Processing Time
 
PHP MySQL Workshop - facehook
PHP MySQL Workshop - facehookPHP MySQL Workshop - facehook
PHP MySQL Workshop - facehook
 
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilitiesVorontsov, golovko   ssrf attacks and sockets. smorgasbord of vulnerabilities
Vorontsov, golovko ssrf attacks and sockets. smorgasbord of vulnerabilities
 
Next .NET and C#
Next .NET and C#Next .NET and C#
Next .NET and C#
 
Ingesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmedIngesting hdfs intosolrusingsparktrimmed
Ingesting hdfs intosolrusingsparktrimmed
 
Hogy jussunk ki lezárt hálózatokból?
Hogy jussunk ki lezárt hálózatokból?Hogy jussunk ki lezárt hálózatokból?
Hogy jussunk ki lezárt hálózatokból?
 
introduction to node.js
introduction to node.jsintroduction to node.js
introduction to node.js
 
Powering up on PowerShell - BSides Greenville 2019
Powering up on PowerShell  - BSides Greenville 2019Powering up on PowerShell  - BSides Greenville 2019
Powering up on PowerShell - BSides Greenville 2019
 
Node.js 101 with Rami Sayar
Node.js 101 with Rami SayarNode.js 101 with Rami Sayar
Node.js 101 with Rami Sayar
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Portable PHP