- ベストアンサー
php4でのxml上書き
はじめまして、phpでxmlの上書きをしたいのですが、 phpは <?php $xml_path = "gundam.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "</robot>"; $add_xml = "<gundam>\n<pilot>シーブック</pilot>\n<mobilesuits>ガンダムF91</mobilesuits>\n</gundam>\n".$replace_key; $result = str_replace($replace_key,$add_xml,$xml); $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); ?> xmlは <?xml version="1.0" encoding="Shift_JIS"?> <robot> <gundam> <pilot>アムロ</pilot> <mobilesuits>ガンダム</mobilesuits> </gundam> <gundam> <pilot>カミーユ</pilot> <mobilesuits>Zガンダム</mobilesuits> </gundam> <gundam> <pilot>ジュドー</pilot> <mobilesuits>ガンダムZZ</mobilesuits> </gundam> <gundam> <pilot>コウ</pilot> <mobilesuits>ガンダムGP01</mobilesuits> </gundam> <gundam> <pilot>クリス</pilot> <mobilesuits>ガンダムアレックス</mobilesuits> </gundam> </robot> と書いてあります。 最後にxmlを書き換えた部分を $fp = fopen($xml_path,"w+"); flock($fp, LOCK_EX); fwrite($fp,$result); fclose($fp); で上書きしたいのですができません。 何が問題なのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
1さんの回答に補足します。 詳細が不明なので一般的な例で説明しますと、ブラウザからphpを呼んでサーバーサイドスクリプトとして動作させる場合の所有権はWebサービスに属します。一般的なUnixマシンがWebサーバーの場合ならApacheかnobodyが所有者になるのでxmlファイルに対する書き込み権限を有しません。 一般的な回避策は該当ディレクトリと該当xmlファイルのパーミッションを666にすることです。 しかし、そのままファイルとディレクトリのパーミッションを666にすることはセキュリティ上問題があるので、ファイルの書き出し先をWebからアクセスできないディレクトリに変更して、インクルードする構造に変更する方が良いかと思います。 もしパーミッションを変更しても問題が解消されない場合、或いは条件が違う場合はエラーログを提示して頂ければ別の回答が出来るかも知れません。
その他の回答 (1)
- memphis
- ベストアンサー率40% (975/2395)
書き込み権限が無いからでは?
補足
回答ありがとうございます! xmlにですか?
お礼
返事遅れてしまいすいません。ありがとうございます! パーミッションを666にすることで出来ました。