こんにちは。PHP初学者で、同じ箇所に3日以上悩んでしまったのでご相談させてください。
前提・実現したいこと
sqlにてデータベースより取得した値で、動的にRSS/ATOMフィードを作成したいと思っています。
データベースに入っている記事情報の最新15件を取得し、実行時にatom.xmlとして書き出したいです。
実際、書き出すことはできたのですが、2回目以降に実行時上書きがうまくいきません。
該当のソースコード
php
1 2<?php 3 4 5 try { 6 $db = new \PDO('mysql:host=localhost;dbname=hogehoge;charset=utf8', hogehoge, hogehoge); 7 $db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); 8 }catch (\PDOException $e) { 9 echo $e->getMessage(); 10 exit; 11 } 12 13 14 // SELECT文を変数に格納 15 $sql = "select * from main order by time desc LIMIT 15"; 16 17 // SQLステートメントを実行し、結果を変数に格納 18 $stmt = $db->query($sql); 19 20 // foreach文で配列の中身を一行ずつ出力 21 foreach ($stmt as $row) { 22 23 $dir = './'; 24 $fileName = 'atom.xml'; 25 26 // 出力のバッファリングを有効にする 27 ob_start(); 28?> 29 <entry> 30 <title><?php echo htmlspecialchars($row['title']) ;?></title> 31 <summary><?php echo htmlspecialchars($row['summary']) ;?></summary> 32 <id><?php echo htmlspecialchars($row['id']) ;?></id> 33 <link><?php echo htmlspecialchars($row['link']) ;?></link> 34 <updated><?php echo htmlspecialchars ($row['time']) ;?></updated> 35 <author><name>hogehoge</name></author> 36 </entry> 37 38 39 40<?php 41$output = $output . ob_get_contents(); 42ob_end_clean(); 43} 44 45file_put_contents($dir . $fileName , $output, FILE_APPEND | LOCK_EX); 46?>
試したこと
上記コードの、file_put_contents()にFILE_APPENDとしているので上書きされずに、延々と最新記事を書き足していってしまうのですが、FILE_APPENDを消すと「2」と出力される、自分にとって謎な現象が起こってしまいます。
foreach()の使い方がいけないのか、ob_start()の使い方がいけないのか、あらゆるパターンを試したつもりですが、うまくいきません。
解決する為の方法をご存知の方がいらっしゃいましたら、
お力をお貸しいただけると嬉しいです。よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー