Download - PHP Server-side Breakout
![Page 1: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/1.jpg)
SERVER SIDE BREAKOUTphp
Wednesday, November 2, 11
![Page 2: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/2.jpg)
5 YEARS AGO (2006)
PHP version 5.2.0 native JSON support
Wednesday, November 2, 11
![Page 3: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/3.jpg)
MODERN USAGE
77% of all websites
Wednesday, November 2, 11
![Page 4: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/4.jpg)
MODERN USAGE
Middleware
Wednesday, November 2, 11
![Page 5: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/5.jpg)
INTERFACES
RESTExt.Direct
Wednesday, November 2, 11
![Page 6: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/6.jpg)
REST
Great for APIsCross-domain
Status code messagesOne setup for all purposes
echo $json
Wednesday, November 2, 11
![Page 7: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/7.jpg)
REST
proxy: { type: 'rest', url: 'api/users' }
Wednesday, November 2, 11
![Page 8: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/8.jpg)
REST
Extra server setup may be neededDifficult concurrency (buffering)Requires access to php://input
Wednesday, November 2, 11
![Page 9: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/9.jpg)
EXT.DIRECT
OOB bufferingEffortless setup
API integration (RPC)Easier RPC role-based method distribution
return $array
Wednesday, November 2, 11
![Page 10: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/10.jpg)
EXT.DIRECT
Ext.ns("Ext.app"); Ext.app.REMOTING_API = { "url":"php\/router.php", "type":"remoting", "actions":{ "TestAction":[ {"name":"doEcho","len":1} ] }};
Wednesday, November 2, 11
![Page 11: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/11.jpg)
EXT.DIRECT
proxy: { type: 'direct', directFn: doEcho }
Wednesday, November 2, 11
![Page 12: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/12.jpg)
EXT.DIRECT
proxy: { type: 'direct',
api: { create : Rpc.users.Add, read : Rpc.users.List, update : Rpc.users.Update, delete : Rpc.users.Delete
}
Wednesday, November 2, 11
![Page 13: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/13.jpg)
EXT.DIRECT
Not cross-domain friendlyNeeds a router (s-s stack)
No file uploadingException stops execution
Wednesday, November 2, 11
![Page 14: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/14.jpg)
SAMPLE USAGE RESTFUL INTERFACE
Wednesday, November 2, 11
![Page 15: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/15.jpg)
EXT.DIRECT
Wednesday, November 2, 11
![Page 16: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/16.jpg)
JSON VS. JSONP
{ ‘name’ : ‘John’, ‘email’ : ‘[email protected]', ‘dob‘ : 19781213, ‘kids‘ : [‘Sarah’, ‘Norah’]}
Ext.util.JSONP.callback1({‘name’ : ‘John’,
‘email’ : ‘[email protected]', ‘dob‘ : 19781213, ‘kids‘ : [‘Sarah’, ‘Norah’]})
Wednesday, November 2, 11
![Page 17: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/17.jpg)
JSON VS. JSONP
$callback = $_REQUEST[“callback”];
$select = $db->select()->from('products');$stmt = $select->query();$result = $stmt->fetchAll();$output = json_encode($result);
if ($callback) { header('Content-Type: text/javascript'); echo $callback . '(' . $output . ');';} else { header('Content-Type: application/x-json'); echo $output;}
Wednesday, November 2, 11
![Page 18: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/18.jpg)
BIG APPS
Big apps
Wednesday, November 2, 11
![Page 19: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/19.jpg)
BIG APPS
MVCFat model - thin controller
Wednesday, November 2, 11
![Page 20: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/20.jpg)
BIG APPS
Abstracting
Wednesday, November 2, 11
![Page 21: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/21.jpg)
LOADING APP COMPONENTS
Ext.LoaderSencha command / jsbuilder on the fly
Wednesday, November 2, 11
![Page 22: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/22.jpg)
ENVIRONMENT
Apache
Wednesday, November 2, 11
![Page 23: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/23.jpg)
ENVIRONMENT
Apache+
Nginx reverse proxy
Wednesday, November 2, 11
![Page 24: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/24.jpg)
ENVIRONMENT
SetEnv APP_ENV "development"
$_SERVER['APP_ENV'])
Wednesday, November 2, 11
![Page 25: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/25.jpg)
ENVIRONMENT
MIME handling
JSONP : application/javascriptJSON : application/jsonappcache : text/cache-manifest
Wednesday, November 2, 11
![Page 26: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/26.jpg)
ENVIRONMENT
File structure
Wednesday, November 2, 11
![Page 27: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/27.jpg)
Wednesday, November 2, 11
![Page 28: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/28.jpg)
ENVIRONMENT
DB layout
Wednesday, November 2, 11
![Page 29: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/29.jpg)
TRADITIONAL RELATIONAL MODEL
Wednesday, November 2, 11
![Page 30: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/30.jpg)
CENTRALIZED RELATIONAL MODEL
Wednesday, November 2, 11
![Page 31: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/31.jpg)
Wednesday, November 2, 11
![Page 32: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/32.jpg)
FIREPHP
$logger = new Zend_Log();$writer = new Zend_Log_Writer_Firebug();$logger->addWriter($writer);Zend_Registry::set('logger',$logger);
Wednesday, November 2, 11
![Page 33: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/33.jpg)
FIREPHP
$select = $ssoDb->select() ->from('products');
$logger->log($select->__toString(), Zend_Log::INFO);$logger->log($data, Zend_Log::INFO);
Wednesday, November 2, 11
![Page 34: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/34.jpg)
BAD IDEAS
Enclose entire class in a single try/catch blockUse sleep to wait for another task/thread to finish
Setting global vars to return multiple valuesAltering framework files
Performing DB aggregate operations in PHPKeeping connections open
Wednesday, November 2, 11
![Page 35: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/35.jpg)
BAD IDEAS
Using self-made cyphers for encryptionClear text passwords, CC info, personal details (inc names)
Not checking for user credentials on every requestTrusting client-side input validation
Constructing sql queries by using concatenation Not using DB transactions on multiple changes
Direct access to files for download
Wednesday, November 2, 11
![Page 36: PHP Server-side Breakout](https://reader034.vdocuments.mx/reader034/viewer/2022052321/5555abb8d8b42a52568b493a/html5/thumbnails/36.jpg)
Grgur Grisogono@ggrgur
Wednesday, November 2, 11