|
DOM FunctionsThe DOM extension allows you to operate on XML documents through the DOM API with PHP 5. For PHP 4, use DOM XML.
Note:
DOM extension uses UTF-8 encoding. Use utf8_encode() and utf8_decode() to work with texts in ISO-8859-1 encoding or Iconv for other encodings. The API of the module follows the » DOM Level 3 standard as closely as possible. Consequently, the API is fully object-oriented. It is a good idea to have the DOM standard available when using this module. This module defines a number of classes, which are explained in the following tables. Classes with an equivalent in the DOM standard are named DOMxxx.
Extends
Table 52.
Extends
Extends
Extends
Table 54.
Extends
Extends
Each Table 55.
Extends
Extends This interface represents a known entity, either parsed or unparsed, in an XML document. Table 57.
Extends
DOM operations raise exceptions under particular circumstances, i.e., when an operation is impossible to perform for logical reasons. See also Chapter 11, Exceptions.
The
Table 59.
Extends
Extends
Extends
Many examples in this reference require an XML file. We will use
Example 512. book.xml<?xml version="1.0" encoding="iso-8859-1"?> The constants below are defined by this extension, and will only be available when the extension has either been compiled into PHP or dynamically loaded at runtime. Table 65. XML constants
Table 66. DOMException constants
Table of Contents
Code Examples / Notes » ref.domphp
[Editor's Note: If you're using entities, then you have no choice. XML Catalogs can speed DTD resolution.] Never use $dom->resolveExternals=true; when parsing XHTML document that has the DOCTYPE declaration with DTD URL specified in it. Otherwise parsing the XHTML with DOCTYPE like this one: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> will result in PHP/DOM downloading the DTD file from W3C site when parsing your document. It will add extra delay to your script - I experienced that $dom->load()'s total time was from 1 to 16 seconds. elixon pes_cz
When I tried to parse my XHTML Strict files with DOM extension, it couldn't understand xhtml entities (like ©). I found post about it here (14-Jul-2005 09:05) which adviced to add resolveExternals = true, but it was very slow. There was some small note about xml catalogs but without any glue. Here it is: XML catalogs is something like cache. Download all needed dtd's to /etc/xml, edit file /etc/xml/catalog and add this line: <public publicId="-//W3C//DTD XHTML 1.0 Strict//EN" uri="file:///etc/xml/xhtml1-strict.dtd" /> Thats all. Thanks to http://www.whump.com/moreLikeThis/link/03815 aidan
When dealing with validation or loading, the output errors can be quite annoying. PHP 5.1 introduces libxml_get_errors(). http://php.net/libxml_get_errors amir.laheratcomplinet.com
This particular W3C page provides invaluable documentation for the DOM classes implemented in php5 (via libxml2). It fills in plenty of php.net's gaps: http://www.w3.org/TR/DOM-Level-2-Core/core.html Some key examples: * concise summary of the class heirachy (1.1.1) * clarification that DOM level 2 doesn't allow for population of internal DTDs * explanation of DOMNode->normalize() * explanation of the DOMImplementation class The interfaces are described in OMG's Interface Definition Language toby
This module is not included by default either in the CentOS 4 "centosplus" repository. For those using PHP5 on CentOS 4, a simple "yum --enablerepo=centosplus install php-xml" will do the trick (this will install both the XML and DOM modules).
phpdeveloper
The Yanik's dom2array() function (added on 14-Mar-2007 08:40) does not handle multiple nodes with the same name, i.e.: <foo> <name>aa</name> <name>bb</name> </foo> It will overwrite former and your array will contain just the last one ("bb") simlee
The project I'm currently working on uses XPaths to dynamically navigate through chunks of an XML file. I couldn't find any PHP code on the net that would build the XPath to a node for me, so I wrote my own function. Turns out it wasn't as hard as I thought it might be (yay recursion), though it does entail using some PHP shenanigans... Hopefully it'll save someone else the trouble of reinventing this wheel. <?php function getNodeXPath( $node ) { // REMEMBER THAT XPATHS USE BASE-1 INSTEAD OF BASE-0!!! // Get the index for the current node by looping through the siblings. $parentNode = $node->parentNode; if( $parentNode != null ) { $nodeIndex = 0; do { $testNode = $parentNode->childNodes->item( $nodeIndex ); $nodeName = $testNode->nodeName; $nodeIndex++; // PHP trickery! Here we create a counter based on the node // name of the test node to use in the XPath. if( !isset( $$nodeName ) ) $$nodeName = 1; else $$nodeName++; // Failsafe return value. if( $nodeIndex > $parentNode->childNodes->length ) return( "/" ); } while( !$node->isSameNode( $testNode ) ); // Recursively get the XPath for the parent. return( getNodeXPath( $parentNode ) . "/{$node->nodeName}[{$$nodeName}]" ); } else { // Hit the root node! Note that the slash is added when // building the XPath, so we return just an empty string. return( "" ); } } ?> mark
Note that these DOM functions expect (and presumably return) all their data in UTF-8 character encoding, regardless of what PHP's current encoding is. This means that text nodes, attribute values etc, should be in utf8. This applies even if you're generating an XML document which is not ultimately in utf8. Mark cormac
Most email clients ignore stylesheets in HTML formatted emails. The best way to ensure your HTML is formatted correctly by a broad spectrum of email clients, including webmail implementations as Gmail, is to use inline style attributes. The following function uses DOM to parse an inline stylesheet, and will replace element class and id attributes with inline style attributes, and add inline style attributes for generic tag stylesheet rules. It will remove the stylesheet and any used class and id attributes as these are defunct for most email clients. It is a fairly lightweight function and does not support CSS inheritance, but will work for simple stylesheets e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>HTML EMAIL</title> <style type="text/css"> body { margin: 10px 10px; font: 8pt arial; background: #fff; color: #000; } p { margin: 0 0 10px; line-height: 1.2em; text-align: justify; } p.centered { text-align: centre; } p#right { text-align: right; } </style> </head> <body> Sample text justified <p class="centered">Centered text here <p id="right">Right-aligned text </body> </html> Here's the function: <?php function parseStyleSheetfor Email($html) { $doc = new DOMDocument; $doc->loadHTML($html); // grab inline stylesheet as DOM object $oStyle = $doc->getElementsByTagName('style')->item(0); // grab rule identifiers and rules preg_match_all('/^([-#._a-z0-9]+) ?\{(.*?)\}/ims', $oStyle->nodeValue, $aMatches, PREG_SET_ORDER); foreach ($aMatches as $aRule) { $rule_id = $aRule[1]; // clean up rules $rule = str_replace(array("\r", "\n", ' ', '; '), array('', '', ' ', ';'), $aRule[2]); $rule = preg_replace(array('/^ /', '/;$/'), '', $rule); // generic rules if (!strstr($rule_id, '.') && !strstr($rule_id, '#')) { $items = $doc->getElementsByTagName($rule_id); // set style attribute equal to rule from stylesheet foreach ($items as $item) { // if there is already inline style append it to end of stylesheet rule $current_style = $item->getAttribute('style'); if (!empty($current_style)) { $item->setAttribute('style', $rule . ';' . $current_style); } else { $item->setAttribute('style', $rule); } } // classes } elseif (strstr($rule_id, '.')) { list($rule_tag, $rule_class) = explode('.', $rule_id); $items = $doc->getElementsByTagName($rule_tag); foreach ($items as $item) { $class = $item->getAttribute('class'); if ($class == $rule_class) { // if there is already inline style append it to end of stylesheet rule $current_style = $item->getAttribute('style'); if (!empty($current_style)) { $item->setAttribute('style', $current_style . ';' . $rule); } else { $item->setAttribute('style', $rule); } // remove class as it won't be used now $item->removeAttribute('class'); } } // ids } elseif (strstr($rule_id, '#')) { list($rule_tag, $id) = explode('#', $rule_id); $item = $doc->getElementById($id); $current_style = $item->getAttribute('style'); if (!empty($current_style)) { $item->setAttribute('style', $current_style . ';' . $rule); } else { $item->setAttribute('style', $rule); } // remove class as it won't be used now $item->removeAttribute('id'); } } // remove inline stylesheet $oStyle->parentNode->removeChild($oStyle); return $doc->saveHTML(); } ?> francois hill
In response to myself... I have just realized that it is possible to pass a context node in a xpath query : DOMNodeList query ( string $expression [, DOMNode $contextnode] ) Thus rendering my class 'XPathableNode' useless. Makes sense really. I expect you learn every day =0) francois hill
In response to lutfi at smartconsultant dot us : (see my post on http://fr2.php.net/manual/en/ function.dom-domdocument-getelementsbytagname.php ) Use this class I wrote: class XPathableNode extends DOMNode { protected $Node; protected $DOMDocument_from_node; protected $DOMXpath_for_node; public function __construct(/* DOMNode */ $node) { $this->Node=$node; $this->DOMDocument_from_node=new DomDocument(); $domNode=$this->DOMDocument_from_node ->importNode($this->Node, true); $this->DOMDocument_from_node ->appendChild($domNode); $this->DomXpath_for_node = new Domxpath($this-> DOMDocument_from_node); } public function convertHTML() { return $this->DOMDocument_from_node ->saveHTML(); } public /*DomNodeList*/ function applyXpath($xpath) { return $this->DomXpath_for_node ->query($xpath); } } (sorry for the display... What a terrible hinderance on the part of php.net !) Then : Make a new XPathableNode out of your parent node. You may then retrieve a DOMNodeList from it by applying a xpath (thus being able to specify the depth and name of elements you want). Has got me around some (of the many) DOM awkwardnesses a few times. ;o) freyjkell
In order to REALLY well handle XHTML entities with DOM, you can do following things: 1. Add this DOCTYPE to your documents <!DOCTYPE xhtmlentities PUBLIC "-//W3C//ENTITIES XHTML Character Entities 1.0//EN" "/xhtml11.ent"> 2. Copy http://freyjkell.ovh.org/xhtml11.ent into your document root. 3. In your PHP: <?php $dom=new DOMDocument(); $dom->load('file.xhtml',LIBXML_DTDLOAD); // NOT resolveExternals - it needs true doctype, and includes crap code // some DOM operations $doctype=DOMImplementation::createDocumentType("html","-//W3C//DTD XHTML 1.1//EN","http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); // creating real doctype $output=DOMImplementation::createDocument('','',$doctype); $output->appendChild($output->importNode($dom->documentElement,true)); $output->encoding='utf-8'; $output=$output->saveXML(); $xhtml=preg_match( '/application\/xhtml\+xml(?![+a-z])'. '(;q=(0\.\d{1,3}|[01]))?/i', $_SERVER['HTTP_ACCEPT'],$xhtml) && (isset($xhtml[2])?$xhtml[2]:1) > 0 || strpos($_SERVER["HTTP_USER_AGENT"], "W3C_Validator")!==false || strpos($_SERVER["HTTP_USER_AGENT"], "WebKit")!==false; // XHTML Content-Negotiation header('Content-Type: '.($xhtml?'application/xhtml+xml':'text/html').'; charset=utf-8'); print $output; ?> massimo dot scamarcia
If you're moving from PHP4 to PHP5, you can keep your scripts untouched using this: http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/index.en.html cooper
If you are using not object-oriented functions and it takes too much time to change them all (or you'll be replacing them later) then as a temporary decision can be used this modules: For DOM XML: http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/ For XSLT: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/ spammable69
I wrote a framework to implement the StyleSheet interfaces as specified on the W3C website. The code is written in PHP, and is NOT a complete implementation. Use it how ya like. I was planning on adding the CSSStyleSheet interfaces as well. Feel free to ask. <? class StyleSheetList { public length; private self; function __construct ( ) { $this->self = array(); } function __get($property, $&ret) { if($property == 'length') $ret = count($this->self); return true; } function __set($property, $val) { if($property == 'length') return true; } function item( $index ) { return $this->self[$index]; } } class MediaList extends StyleSheetList { function appendMedium ( $newMedium ) { array_push($this->self, $newMedium); } function deleteMedium ( $oldMedium ) { foreach($this->self as $item) { if( $item == $oldMedium ) { $item = $this->self[ $this->length-1 ]; array_pop($this->self); break; } } } } class DocumentStyle { public styleSheets; function __construct ( ) { $this->styleSheets = new StyleSheetList(); } function __set($property, $val) { if($property == 'styleSheets') return true; } } class LinkStyle { public sheet; function __construct () { $this->sheet = new StyleSheet(); } function __set($property, $val) { if($property == 'sheet') return true; } } class StyleSheet { public type; public disabled; public ownerNode; public parentStyleSheet; public href; public title; public media; function __construct( $type, $disabled, $ownerNode, $parentStyleSheet, $href, $title){ $this->type = $type; $this->disabled = $disabled; $this->media = new MediaList(); $this->ownerNode = $ownerNode; $this->parentStyleSheet = $parentStyleSheet; $this->href = $href; $this->title = $title; } } ?> Only contactable via http://murpsoft.com/contact.html nevyn
I wrote a couple of functions to: - create a DOMDocument from a file - parse the namespaces in it - create a XPath object with all the namespaces registered - load the schemalocations - validate the file on the main schema (the one without prefix) It is useful for me, see if it is also for someone else!! Giulio function decodeNode($node) { $out = $node->ownerDocument->saveXML($node); $re = "{^<((?:\\w*:)?\\w*)". //the tag name "[\\s\n\r]*((?:[\\s\n\r]*". "(?:\\w*:)?\\w+[\\s\n\r]*=[\\s\n\r]*". //possible attribute name "(?:\"[^\"]*\"|\'[^\']*\'))*)". //attribute value "[\\s\n\r]*>[\r\n]*". "((?:.*[\r\n]*)*)". //content "[\r\n]*</\\1>$}"; //closing tag preg_match($re, $out, $mat); return $mat; } function innerXml($node) { $mat = decodeNode($node); return $mat[3]; } function getnodeAttributes($node) { $mat = decodeNode($node); $txt = $mat[2]; $re = "{((?:\\w*:)?\\w+)[\\s\n\r]*=[\\s\n\r]*(\"[^\"]*\"|\'[^\']*\')}"; preg_match_all($re, $txt, $mat); $att = array(); for ($i=0; $i<count($mat[0]); $i++) { $value = $mat[2][$i]; if ($value[0] == "\'" || $value[0] == "\"") { $len = strlen($value); $value = substr($value, 1, strlen($value)-2); } $att[ $mat[1][$i] ] = $value; } return $att; } function loadXml($file) { $doc = new DOMDocument(); $doc->load($file); //cerca l'attributo xmlns $xsi = false; $doc->namespaces = array(); $doc->xpath = new DOMXPath($doc); $attr = getnodeAttributes($doc->documentElement); foreach ($attr as $name => $value) { if (substr($name,0,5) == "xmlns") { $uri = $value; $pre = $doc->documentElement->lookupPrefix($uri); if ($uri == "http://www.w3.org/2001/XMLSchema-instance") $xsi = $pre; $doc->namespaces[$pre] = $uri; if ($pre == "") $pre = "noname"; $doc->xpath->registerNamespace($pre, $uri); } } if ($xsi) { $doc->schemaLocations = array(); $lst = $doc->xpath->query("//@$xsi:schemaLocation"); foreach($lst as $el) { $re = "{[\\s\n\r]*([^\\s\n\r]+)[\\s\n\r]*([^\\s\n\r]+)}"; preg_match_all($re, $el->nodeValue, $mat); for ($i=0; $i<count($mat[0]); $i++) { $value = $mat[2][$i]; $doc->schemaLocations[ $mat[1][$i] ] = $value; } } $olddir = getcwd(); chdir(dirname($file)); $schema = $doc->schemaLocations[$doc->namespaces[""]]; if (substr($schema,0,7) == "file://") { $schema = substr($value,7); } if (!$doc->schemaValidate($schema)) dbg()->err("Invalid file"); chdir($olddir); } return $doc; } lutfi
i have some problem parsing recurred xml tree here: <menu name='parent1' > <submenu name='file' > <submenu name='open' >Open file</submenu> <submenu name='close' >Close file</submenu> </submenu> <submenu name='edit' > <submenu name='cut' >Cut Clipboards</submenu> <submenu name='copy' >Copy Clipboards</submenu> <submenu name='paste' >Paste Clipboards</submenu> </submenu> </menu> with getElementsByTagName all submenu is on the same level. i want it to be structured like tree list, but not change the 'submenu' tag yanik
I hate DOM model ! so I wrote dom2array simple function (simple for use): function dom2array($node) { $res = array(); print $node->nodeType.'<br/>'; if($node->nodeType == XML_TEXT_NODE){ $res = $node->nodeValue; } else{ if($node->hasAttributes()){ $attributes = $node->attributes; if(!is_null($attributes)){ $res['@attributes'] = array(); foreach ($attributes as $index=>$attr) { $res['@attributes'][$attr->name] = $attr->value; } } } if($node->hasChildNodes()){ $children = $node->childNodes; for($i=0;$i<$children->length;$i++){ $child = $children->item($i); $res[$child->nodeName] = dom2array($child); } } } return $res; } brian dot reynolds
I found the xml2array function below very useful, but there seems to be a bug in it. The $item variable was never getting set. I've expanded this out to be a bit more readable, and the corrected code is : function xmlToArray($n) { $return=array(); foreach($n->childNodes as $nc){ if( $nc->hasChildNodes() ){ if( $n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1){ $item = $n->firstChild; $return[$nc->nodeName][]=$this->xmlToArray($item); } else{ $return[$nc->nodeName]=$this->xmlToArray($nc); } } else{ $return=$nc->nodeValue; } } return $return; } johanwthijs-at-hotmail-dot-com
Being an experienced ASP developer I was wondering how to replace textual content of a node (with msxml this is simply acheived by setting the 'text' property of a node). Out of frustration I started to play around with SimpleXml but I could not get it to work in combination with xPath. I took me a lot of time to find out so I hope this helps others: function replaceNodeText($objXml, $objNode, $strNewContent){ /* This function replaces a node's string content with strNewContent */ $objNodeListNested = &$objNode->childNodes; foreach ( $objNodeListNested as $objNodeNested ){ if ($objNodeNested->nodeType == XML_TEXT_NODE)$objNode->removeChild ($objNodeNested); } $objNode->appendChild($objXml->createTextNode($strNewContent)); } $objXml= new DOMDocument(); $objXml->loadXML('<root><node id="1">bla</note></root>'); $objXpath = new domxpath($objXml); $strXpath="/root/node[@id='1']"; $objNodeList = $objXpath ->query($strXpath); foreach ($objNodeList as $objNode){ //pass the node by reference replaceNodeText($objXml, &$objNode, $strImportedValue); } lpetrov
Basicly there are alot of problems on dynamic namespaces registering and other maybe 'not well' documented parts of DOM. Here is an article covering some of the problems that our company web developers found while we were developing a template engine for our new framework. The link: http://blog.axisvista.com/?p=35 aidan
As of PHP 5.1, libxml options may be set using constants rather than the use of proprietary DomDocument properties. DomDocument->resolveExternals is equivilant to setting LIBXML_DTDLOAD LIBXML_DTDATTR DomDocument->validateOnParse is equivilant to setting LIBXML_DTDLOAD LIBXML_DTDVALID PHP 5.1 users are encouraged to use the new constants. Example: DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDATTR); DomDocument->load($file, LIBXML_DTDLOAD|LIBXML_DTDVALID); jim.filter
Array to DOM Here is a recursive function to turn a multidimensional array into an XML document. It will handle multiple elements of the same tag, but only one per parent element. IE: Can't generate: Can generate: <root> <root> <sub1>data1</sub1> <subs1> <sub1>data2</sub1> <value>data1</value> <sub2>data1</sub2> <value>data2</value> <sub2>data2</sub2> </subs1> </root> <subs2> <value>data1</value> <value>data2</value> <subs2> </root> Also, the function performs no type of error checking on your array and will throw a DOMException if a key value you used in your array contains invalid characters for a proper DOM tag. This function is untested for "deep" multidimensional arrays. Complete code ready to run with example: <?PHP function AtoX($array, $DOM=null, $root=null){ if($DOM == null){$DOM = new DOMDocument('1.0', 'iso-8859-1');} if($root == null){$root = $DOM->appendChild($DOM->createElement('root'));} $name = $array['#MULTIPLE_ELEMENT_NAME']; foreach($array as $key => $value){ if(is_int($key) && $name != null){ if(is_array($value)){ $subroot = $root->appendChild($DOM->createElement($name)); AtoX($value, $DOM, $subroot); } else if(is_scalar($value)){ $root->appendChild($DOM->createElement($name, $value)); } } else if(is_string($key) && $key != '#MULTIPLE_ELEMENT_NAME'){ if(is_array($value)){ $subroot = $root->appendChild($DOM->createElement($key)); AtoX($value, $DOM, $subroot); } else if(is_scalar($value)){ $root->appendChild($DOM->createElement($key, $value)); } } } return $DOM; } $array = array( '#MULTIPLE_ELEMENT_NAME' => 'GenericDatas', 'Date' => 'November 03, 2007', 'Company' => 'Facility One', 'Field' => 'Facility Management Software', 'Employees' => array( '#MULTIPLE_ELEMENT_NAME' => 'Employee', 'Cindy', 'Sean', 'Joe', 'Owen', 'Jim', 'Dale', 'Kelly', 'Ryan', 'Johnathan', 'Robin', 'William Marcus', 'NewCoops' => array( '#MULTIPLE_ELEMENT_NAME' => 'Coop', 'John', 'Tyler', 'Ray', 'Dawn' ) ), 'Datas', 'DATAS', 'OtherDatas' ); $DOM = new DOMDocument('1.0', 'iso-8859-1'); $root = $DOM->appendChild($DOM->createElement('CompanyData')); $DOM = AtoX($array, $DOM, $root); $DOM->save('C:\test.xml'); ?> sanados
appended to brian dot reynolds at risaris dot com 20-Feb-2007 10:09 when you got variable nodes at start you array fails and looses nodes beneath. solution that counts occurance though eats up performance: function xmlToArray($n) { $xml_array = array(); $occurance = array(); foreach($n->childNodes as $nc) { $occurance[$nc->nodeName]++; } foreach($n->childNodes as $nc){ if( $nc->hasChildNodes() ) { if($occurance[$nc->nodeName] > 1) { $xml_array[$nc->nodeName][] = xmlToArray($nc); } else { $xml_array[$nc->nodeName] = xmlToArray($nc); } } else { return utf8_decode($nc->nodeValue); } } return $xml_array; } sean
$xmlDoc=<<<XML <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall> XML; $xml= new DOMDocument(); $xml->preserveWhiteSpace=false; $xml->loadXML($xmlDoc); print_r(xml2array($xml)); function xml2array($n) { $return=array(); foreach($n->childNodes as $nc) ($nc->hasChildNodes()) ?($n->firstChild->nodeName== $n->lastChild->nodeName&&$n->childNodes->length>1) ?$return[$nc->nodeName][]=xml2array($item) :$return[$nc->nodeName]=xml2array($nc) :$return=$nc->nodeValue; return $return; } |
Change Language.NET Functions Apache-specific Functions Alternative PHP Cache Advanced PHP debugger Array Functions Aspell functions [deprecated] BBCode Functions BCMath Arbitrary Precision Mathematics Functions PHP bytecode Compiler Bzip2 Compression Functions Calendar Functions CCVS API Functions [deprecated] Class/Object Functions Classkit Functions ClibPDF Functions [deprecated] COM and .Net (Windows) Crack Functions Character Type Functions CURL Cybercash Payment Functions Credit Mutuel CyberMUT functions Cyrus IMAP administration Functions Date and Time Functions DB++ Functions Database (dbm-style) Abstraction Layer Functions dBase Functions DBM Functions [deprecated] dbx Functions Direct IO Functions Directory Functions DOM Functions DOM XML Functions enchant Functions Error Handling and Logging Functions Exif Functions Expect Functions File Alteration Monitor Functions Forms Data Format Functions Fileinfo Functions filePro Functions Filesystem Functions Filter Functions Firebird/InterBase Functions Firebird/Interbase Functions (PDO_FIREBIRD) FriBiDi Functions FrontBase Functions FTP Functions Function Handling Functions GeoIP Functions Gettext Functions GMP Functions gnupg Functions Net_Gopher Haru PDF Functions hash Functions HTTP Hyperwave Functions Hyperwave API Functions i18n Functions IBM Functions (PDO_IBM) IBM DB2 iconv Functions ID3 Functions IIS Administration Functions Image Functions Imagick Image Library IMAP Informix Functions Informix Functions (PDO_INFORMIX) Ingres II Functions IRC Gateway Functions PHP / Java Integration JSON Functions KADM5 LDAP Functions libxml Functions Lotus Notes Functions LZF Functions Mail Functions Mailparse Functions Mathematical Functions MaxDB PHP Extension MCAL Functions Mcrypt Encryption Functions MCVE (Monetra) Payment Functions Memcache Functions Mhash Functions Mimetype Functions Ming functions for Flash Miscellaneous Functions mnoGoSearch Functions Microsoft SQL Server Functions Microsoft SQL Server and Sybase Functions (PDO_DBLIB) Mohawk Software Session Handler Functions mSQL Functions Multibyte String Functions muscat Functions MySQL Functions MySQL Functions (PDO_MYSQL) MySQL Improved Extension Ncurses Terminal Screen Control Functions Network Functions Newt Functions NSAPI-specific Functions Object Aggregation/Composition Functions Object property and method call overloading Oracle Functions ODBC Functions (Unified) ODBC and DB2 Functions (PDO_ODBC) oggvorbis OpenAL Audio Bindings OpenSSL Functions Oracle Functions [deprecated] Oracle Functions (PDO_OCI) Output Control Functions Ovrimos SQL Functions Paradox File Access Parsekit Functions Process Control Functions Regular Expression Functions (Perl-Compatible) PDF Functions PDO Functions Phar archive stream and classes PHP Options&Information POSIX Functions Regular Expression Functions (POSIX Extended) PostgreSQL Functions PostgreSQL Functions (PDO_PGSQL) Printer Functions Program Execution Functions PostScript document creation Pspell Functions qtdom Functions Radius Rar Functions GNU Readline GNU Recode Functions RPM Header Reading Functions runkit Functions SAM - Simple Asynchronous Messaging Satellite CORBA client extension [deprecated] SCA Functions SDO Functions SDO XML Data Access Service Functions SDO Relational Data Access Service Functions Semaphore SESAM Database Functions PostgreSQL Session Save Handler Session Handling Functions Shared Memory Functions SimpleXML functions SNMP Functions SOAP Functions Socket Functions Standard PHP Library (SPL) Functions SQLite Functions SQLite Functions (PDO_SQLITE) Secure Shell2 Functions Statistics Functions Stream Functions String Functions Subversion Functions Shockwave Flash Functions Swish Functions Sybase Functions TCP Wrappers Functions Tidy Functions Tokenizer Functions Unicode Functions URL Functions Variable Handling Functions Verisign Payflow Pro Functions vpopmail Functions W32api Functions WDDX Functions win32ps Functions win32service Functions xattr Functions xdiff Functions XML Parser Functions XML-RPC Functions XMLReader functions XMLWriter Functions XSL functions XSLT Functions YAZ Functions YP/NIS Functions Zip File Functions Zlib Compression Functions |