PHPプログラムに関する各種メモ書き:タグ「XML」での検索

PHP 5.4のE_STRICTエラーに対応する

PHP 5.4からは 5.3までは出力されなかった【E_STRICTエラー】がデフォルトで出力されるようになっています。 なのでPHPのバージョンを 5.3以下から5.4以上に上げるとE_STRICTエラーが表示されることがよくあります。

1. PHP 5.4のE_STRICTエラーの対処法(ソースを修正する)

自分で書いたソースの場合はエラーの内容を調べて修正するのが一番よいでしょう。
http://goo.gl/moKrOg

2. PHP 5.4のE_STRICTエラーの対処法(エラーを表示しないようにする)

そもそもPHPのバージョンが5.3以下の場合は出力されてなかったエラーなので、そもそもエラーを表示させないという手法。 古いPEARパッケージにはこのエラーが含まれていることが多いので以下のようにエラーが出る箇所を【エラー設定】【エラー戻し】で囲むといいでしょう。

// 【エラー設定】E_STRICT , E_DEPRECATED を非表示
$old_error = error_reporting( E_ALL & ~E_STRICT & ~E_DEPRECATED);

	// PEARパッケージの処理(例)
	require_once 'XML/Unserializer.php'; // 例:PEARの XML::Unserializer は確実にE_STRICTエラーが出ます。
	// 何かしらの処理

// 【エラー戻し】
error_reporting($old_error);
No.966
07/30 22:40

edit

PEAR
XML
エラー対処

ブログ更新Ping(XML RPC)受信サーバをPHPで作る

ブログ更新Ping(XML RPC)受信サーバをPHPで作る。

1. 更新Pingの受信

まずブログシステムで更新した時に飛んでくるPingを受けるには以下のようにします。

$xml = mb_convert_encoding(file_get_contents("php://input"), "UTF-8", "auto");
if (!$xml) {
	return false;
}
else{
	$data_obj = new SimpleXMLElement($xml);
	$data = (ARRAY)$data_obj;
	// ここに受信したデータの処理を記述
	・・・・・・・・・・
}

2.成功or失敗コードの出力

処理後に成功または失敗コードを返してやります。

下記コードをテンプレートとして持っておいて header ('Content-Type: text/xml'); の後に送信するのがカスタマイズも楽でいいでしょう。

成功時の戻り値の例

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
 <param>
  <value>
   <struct>
    <member>
     <name>flerror</name>
     <value>
      <boolean>0</boolean>
     </value>
    </member>
    <member>
     <name>message</name>
     <value>
      <string>OK</string>
     </value>
    </member>
   </struct>
  </value>
 </param>
</params>
</methodResponse>

失敗時の戻り値の例

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
 <params>
  <param>
   <value>
    <struct>
     <member>
      <name>flerror</name>
      <value>
       <boolean>1</boolean>
      </value>
     </member>
     <member>
      <name>message</name>
      <value>
       <string>Unable to process</string>
      </value>
     </member>
    </struct>
   </value>
  </param>
 </params>
</methodResponse>
No.880
03/18 17:35

edit

XML
API

PHPでXMLのXSLT変換を行う。

XMLファイルからHTMLファイルを作成したい時、XSLTを使うと早い場合があります。

そのサンプル

<?php
$xml = new DomDocument();
$xml->load('test.xml');
$xsl = new DomDocument();
$xsl->load('sample01.xsl');
$processor = new xsltprocessor();
$processor->importStyleSheet($xsl);
echo $processor->transformToXML($xml);
?>

XSLT書式

http://vosegus.org/guideline/xslt.html

例:そのノードのテキストが hoge の場合のみ ZZZZZZZZZ を表示する

<xsl:if test="contains(./text() , 'hoge')">
ZZZZZZZZZ
</xsl:if>

襟:デフォルト値をセットする

<xsl:param name="contents">デフォルト値</xsl:param>
No.741
04/08 10:00

edit

Xpath
XML

PHPでXMLパースする

PHPをXMLをパースしてオブジェクトに変換、変数に代入

simplexml_load_string() だけだと少し扱いにくい形(オブジェクト)で帰ってくるので json_decode() を使って配列にすると少し扱いやすくなります。

$xml = simplexml_load_string($html);
$xml_array = json_decode( json_encode( $xml ), TRUE );

● Message: simplexml_load_string(): Entity: line 1: parser error : Unsupported encoding x-sjis-cp932 エラーとなる場合の対処

返される xml が x-sjis-cp932 エンコーディングの場合エラーとなるので、次のように変換する。

 $data = mb_convert_encoding($data,"UTF-8");
 $data = str_replace("x-sjis-cp932","UTF-8",$data);
No.422
12/10 18:04

edit

PEAR
XML

RSSフィード(XML)をパースしてPHPオブジェクトに変換する【PEAR::XML_Serializer】

RSSフィード(XML)をパースしてPHPオブジェクト(や配列)に変換するには下記の2通りの方法があります

■1. PEAR::XML_Serializerを使用する方法

xml 文章を配列やオブジェクトにしてくれる PEAR::XML_Serializer

http://pear.php.net/package/XML_Serializer/download

からダウンロード

PEARでのインストール方法

pear install XML_Util
pear install XML_Serializer-0.18.0

でOK!

<b>またはこのファイルをダウンロード(phplib.zip)してサーバーにアップロードします。</b>

使い方

$url = "http://sankei.jp.msn.com/rss/news/points.xml"; // RSSフィードのURL
$xml = file_get_contents($url);
require_once "XML/Unserializer.php";
$parser = new XML_Unserializer(array('parseAttributes' => true));
$parser->unserialize($xml);
$data = $parser->getUnserializedData();
if (PEAR::isError($data)) {   print ('ERROR');   }
print_r($data);

エラー補足は PEAR::isError で行えます。

■2. SimpleXMLElement (要PHP5以降)を使用する方法

使い方

$url = "http://sankei.jp.msn.com/rss/news/points.xml"; // RSSフィードのURL
$xml = file_get_contents($url);
$xml = preg_replace( '/dc:/', 'dc_', $xml );
// <dc:subject> <dc:date> などを取得する場合は : を _ に置換する。
$data_obj = new SimpleXMLElement($xml);
$data = (ARRAY)$data_obj;
print_r($data);

どちらも簡単ですね!

添付ファイル1
phplib.zip ( 37.3 KBytes ) ダウンロード
No.258
03/18 09:59

edit

添付ファイル

XML
PEAR