foxmail|データ
最近、Xiaoyang は PHP クラスメート ディレクトリを作成しました。生徒はここで名前、電子メール、OICQ、その他の情報を追加または変更し、mySQL データベースに保存できます。ある日、Xiaoyang は、PHP を使用して、学生がダウンロードして Foxmail アドレス帳に情報をインポートできるファイルを生成できたらいいのに、と突然思いつきました。
とにかくやってください、Xiaoyangはすぐにこの機能を開始しました。それはどのように達成されるのでしょうか?ここでは、名前、メールアドレス、OICQ のエクスポートについてのみ説明します。
情報が必要な場合は、Foxmail アドレス帳にインポートできます。もちろん、最初に Foxmail アドレス帳にインポートされるファイルの内容と形式を理解する必要があります。 Foxmail4.2 でアカウントのアドレス帳を開くと、メニュー バーの「ツール」-「インポート」で、Foxmail が「CSV ファイル」と「Wab ファイル」の 2 つの外部ファイルのインポートをサポートしていることがわかります。 CSV ファイルを生成することを選択します。では、Foxmail にインポートできる CSV ファイルの内容と形式は何でしょうか?まずは Foxmail から CSV ファイルをエクスポートして見てみましょう。 Foxmail のアドレス帳で空でないレコードのあるフォルダーを選択し、「ツール」-「エクスポート」-「テキスト ファイル」を実行し、ファイル名を「TEMP.CSV」として保存し、「次へ」で出力フィールドを選択します。 「名前」、「メールアドレス」、「OICQ」を選択し、「完了」をクリックすると、指定したパスに「TEMP.CSV」ファイルが生成されます。 Microsoft office シリーズをインストールしている場合、これはデフォルトで EXCEL で開かれるファイルであることがわかります。実際には、これをダブルクリックして開くと、インターフェイスが表示されます。図のようになります。
この場合、その記述形式を知る方法はまだありません。メモ帳で「TEMP.CSV」ファイルを開くと、その形式が非常に単純であることがわかります。図に示すように、ファイルの最初の行は Foxmail アドレス帳のフィールドで、他の行は値です。各フィールドと値は英語のカンマで区切られます。したがって、私たちは PHP でこの形式の CSV ファイルを生成し、他の人はそれをダウンロードして Foxmail にインポートできます。
ただし、解決する必要がある問題はまだあります。つまり、ファイル内で区切り値としてカンマが使用されているため、データベースのレコードに英語のカンマが含まれている場合はどうすればよいですか(注:以下の記号は、特に指定がない限り英語の記号を指します)?もちろん、データ内のカンマを最初に中国語のカンマに置き換えることもできますが、別の方法として、CSV ファイル内の対応するフィールドの両端に二重引用符 (つまり " "") を追加して区切る方法もあります。値、その間の英語のカンマは区切られた値としては使用されず、フィールド内の 2 つの連続した英語の二重引用符 (つまり、「"」) は区切られた値としてではなく 1 つとしてのみ表示されます。
これらを理解すると、CSV ファイルをエクスポートするための PHP ファイルを作成できます:
//この行は、スペースや改行を入れずに、プログラムの先頭に配置する必要があります。以下の header() 関数では、使用前にユーザーに何も出力できないためです。
$dfname="tofoxmail.csv"; //生成されたファイル名
//mySQLデータベースに接続します:
mysql_connect("localhost","yourname","yourpassword") または die("データベースに接続できません!") ;
mysql_select_db("卒業生") または die("データベース エラー!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //データテーブル内の指定されたレコードを選択します
//データがない場合は、次のようになります:
if(@mysql_num_rows($getdata)==0){
echo "Sorry, there is no data left!";
exit;
}
//ダウンロード用のファイルが生成されます:
header("Content-disposition: filename=$dfname");
echo "name, email address, OICQ, foxaddrID"; // 1行目、Foxmailアドレス帳のフィールドを出力します
$i=1;
while($row=mysql_fetch_array($getdata)){ // データ型の値を取得します
//データ内の各二重引用符を 2 つの二重引用符に置き換えます :
$row[name]=str_replace(""","""",$row[name]);
$row[email]=str_replace(""","" "",$row[email]) ;
$row[oicq]=str_replace(""","""",$row[oicq]);
// 対応するフィールドに対応する値の行を出力、各値は二重引用符とカンマで区切られます:
Echobase64_decode("DQo=").""$row[name]","$row[email]","$row[oicq]",$i";
/*上記の式では、「base64_decode("DQo "=")」は改行文字です。「n」が使用されていないのは、この 2 つが完全に同じではないためです。後者を使用すると、Foxmail のインポートが発生する可能性があります
*/
$i++;
}
exit;
}
>
< !-- ダウンロードリンクをクリックしないと、次の HTML コンテンツが表示されます -- >
<
< head>
< メタ http-equiv="Content-Type" content= "text/html; charset=gb2312">< title> データを Foxmail アドレス帳にエクスポート< /head>
< a href='this.location=this.location+"?action=downit'>ここにファイルを保存し、Foxmail アドレス帳にインポートします。 < br>
< B>< /B>< br>
< /body>
図のようにファイルを作成します。
Foxmail アドレス帳の [ツール] - [インポート] - [CSV ファイル] をクリックすると、データベース内の大量のデータが一度にインポートされます。
(上記のプログラムはApache+PHP4+mySQLおよびIIS+PHP4+mySQLでテストされています。)