XMLテンプレートを読み込み、テンプレート内の一部の値をPHPの配列のデータに置き換えるPHPコードを作成しています。現在、コードが実行されると、ループの各反復ごとにファイルが出力され、それぞれ正しい値が置き換えられます。反復ごとにPHPを作成するのではなく、同じXMLドキュメントにPHPを書き込む
私が直面している問題は、各出力を1つではなく同じXMLドキュメントにまとめることです。以下は現在のコードです。
<?
$filename = 'MYDRIVE\XML_TEMPLATE2.xml';
$contents = file_get_contents($filename);
$emaillist = array(array('fname' => 'Brad',
'lname' => 'BoBo',
'recipient' => '[email protected]'),
array('fname' => 'Josh',
'lname' => 'Jojo',
'recipient' => '[email protected]'),
array('fname' => 'Sam',
'lname' => 'Soso',
'recipient' => '[email protected]'),
array('fname' => 'Dave',
'lname' => 'Dojo',
'recipient' => '[email protected]'));
foreach ($emaillist as &$person)
{
$fname = $person['fname'];
$lname = $person['lname'];
$recipient = $person['recipient'];
$todaysdate = date("F j, Y, g:i a");
$find = array("[[firstname]]",
"[[lastname]]",
"[[recipient]]",
"[[todaysdate]]");
$replace = array($fname,
$lname,
$recipient,
$todaysdate);
$new = str_replace($find,
$replace,
$contents);
// This will open/ create the file if non-existent.
$handle = fopen("MYDRIVE/tempname.xml", "w+");
$filename = 'MYDRIVE/tempname.xml';
$filecontent = $new;
if (is_writable($filename))
{
print "<b>Data added to file:</b>";
print "<br>";
print "<br>";
if (!$handle = fopen($filename, 'a'))
{
print "Cannot open file ($filename)";
exit;
}
// Adds $filecontent to file.
if (fwrite($handle, $filecontent) === FALSE)
{
print "Cannot write to file ($filename)";
exit;
}
print "Success! <br><br> ($filecontent) <br><br> was added to ($filename)";
fclose($handle);
}
else
{
print "<b>Error:</b>";
print "The file $filename is not writable";
exit();
}
// Generate file name for use.
$filenamegen = date("d_h_i_s") . "_" . $person['recipient'];
if (rename ("MYDRIVE/tempname.xml", "MYDRIVE/" . $filenamegen . ".xml"))
{
print "File successfully saved as : $filenamegen";
print "<br><br>";
}
else
{
print "Error renaming file.";
exit();
}
print "</div>";
}
?>
上記のコードを実行すると、データのレコードごとに変数が正しく置き換えられて、4つのXML文書が作成されます。
私が直面している問題は、すべてのデータを単一のXMLファイルに取り込もうとすることです。誰かがこれに関するアドバイスを与えることができれば、それは非常に高く評価されるだろう。いつものように
おかげで、
'$ new 'を' $ filecontent'に( '=')設定するのではなく '' $ new'を '' foreach'-loopの後ろに '' fwrite'を追加します。 – Andreas