今回はモジュール関連の違いについて解説します。PHP5ではXML関連モジュールの入れ替えや新しいXML関連モジュールのデフォルト化など、
特に記述がない場合、
XML関連の違い
PHP4もXML関連のモジュールが用意されていました。PHP4とPHP5で互換性があるXML関連モジュールはSAXパーサとXML RPCモジュールで、
| 機能 | PHP4 | PHP5 |
|---|---|---|
| SAXパーサ | XML Parser | XML Parser |
| DOM関数 | DOM_ | DOM |
| XSLT変換 | XSLT | XSL |
| XML RPC関数 | XML_ | XML_ |
| SOAP関数 | N/ | SOAP |
| libxml関数 | N/ | libxml |
| 簡易XML文書アクセス | N/ | SimpleXML |
| XMLプルパーサ | N/ | XMLReader |
| サービスデータオブジェクト | N/ | SDO |
| XML Data Access Service for Service Data Objects | N/ | SDO XML Data Access Service |
PHP5は簡単にXML文書にアクセスできるSimpleXMLなど、
DOM関数
DOM
| 関数 | 機能 |
|---|---|
DomDocument->create_ | Create new comment node |
DomDocument->create_ | Create new element node with an associated namespace |
DomDocument->create_ | Create new element node |
DomDocument->create_ | Create an entity reference |
出典:PHPマニュアル
| 関数 | 機能 |
|---|---|
DOMDocument->createComment() | Create new comment node |
DOMDocument->createDocumentFragment() | Create new document fragment |
DOMDocument->createElement() | Create new element node |
DOMDocument->createElementNS() | Create new element node with an associated namespace |
DOMDocument->createEntityReference() | Create new entity reference node |
出典:PHPマニュアル
定数名はDOMとDOM XMLモジュールで互換性があります。
XML_ELEMENT_NODE
XML_ATTRIBUTE_NODE
XML_TEXT_NODE
XML_CDATA_SECTION_NODE
このように、
SXLT変換
XSLTサポートモジュールはPHP4とPHP5では大きく変更されています。PHP4のXSLTサポートモジュール
PHP4のXSLTモジュールのAPIは関数で提供されいます。PHP5ではオブジェクト指向プログラミングサポートの向上の一環としてXSLモジュールのAPIはクラスとして提供しています。ベースとなっているライブラリも異なりAPIも異なっているので、
| 関数 | 機能 |
|---|---|
xslt_ | Returns the information on the compilation settings of the backend |
xslt_ | Returns the name of the backend |
xslt_ | Returns the version number of Sablotron |
xslt_ | Create a new XSLT processor |
xslt_ | Returns an error number |
xslt_ | Returns an error string |
xslt_ | Free XSLT processor |
xslt_ | Get options on a given xsl processor |
xslt_ | Perform an XSLT transformation |
xslt_ | Set the base URI for all XSLT transformations |
xslt_ | Set the encoding for the parsing of XML documents |
xslt_ | Set an error handler for a XSLT processor |
xslt_ | Set the log file to write log messages to |
xslt_ | Sets the object in which to resolve callback functions |
xslt_ | Set SAX handlers for a XSLT processor |
xslt_ | Set the SAX handlers to be called when the XML document gets processed |
xslt_ | Set Scheme handlers for a XSLT processor |
xslt_ | Set the scheme handlers for the XSLT processor |
出典:PHPマニュアル
| 関数 | 機能 |
|---|---|
XSLTProcessor->__ | Creates a new XSLTProcessor object |
XSLTProcessor->getParameter() | Get value of a parameter |
XSLTProcessor->hasExsltSupport() | Determine if PHP has EXSLT support |
XSLTProcessor->importStylesheet() | Import stylesheet |
XSLTProcessor->registerPHPFunctions() | Enables the ability to use PHP functions as XSLT functions |
XSLTProcessor->removeParameter() | Remove parameter |
XSLTProcessor->setParameter() | Set value for a parameter |
XSLTProcessor->transformToDoc() | Transform to a DOMDocument |
XSLTProcessor->transformToURI() | Transform to URI |
XSLTProcessor->transformToXML() | Transform to XML |
出典:PHPマニュアル
PHP本体に付属するモジュール違いのまとめ
PHP5のモジュールはPHP4のモジュールとかなり異なっています。PECLに移動したモジュールなどが多くあります。次の表はPHP4からPHP5のモジュールの違いのまとめた表になります。モジュール名はPHPマニュアルと同じ表記ではなく、
PHP5で削除またはPECLに移動したモジュール
| モジュール | 移動先 |
|---|---|
| com | COM dotnetが代替モジュール |
| cpdf | CPDF PECLへ移動 |
| crack | Crack PECLへ移動 |
| cyrus | Cyrus PECLへ移動 |
| db | Db PECLへ移動 |
| dbx | Dbx PECLへ移動 |
| dio | DIO PECLへ移動 |
| domxml | DOMXML PHP5では動作しない |
| filepro | FilePro PECLへ移動 |
| fribidi | Fribidi PECLへ移動 |
| hwapi | Hyperwave API PECLへ移動 |
| hyperware | Hyperware PECLへ移動 |
| infomix | Informix PECLへ移動 |
| ingres_ | Ingress II PECLへ移動 |
| ircg | IRC Gateway PECLへ移動 |
| java | Java 代替モジュールなし |
| mcal | MCAL 代替モジュールなし |
| mcve | MCVE PECLへ移動 |
| mnogosearch | mnoGoSearch PECLへ移動 |
| msession | Mohawk Software Session Handler PECLへ移動 |
| notes | Lotus Notes PECLへ移動 |
| oracle | Oracle oci8が代替モジュール |
| overload | 機能がPHP5本体に吸収されました |
| PDF PECLへ移動 | |
| pfpro | Verisign Payflow Pro PECLへ移動 |
| qtdom | Qt DOM PECLへ移動 |
| swf | Shackwave Flash PECLへ移動 |
| w32api | W32api PECLへ移動 |
| xslt | XSLが代替モジュール |
| yaz | YAZ PECLへ移動 |
| yp | YP/ |
PHP5から追加されたモジュール
| モジュール | 機能 |
|---|---|
| dotnet | .NET COMモジュールの代替 |
| dom | DOM DOMXMLモジュールの代替 |
| filter | Filter |
| hash | Hash |
| json | JSON |
| libxml | LibXML |
| mysqli | MySQL Improved |
| pdo | PHP Data Object |
| reflection | Reflection API |
| simplexml | SimpleXML |
| soap | SOAP |
| spl | Standard PHP Library |
| sqlite | SQLite |
| tidy | Tidy |
| xmlreader | XML Reader |
| xmlwriter | XML Writer |
| xsl | xlstの代替モジュール |
移行時に注意が必要な関数
以下の関数はPHP4とは異なる動作をします。
| 関数 | 機能 |
|---|---|
strrpos | needleが最初の1文字でなく文字列全体がニードルとなる。不正なオフセットでNoticeエラーが発生する。 |
strripos | needleが最初の1文字でなく文字列全体がニードルとなる。不正なオフセットでNoticeエラーが発生する。 |
strtotime | 失敗した場合の戻り値が-1ではなくFALSEを返す。タイムゾーンエラーでE_ |
array_ | 引数が配列型のみを受け付けるように変更された。 |
get_, get_, get_ | クラス、 |
ip2long | 不正なIPアドレスが渡された場合、 |
include_, require_ | A. |
getrusage | 不正なパラメータが渡された場合、 |
mb_ | offsetパラメータが追加され、 |
pg_, pg_, mysql_ | 接続パラメータが追加された |
エラーイベント
PHP4と比べ、
これらのエラーの多くはバグやパラメータのチェック不足で発生すると思われますが、
まとめ
特にPHP4でXML関連の操作を行うアプリケーションを構築している場合、
PHP5はソースディストリビューションに含められていた多くのモジュールをPECLに移動しています。モジュールの違いはPHP5へ移行する場合の最も大きな障害となるケースも多いので注意が必要です。
次回はセキュリティに関連した変更を紹介します。
