• 締切済み

【PHP XMLファイルの最終行を削除する方法】

【PHP XMLファイルの最終行を削除する方法】 こんにちは。お世話になります。XMLファイルの最終行を削除する方法を教えていただけないでしょうか。 例えば、以下の【sample.xml】というファイルの -------------------- <pencli> <color>赤</color><size>60</size> <color>青</color><size>80</size> </pencli> -------------------- の</pencli>だけ削除する方法が知りたいです。 以下のスクリプトでフォームからPOSTで受け取った内容を書き込むことはできたのですが、 削除の方法が、調べてもどうしてもうまくいかず相談させていただきました。 どうぞよろしくお願いいたします。 <?php $color= $_POST["color"]; $size= $_POST["size"]; $xml = ""; $xml .= "\r\n"; $xml .= "<color>" . $color. "</color>"; $xml .= "<size>" . $size. "</size>"; $xml .= "\r\n"; $xml .= "</pencil>"; $fp = fopen("sample.xml","a+"); fwrite($fp,$xml); fclose($fp); ?>

  • PHP
  • 回答数1
  • ありがとう数2

みんなの回答

回答No.1

$xml .= "</pencil>"; を書かなければよい。

関連するQ&A

  • 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); で上書きしたいのですができません。 何が問題なのでしょうか?

    • ベストアンサー
    • PHP
  • ログファイルの古い日付の行を削除する方法について

    下記にアクセスした場合、このプログラムにアクセス時、sample.txtにアクセス記録が保存されますが、このままではログファイルが一方的に多くなります。 その為、例えばもう必要ないと思われる1年以上前のアクセス記録を自動的に削除したいと思ったのですが、どのように記述すれば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 <?php $fp = fopen("sample.txt", "a+"); flock($fp, LOCK_EX); $log_data = date('YmdHis') . "\n"; fwrite($fp, $log_data); fclose($fp); ?> なお、データベースは使用できないということでお願いします。 また、レンタルサーバを使用しており、サーバ管理者の権限が必要な対応も使用できないということでお願いします。 以上、よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでのファイル操作

    Phpで一覧画面を作成しています。 フォームからの情報をリストごと各行でテキストファイルに書き込ませています。 管理画面で削除、変更を行いたいんですが、特定のファイルの行数を削除できないので困っています。 $garls_list = file("./dat/garls_list.php"); $fp = fopen("./dat/garls_list.php", "w"); foreach ($garls_listt as $dat_line => $new_list) { if ($dat_line == $_POST["list"]) { // 何も書き込まない→この行を削除したと同一 } else { fwrite($fp, $new_list); } } fclose($fp); これだとファイルが真っ白になってしまいます。 詳しい方がいらっしゃいましたらご教授お願いします。 . グレード この質問に補足する.

    • 締切済み
    • PHP
  • 任意の行を修正し、ファイルを上書きしたいのですが…

    <html> <head> <title>修正・変更</title> </head> <body> <?php  $aaa = $_POST['aaa'];  $bbb = $_POST['bbb'];  $ccc = $_POST['ccc'];  $dummy = $_POST['hidden'];  $lines = array($aaa, $bbb, $ccc,$dummy);  $lines = implode(",", $lines);  $lines = mb_convert_encoding($lines, "SHIFT-JIS" , "EUC-JP");  $file = file('sample.csv');  $file[$i] = $lines."\n";  $fp = fopen("sample.csv","w+");  for($i=0 ; $i<count($file) ; $i++) {   flock($fp, LOCK_EX);   fwrite($fp, $file[$i]);  }  fclose($fp); ?> <div align="center"> 修正・変更しました!! <br><br> <input type="button" name="button" value="戻る" onClick="location.href='aaa.php'"> </div> </body> </html> 上記の様なプログラムを「CSVファイルを書き込む方法」を基に書いて みました。 しかしながら、どうしても任意の行のデータを修正して上書きする ことができません(涙 どうやったら任意の行のデータかどうかを認識して、上書きする事が できるのでしょうか?? 皆様お忙しい中かとは思いますが、ご教授して頂けませんでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpを使ってxmlの追加書き出しについて教えてください

    現在flashからphpに位を渡して、そこからxmlで書き出すということをしています。 phpからxmlを作成することは、なんとか無事にできるのですが、この場合一つのXMLデータしか作成できません。 fopen($fname."a")を使って追加で作成しようとすると $buf ="<?xml version=\"1.0\" encoding=\"" . $encode."\" ?> \r\n"; が二重に作成されてエラーが出ます。なにか解決策はないでしょうか? お願いします。 ソース ------------------------------------------------------------ <? function xml_write($fname,$roottag,$id,$encode,$val) { $file = fopen($fname,"w"); // XMLヘッダ書き出し // $buf ="<?xml version=\"1.0\" encoding=\"" . $encode."\" ?> \r\n"; fputs($file,$buf); // XMLルート書き出し // fputs($file,"<".$roottag.">\r\n"); // XMLルート書き出し1 // fputs($file,"<".$id.">\r\n"); // XML本文書き出し // foreach($val as $key => $oneval) { fputs($file,"<".$key.">" . $oneval . "</".$key.">\r\n"); } // XMLルート書き出し1 // fputs($file,"</".$id.">\r\n"); // XMLルート終了 // fputs($file,"</".$roottag.">\r\n"); fclose($file); } xml_write("./test/test.xml","doc","object","Shift_JIS",$_POST); ?> -----------------------------------------------------------------

    • ベストアンサー
    • PHP
  • csvの内容を行単位で削除したい

    getでidを渡し(id.php)、受け取った別のphp(sakujyo.php)ファイルで そのidが含まれているリンクをクリック後 削除したいのですが 削除の方法がどのサイトをみても 私の理解力不足+知識不足で理解ができませんでした。 ロジックは一旦すべてのファイルを読み込んで 特定の行を削除後、再度上書きという流れは わかったのですが、それをプログラムに書き直すと どうしてもその通りできませんでした。 ==csvの内容== [id1],[ふりがな1],[なまえ1],[tel1] [id2],[ふりがな2],[なまえ2],[tel2] [id3],[ふりがな3],[なまえ3],[tel3] <id.phpのソース> <?PHP $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; echo "<a href=\"sakujyo.php?$id\">$id</a><p>"; } ?> <sakujyo.phpのソース> <?PHP $id_url = $_GET['id']; $fp = fopen("data.csv", "r"); while ($data = fgetcsv($fp, 10000)) { list($id, $furigana, $name, $tel) = $data; //ここから下がどうすればいいの悩んでいます。 if($id_url = $id){ $id = ""; $furigana = ""; $name = ""; $tel = ""; } $fp = fopen("data.csv","a"); fwrite($fp, "$id, $furigana, $name, $tel\n"); } ?> sakujyo.phpの if($id_url = $id){ から下は変数を空にしているだけで 結果は行の削除ではなく,,,,を書き込んでいると思うのですが それ以外に方法が思いつきませんでした。 このCSVファイルの行単位の削除方法をご存知の方がいらっしゃいましたら大変恐縮ですがご指導を頂戴できませんでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPでCSVファイルの特定行のみ表示

    PHPでCSVファイルを読み込ませるにあたり、「クエリで指定した特定の1行だけ」を取りだしたいと考えています。 下記だと、1行目からクエリで指定した特定行までの抽出が可能です。 hoge.php?repert=5  → 1から5行目までが表示される。 従い、下記から特定行より上の行を削除すれば、当方が考えている「クエリで指定した特定の1行だけ」を取りだすことになりますが、その方法がわかりません。 ご教示いただきたくお願いいたします。 <?php $repeat = $_GET['repert']; $fp = fopen("file2.csv", "r"); $count = 1; while ($data = fgetcsv($fp, 10000)) { if ($count > $repeat) { break; } print <<<EOD $data[0]・$data[1]・$data[2]<br> EOD; $count++; } fclose ($fp) ?>

    • ベストアンサー
    • PHP
  • PHPのファイル操作

    テキストボックスの値をPOSTで送信し、日時とユーザが入力した値を1行ずつファイル(review.txt)に保存し、ページ下部にファイル内容を1行ずつ表示するプログラムを作成しましたが、ブラウザに発言履歴が残りません。どの部分を修正すればいいですか? <?php //ブラウザに履歴がのこらないです $filename = './review.txt'; $comment = ''; $date = date('m/d H:i:s'); if ($_SERVER['REQUEST_METHOD'] === 'POST') { if (isset($_POST['comment']) === TRUE) { $comment = $_POST['comment']; } if (($fp = fopen($filename, 'a')) !== FALSE) { $result = fwrite($fp, $comment . '-' . $date . "\n"); if ($result === FALSE) { print 'ファイル書き込み失敗: ' . $filename; } fclose($fp); } } $work = []; if (is_readable($filename) === TRUE) { print "\n"; if(($fp=fopen($filename,'a')) !== FALSE) { print "\n";} while(($tmp = fgets($fp)) !==FALSE) { print "\n"; $work[] = htmlspecialchars($tmp,ENT_QUOTES,'UTF-8'); } fclose($fp); } else { print "\n"; $work[] = 'ファイルがありません'; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <h1>ファイル操作</h1> <form method="post" > <label><p>発言:<input type="text" name="comment"><input type="submit" value="送信"></p></label> </form> <p>発言一覧</p> <?php foreach ($work as $value){?> <p><?php print $date; $value?></p> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • phpでファイルが削除できない

    こんにちは。 ファイル名の書かれたdir.txtを開いて、その中から1日以上経過したファイルを削除するtime.phpを作成しようと思っています。 実行してみると、24時間経過したファイルがあっても 「Warning: unlink() [function.unlink]: Permission denied in C:\Program Files\xampp\htdocs\test\time.php on line 33」 というエラーがでて削除できない 実行結果にprintするように指定していない$imaの数値「1128673152」が表示される。 のですが、どこに間違いがあるのでしょうか? time.phpの内容 ---------------------------------------------------------------------- <html> <body> <?php // ファイルを読み込み専用でオープンする $fp = fopen('dir.txt', 'r'); // 終端に達するまでループ while (!feof($fp)) { // ファイルから一行読み込む $line = fgets($fp); $line = rtrim($line); // ファイルの更新時間を調べる $kousin = filemtime("$line"); // 今の時刻 $ima = time(); // 経過時間を計算する $keika = $ima - $kousin; // 出力する print $line; print "<br>\n"; print $ima; print "<br>\n"; print $kousin; print "<br>\n"; print $keika; print "<br>\n"; clearstatcache(); if ( $keika > 86400 ) { unlink( "$file" ); } } // ファイルをクローズする fclose($fp); ?> </body> </html> ----------------------------------------------------------------------

    • ベストアンサー
    • PHP
  • PHP5のsimplexml_load_fileで取得した結果をファイルに書き込みたい

    よろしくお願いします。 PHP5でSimpleXMLを利用して得られた結果をファイルに書き込む、つまりキャッシュを保存したいのですが、以下のようにやっても作成されるファイルは空のままです。ディレクトリモードは755です。 $url = "http://hoge.co.jp/index.php?a=123"; $cache_file = md5($url); $xml = simplexml_load_file($url); $fp = fopen($cache_file, 'w'); fwrite ($fp, $xml); fclose($fp); どうかご教授よろしくお願いします。

    • 締切済み
    • PHP