SimpleXMLでSJISのXMLファイルを書く

機能のエントリで、SimpleXMLでSJISのXMLファイルを読み込むと言うのを書きましたが、その後XMLファイルへの出力処理を試してみました。

まずは読み込み時と同じようにXMLを解析します。

# 一度文字列に読み込んでからUTF-8に変換後、XML解析
$xmlDoc = File_Get_Contents($xmlfile);
$xmlDoc = mb_convert_encoding($xmlDoc, "UTF-8", "SJIS");
$xml = simplexml_load_string($xmlDoc);

SimpleXMLでは、要素へオブジェクトとしてアクセスできるので便利。値を設定するときもそのまま。

$xml->TITLE = mb_convert_encoding($title, "UTF-8", "SJIS");

ファイルへの出力にはasXML()を使います。

$xml->asXML($xmlfile);

以上。

IIS+PHPでファイル書き込み時にPermission deniedが出る件

さて、先週から作り始めたXML読み込みプログラムもどうにかテスト環境でのチェックまで終えた(Apache+PHP)。
んじゃ、IISでも確認してみますかね、とURLにアクセスし、更新処理を実行したところ、

Warning: SimpleXMLElement::asXML([filename]) [function.asXML]: failed to open stream: Permission denied in [php-code] on line 30

と出てきてしまった。
んん〜?何の権限だ?フォルダかファイルのアクセス権か?でもどうやって確認して変更すればいいんだろう・・・。
と言うことで「permission denied iis php」でググったところ、以下のサイトを発見。
http://www.ekhoury.com/2007/01/15/permission-denied-php-on-iis/
エントリのURLがまんま検索キーワードだw
Google翻訳の力を借りて確認したところ、次のような手順で書き込みができるようになるらしい。

  1. エクスプローラで書き込みを行うフォルダを選択し、右クリックメニュー→プロパティを選択。
  2. セキュリティタブを選択。
  3. グループ名またはユーザー名の欄で、インターネット ゲスト アカウントを選択。
  4. 変更書き込み許可をチェックし、OK。

早速試してみると、みごと、無事に正常終了しました。