martin kruliš 19. 3. 2015 by martin kruliš (v1.0)1
TRANSCRIPT
by Martin Kruliš (v1.0) 1
Files and FilesystemMartin Kruliš
19. 3. 2015
by Martin Kruliš (v1.0) 2
Low Level C-like API◦ fopen(), fread(), fwrite(), fclose(), …◦ Data are treated as strings
Note that per-byte processing is extremely slow
File-wide Operations◦ fpassthru(), readfile() – whole file is spilled to
the output◦ file_get_contents(), file_put_contents()
Read/write the entire file to/from a string◦ file() – reads entire file as an array of lines
19. 3. 2015
Working with Files
by Martin Kruliš (v1.0) 3
POSIX Based API◦ Only partial functionality on non-POSIX OSes◦ touch() – sets current time to a file◦ tmpfile() – creates temporary file◦ rename(), unlink() – unlink ~ delete◦ mkdir(), rmdir() – make/remove dir
Synchronization Issues◦ POSIX atomic operations (append, mkdir, …)◦ Advisory file locking mechanism – flock()
Locks are bounded to processes, multi-threaded web server need not guarantee sync. between PHP scripts
19. 3. 2015
File System
by Martin Kruliš (v1.0) 4
File Properties (Size, Type, Creation Time, …)◦ Dedicated functions for some properties
filesize(), filetype(), filectime()◦ Reading all properties at once
stat(), lstat(), fstat()
POSIX Access Rights (rwx)◦ Testing functions
is_file(), is_readable(), is_writeable(), …◦ Modification of rights and owner
chmod(), chown(), chgrp()
19. 3. 2015
File Properties and Rights
by Martin Kruliš (v1.0) 5
Traversing Directories◦ Iterative – opendir(), readdir(), closedir()◦ scandir() – returns array with directory contents◦ dir() – returns object of Directory class
Directory Paths◦ glob() – expanding wildcards◦ dirname(), basename() – get part of path◦ pathinfo() – parses path and return components◦ realpath() – converts symbolic to real path
Absolute path without links, ./, and ../
19. 3. 2015
Directories and Paths
by Martin Kruliš (v1.0) 6
CSV Files◦ Comma (semicolon) separated values◦ API uses file handlers from fopen()
fgetcsv() – reads one CSV line fputcsv() – writes one CSV line
INI Files◦ Configuration files with “name = value” items◦ parse_ini_file() – reads the entire file and
yields an associative array Optionally divides the data to sections
19. 3. 2015
Formatted Files
by Martin Kruliš (v1.0) 7
ZIP Files (*.zip)◦ Rather complicated (ZIP is multi-file container)◦ Represented by ZipArchive class
Zlib – gzip library (*.gz)◦ Similar functions to standard C-like API
gzopen(), gzread(), gzwrite(), gzclose(), … BZip Library (*.bz2)
◦ Similar to Zlib (bzopen(), …) Other libraries are available (RAR, LZF, …)
◦ TAR only as PECL extension
19. 3. 2015
Compression
by Martin Kruliš (v1.0) 8
XML and JSONMartin Kruliš
19. 3. 2015
When confronted with a problem, some people thinks: “Hey, I’ll use
XML!”Then they have two problems…
by Martin Kruliš (v1.0) 9
Parsing Process◦ Loading XML from text file into memory structures
Simple API for XML (SAX)◦ The document is processed sequentially◦ Important “events” are reported to the user
Opening/closing an element, attribute found, … Document Object Model (DOM)
◦ Tree-based structure with object oriented API◦ Nodes of the tree represent elements, attributes,
text content, ….◦ More suitable for mutable documents
19. 3. 2015
Parsing XML
by Martin Kruliš (v1.0) 10
XPath Query Language◦ Inspired by filesys. paths (elements ~ directories)◦ Various types of queries that yield
Boolean, number, string, or set of DOM nodes◦ Quite expressive (num. operations, conditions, …)
XSLT Transformations◦ XSLT describes transformation of one XML
document to another (or to HTML, or to plain-text) XSLT rules are stored in XML document
◦ Uses XPath for search queries◦ Turing complete language
19. 3. 2015
XPath and XSLT
by Martin Kruliš (v1.0) 11
XML Utilities in PHP◦ SAX parser◦ DOM API and parser◦ XPath query engine (over a DOM API)◦ XSLT processor◦ PHP-specific Simple XML API (simplified DOM)
Most of the API is object oriented◦ DOM is object oriented by design◦ Simple XML is based on specific properties of PHP
classes (e.g., iterators or magic methods)
19. 3. 2015
XML and PHP
by Martin Kruliš (v1.0) 12
Event Driven Parsing◦ The document is processed as a stream
In a single call of xml_parse()◦ Important encounters are reported via callbacks
xml_set_element_handler() xml_set_character_handler() …
19. 3. 2015
PHP SAX Parser
Example 1
by Martin Kruliš (v1.0) 13
Document Object Model in PHP◦ Set of PHP-native classes◦ Implementing DOM 3 as defined by W3C
DOMDocument – entire XML document DOMElement – tree node of one XML element DOMAttr – attribute of an element DOMNode – base class for all tree classes DOMCharacterData – plain text contents …
19. 3. 2015
PHP DOM Implementation
by Martin Kruliš (v1.0) 14
Document Validation◦ DOMDocument methods for validation
validate(), schemaValidate() Automatic validation when the document is parsed
If validateOnParse == true
DOMXPath Class for XPath Search◦ Operates on DOMDocument◦ Search is performed by query() or evaluate()◦ The result is either basic PHP type (boolean, float, or string) or DOMNodeList object
19. 3. 2015
PHP XML Validation and XPath
Example 2
by Martin Kruliš (v1.0) 15
XSLTProcessor Class◦ Uses libxslt external library◦ Transformation rules are loaded from a DOM
document or from a Simple XML Element◦ Transformation input is a DOMDocument object◦ The result is yielded
As a new DOMDocument object String with serialized XML/HTML/text document Directly to a file
19. 3. 2015
PHP and XSLT
Example 3
by Martin Kruliš (v1.0) 16
Simplified DOM API◦ Also loads the document into tree structure◦ All nodes are SimpleXMLElement objects
Tree traversal is implemented by overloading class iterators and magic methods __get(), __set(), …
◦ The structure can be modified and saved◦ Some advanced functions are also available
Integrated XPath query processor Conversions to/from DOM structure
19. 3. 2015
Simple XML in PHP
Example 4
by Martin Kruliš (v1.0) 17
JavaScript Object Notation (JSON)◦ Lightweight interchange format for structured
data◦ Based on subset of JavaScript language◦ Otherwise language independent
Many parsers exist with frontends for many languages
◦ Intended for replacing XML in simple scenarios
Syntax◦ Two basic structures: collections and lists◦ Supports strings, numbers, bools, and null type◦ Unicode safe
19. 3. 2015
JSON - Revision
by Martin Kruliš (v1.0) 18
JSON Example[ { "StudentId": 42, "Name": "John Smith" }, { "StudentId": 54, "Name": "Jane Johnson", "Graduated": true }]
19. 3. 2015
JSON – Revision
Ordered list
Named collection
Number (int)
Unicode string
Boolean literal
by Martin Kruliš (v1.0) 19
JSON Functions◦ json_decode() – JSON string -> object/array struct.◦ json_encode() – serialize any PHP type (except
resource) into JSON string◦ json_last_error(), json_last_error_msg()
Customizing Serialization Process◦ JsonSerializable interface◦ Abstract method jsonSerialize() that converts
object into anything that can be processed by json_encode()
19. 3. 2015
JSON in PHP
by Martin Kruliš (v1.0) 20
Image Processing in PHP
Martin Kruliš
19. 3. 2015
by Martin Kruliš (v1.0) 21
PHP: Hypertext Preprocessor◦ Not restricted only to (hyper)text◦ HTTP with MIME can accommodate any content
Compressed packages (zip, tar.gz, …) Application documents (PDF, …) Images
Caveats◦ PHP is text oriented
Binary data are represented as strings◦ PHP is interpreted
Processing binary data might be slow
19. 3. 2015
Non-textual Data
by Martin Kruliš (v1.0) 22
GD Library◦ The php_gd2 module◦ Supports various formats (JPEG, GIF, PNG, …)
Working with Images◦ Image is a resource$image = imagecreate(400, 300);
◦ Large variety of functions for manipulation◦ Image is not compressed in internal
representation◦ Can be saved or written to output
imagepng(), imagejpg(), imagegif() Corresponding MIME type needs to be set
19. 3. 2015
Images in PHP
by Martin Kruliš (v1.0) 23
Functions◦ Loading/saving supported formats◦ Basic pixel operations◦ Drawing simple geometric shapes
Lines, circles, polygons, …◦ Text rendering
Built-in fonts, PostScript fonts, TrueType fonts◦ Transformation and resampling◦ Copying, alpha blending
Functions are version specific◦ And time/memory demanding
19. 3. 2015
GD Library
Example 5
by Martin Kruliš (v1.0) 24
Exchangeable Image File Format◦ Metadata for photographs◦ Extension of JPEG and TIFF containers
PHP API◦ Read only functions◦ exif_imagetype() – returns image type◦ exif_read_data() – reads meta-data from image◦ exif_thumbnail() – returns the image thumbnail
(if present) as binary string
19. 3. 2015
EXIF
Example 6
by Martin Kruliš (v1.0) 25
Cairo◦ Fast 2D drawing library written in C◦ Supports transformations and Bezier curves
Gmagic◦ A Swiss army knife for image manipulation◦ Large variety of supported formats
ImageMagic◦ Well established library for image manipulation◦ Designed even for more complex operations
19. 3. 2015
Other Libraries
by Martin Kruliš (v1.0) 26
PHP and Database Management
SystemsMartin Kruliš
19. 3. 2015
by Martin Kruliš (v1.0) 27
MySQL Revision◦ Original mysql API is deprecated (as of PHP 5.5)◦ MySQL Improved (mysqli) API
Dual object/procedural interface Procedural interface is similar to original (deprecated)
API Advanced connectivity features
Persistent connections, compression, encryption Directly supports transactions
◦ MySQL Native Driver (mysqlnd) extension More direct access to MySQL server Additional features (e.g., asynchronous queries)
19. 3. 2015
MySQL
by Martin Kruliš (v1.0) 28
MySQLi API◦ mysqli class – the connection to the DBMS
Manage controls, settings, info, stats, … Issue queries and multi-queries Performs transaction control
◦ mysqli_stmt class – SQL statement representation SQL statement preparation and configuration Argument bindings
◦ mysqli_result class – SELECT result wrapper Various methods for accessing data in the result
19. 3. 2015
MySQL
by Martin Kruliš (v1.0) 29
Extensions◦ mysqlnd_qc
Transparent cache for MySQL queries◦ mysqlnd_memcache
Special extension that utilizes InnoDB Memcache Translates SQL statements to Memcache protocol
◦ mysqlnd_uh Allows user to insert hooks for low-level calls Can be used for monitoring or auditing
◦ mysqlnd_mux Transparent client-side connection multiplexing
19. 3. 2015
MySQL
by Martin Kruliš (v1.0) 30
PostrgreSQL◦ Quite powerful alternative for MySQL◦ Similar API to MySQL
pg_connect(), pg_query(), …
SQLite◦ SQL engine running directly on filesystem◦ Small project, where regular DBMS is not available
Commercial Giants◦ MSSQL, Oracle, dBase, IBM DB2, …
19. 3. 2015
Other Database Systems
by Martin Kruliš (v1.0) 31
Abstract Database Layers◦ Solving the problem of portability
If the application refrains from using specific SQL statements
PHP Data Objects (PDO)◦ Generic interface for various RDBMS◦ Extension php_pdo, individual DB systems are in
separate extensions (php_pdo_mysql, …)◦ Simple object oriented API
PDO and PDOStatement classes Minimalistic, no special functions
19. 3. 2015
PDO Interface
by Martin Kruliš (v1.0) 3219. 3. 2015
Discussion