スレッド表示 | フラット表示〕 全トピック 920 件中 782 番目 次≫ ≪前

PHP+XML+FLASH掲示板

created: 2003-10-11 06:13 | modified: 2003-10-16 11:59 | reply: 10

[747] PHP+XML+FLASH掲示板

user: なおひろ ホームページ | created: 2003-10-11 06:13
はじめまして。
PHPの勉強していていろいろなサイトを見ているのですが、ここはとっても柔らかい感じで安心します…。

質問させて頂きたいのですが、タイトルのようにPHP+XML+FLASHで掲示板を作りたいと思います。

FLASHの知識はそこそこあるのですが、PHPの知識は未熟です。
やりたいのは、FLASHからテキストを送り、それをPHPでXMLに加工する。という感じです。
例えば、
<bbs>
<article>
<name>なんたら</name>
<email>なんたら</email>
<message>なんたら</message>
</article>
</bbs>
というXMLがログファイルにあり(実際は改行等ないと思います)、そこに新たにFLASHから来た変数
name="かんたら"
email="かんたら"
message="かんたら"
をXML形式で追加出来たらいいかと思っています。
可能なのか、いったいどういう方法が効率がいいのか、よく分かりません。
FLASH側でXMLに加工した変数を送る事も可能ですが、どちらがいいのか…。

PHPのバージョンは4.2.0です。

おおよその流れだけでもご教授頂ければ幸いです。
よろしくお願い致します。
reply: 748 749 返信 編集 削除

[748] FLASH,XMLはよくわかりませんが。

user: hamaji | created: 2003-10-11 14:55
こんにちは。私はFLASH、XMLについてはまったくといっていいほど知識はありませんが。
ただ、PHP+FLASHという組み合わせはヒジョーに興味があります。
いくらPHPとはいえ、ユーザーインターフェースは貧弱ですからね。

> やりたいのは、FLASHからテキストを送り、それをPHPでXMLに加工する。という感じです。
できるでしょう。
ActionScriptのsendAndLoad()メソッドを使って値をPOSTでPHPへ送信します。
PHP側でそれを受け取り、表示させる。
簡単にいえばこんな感じでしょうか
PHP側では
$yourname = $_POST['name'];
などとして
<name><?php echo $yourname ?></name>
↑こんな書き方がXMLでできるかどうかわかりませんが。というようなかんじでしょうか。

あとはFLASHからテキストファイルに落として
それをPHPで読み込んで表示させるなどもできると思います。

> 可能なのか、いったいどういう方法が効率がいいのか、よく分かりません。
> FLASH側でXMLに加工した変数を送る事も可能ですが、どちらがいいのか…。
どの方法がいいかというのは個人の考えですからね?。なにぶん良くわかってないもので。。。
参考になるかどうかわかりませんがちょっと書き込ませてもらいました。
Parent: 747  返信 編集 削除

[749] 理屈はわかりますが・・・

user: ゆうじ | created: 2003-10-11 18:03
私もまだ未体験ゾーンなので、
参考になりそうなアプリでお話します。

以下は最近見つけたお気に入りです。
Flash + XML + PHP を使っている
コンパクトで良く出来たRSSリーダーです。
http://www.yasuhisa.com/is/fblogreader/

このRSSリーダーでPHPは、
Flash側で指定されたサイトから、RSS(XML)を読み込んで、
ログファイル(XML)に保存しています。
その後、Flashに対し「ログ更新済んだよ」とメッセージを送ってるようです。

1.RSSの読み込み部分を、FlashからPHPへのデータ授受に変える。
2.受け取ったデータをXMLに直し、ファイルに書き出す。

他も手を加える必要はあるでしょうが、
最低この2つの処理を盛り込めば、
雛形くらいは出来そうです。

# 時間さえあれば、私も取り組みたいと思っていたテーマです。
# PHPで提供できる情報でしたら、
# わかる範囲でご協力させていただきます。
# お気軽にお尋ね下さい。
Parent: 747  reply: 772 返信 編集 削除

[772] PHP側での処理について

user: なおひろ ホームページ | created: 2003-10-14 23:23
ゆうじさん
hamajiさん
お返事ありがとうございます。

> 以下は最近見つけたお気に入りです。
> Flash + XML + PHP を使っている
> コンパクトで良く出来たRSSリーダーです。
> http://www.yasuhisa.com/is/fblogreader/

> このRSSリーダーでPHPは、
> Flash側で指定されたサイトから、RSS(XML)を読み込んで、
> ログファイル(XML)に保存しています。
> その後、Flashに対し「ログ更新済んだよ」とメッセージを送ってるようです。
>
> 1.RSSの読み込み部分を、FlashからPHPへのデータ授受に変える。
> 2.受け取ったデータをXMLに直し、ファイルに書き出す。

僕がイメージしていたのはまさにゆうじさんのおっしゃるような流れでした。
そこでさらに伺いたいのですが、「FlashからPHPへのデータ授受」の部分を通常のフォームと同様の「POST」で送信した時、PHP側でXMLを生成する方法はどのようになるでしょうか?
僕の想像は以下です。

<bbs>
<article id=0>
<name>なんたら</name>
<email>なんたら</email>
<message>なんたら</message>
</article>
</bbs>
上記に、POSTで送られてきた
name="かんたら"
email="かんたら"
message="かんたら"
を追加し、
<bbs>
<article id=1>
<name>かんたら</name>
<email>かんたら</email>
<message>かんたら</message>
</article>
<article id=0>
<name>なんたら</name>
<email>なんたら</email>
<message>なんたら</message>
</article>
</bbs>
を生成する。
この生成の仕方ですが、「"<article>略</article>"を見つけたらそのすぐ直前に新しい"<article>略</article>"を追加しろ」とやればいいのかなと思うんですが、その具体的な方法がちょっとわかりません。
または、パーサを生成してXMLを解析するとスマートに追加が出来るのでしょうか?

現状、特に大規模な掲示板を作る予定等ないのですが、なるべく汎用性のある方法で作ってみたいなと思っています。
データベースは使えないのですが…。

> # 時間さえあれば、私も取り組みたいと思っていたテーマです。
> # PHPで提供できる情報でしたら、
> # わかる範囲でご協力させていただきます。
> # お気軽にお尋ね下さい。

有難う御座います…、心から…。
とても心強い限りです。

よろしくお願い致します。
Parent: 749  reply: 773 返信 編集 削除

[773] 汎用ではありませんが

user: ゆうじ | created: 2003-10-15 14:10
XMLに関する知識がほぼゼロに等しかったので
昨夜少々かじってみました。・・・が、
XMLと一口に言っても情報量多過ぎました。(@?@)

わかったところでは、
PHP標準のXMLライブラリでは解析以上のことは提供されていないようです。

足りない部分は自分で書くか、ライブラリを探してくる必要があります。

汎用性のあるものとなると、
PEARなどのライブラリを使うと出来るのかもしれませんが、
PEARもXMLも手を出してないところでして、
実際のところスマートに追加出来るものなのか判断できません。


あまり汎用性のない方法でもよろしければ、
XMLをただのテキストログとして処理してしまうほうが簡単かも。

入力チェックやエラーチェック、ファイルロック、
二重投稿防止、データが無い場合の処理などを省いてますが
大筋こんな感じでできると思います。
(これならXML関係ありません。)

<?php
// ファイル読み込み
$log = "bbs.xml"; // ログファイル名
$temp = file($log);
array_shift($temp); // 1行目を捨てる

// 新しいIDの獲得
preg_match("/ <article id=\"([0-9]+)\">/", $temp, $number);
$newid = $number[1] + 1; // IDだけ取り出して+1

// POSTデータをログ書式に埋め込み
$newbuf = "<bbs>
<article id=\"".$newid."\">
<name>".$_POST['name']."</name>
<email>".$_POST['email']."</email>
<message>".$_POST['message']."</message>
</article>
";

// データ書き出し
$fp = fopen($log, "w");
fwrite($fp, $newbuf); // 新しい記事を書き出し
fwrite($fp, implode("", $temp)); // 既存を書き出し
fclose($fp);

// メッセージ送信?

?>

ヒントになるかな?。
Parent: 772  reply: 774 返信 編集 削除

[774] ログファイルの改行について

user: なおひろ ホームページ | created: 2003-10-15 17:55
ゆうじさん

ありがとうございます。
XMLまで調べさせてしまったようで…。

とりあえずゆうじさんのおっしゃるように、ログをテキストとして作成するために頂いたコードを元にサンプルを作っていたのですが、ログが下記のような状態になってしまいます。

<bbs>
<article id="1">
<name>いいい</name>
<email>いいい</email>
<message>いいい</message>
</article>
<article id="0">
//空行
<name>あああ</name>
//空行
<email>あああ</email>
//空行
<message>あああ</message>
//空行
</article>
//空行
</bbs>
さらに続けると改行がさらに入って来てしまいます。
改行コードの問題でしょうか?

どう対処すればよいのでしょうか??
Parent: 773  reply: 775 返信 編集 削除

[775] 環境は?

user: ゆうじ | created: 2003-10-15 19:58
WinXP + Apache1.3.28 + PHP4.3.3(DSO)
以上の環境で、
あらかじめログファイルを作成しておいて、
書き込みテストしたところ、
私の方では余分な改行は入りませんでした。

どのような環境で実行されてますか?

もし、Windows上で書いて、Linux系サーバーにアップロードしたならば改行コードかも。
ログファイルをバイナリモードで転送してることはありませんか。


別件ですが、
先のスクリプトでは、IDが取り出せてませんでした。
以下のように訂正しました。
// 新しいIDの獲得
list(, $val) = each($temp);
preg_match("/<article id=\"([0-9]+)\">/", $val, $number);
$newid = $number[1] + 1; // IDだけ取り出して+1


あとで盛り込まなければならない処理にはこんなのがあります。
改行の件が片付いたら、順番に行きましょう。

1)$_POSTデータのチェック
2)エラー処理
3)二重投稿防止
4)排他ロック
Parent: 774  reply: 776 返信 編集 削除

[776] Re.環境は?

user: なおひろ ホームページ | created: 2003-10-15 21:26
ゆうじさん

> WinXP + Apache1.3.28 + PHP4.3.3(DSO)
> 以上の環境で、
> あらかじめログファイルを作成しておいて、
> 書き込みテストしたところ、
> 私の方では余分な改行は入りませんでした。
>
> どのような環境で実行されてますか?

phpdevを使ってテストしていました。
本番にアップしたら余分な改行は入りませんでした…(お手数おかけしました)。
改行コードの理解がいまいちなのですが、phpdevを使った場合と本番サーバを使った場合ではどういう理屈の違いで余分な改行が入ってしまうのでしょう??
ちなみに環境は、
phpdev:apache 1.3.27+php4.2.3
本番:apache1.3.26+php4.2.2
PC:Win2000
です。

これからFLASHを絡ませてサンプルを作っていこうと思います。
ゆうじさんご指摘の処理(↓)を一つずつ片付こうと思います。

> 1)$_POSTデータのチェック
> 2)エラー処理
> 3)二重投稿防止
> 4)排他ロック

それから、削除用のパスワードですが、これは<name>や<email>と同様に<password>を作って保存しておけば良いのでしょうか?
それともパスワードには何か特別な処理が必要でしょうか?

よろしくお願い致します。
Parent: 775  reply: 777 返信 編集 削除

[777] パスワードは暗号化

user: ゆうじ | created: 2003-10-15 23:12
サンプルスクリプトの中では、
改行コードを削ったり加えたりしていないので
phpdevでも変わりないはずですが・・・。
設定の違いでしょうか、
ちょっと思い当たることがありませんでした。

> それから、削除用のパスワードですが、これは<name>や<email>と同様に<password>を作って保存しておけば良いのでしょうか?
> それともパスワードには何か特別な処理が必要でしょうか?

そうですね、<name>や<email>と同様に
<password>xxxxxx</password> として
レコードに加えればいいですね。
パスワードは前もって、md5 や crypt などで、
一方向暗号化しておくほうが良いと思います。


でも、削除できるようにするならば、
後から記事を特定でないとこまるので、
やはりXMLパーサーに食わせないといけませんね。
仕様を決めるのが先決でした(^^;)
Parent: 776  reply: 780 返信 編集 削除

[780] Re.パスワードは暗号化

user: なおひろ ホームページ | created: 2003-10-16 04:29
ゆうじさん

> そうですね、<name>や<email>と同様に
> <password>xxxxxx</password> として
> レコードに加えればいいですね。
> パスワードは前もって、md5 や crypt などで、
> 一方向暗号化しておくほうが良いと思います。

「md5」や「crypt」など全く知らなかったので調べてやっと分かりました。クライアントからサーバーにはパスワードがそのまま送られるけど、それをサーバーに保存する時には暗号化しておく、という感じですよね?

> でも、削除できるようにするならば、
> 後から記事を特定でないとこまるので、
> やはりXMLパーサーに食わせないといけませんね。

記事を削除する方法についてかなり頭が混乱しながらも素人なりに考えているのですが、次のような方法は無理でしょうか?
●まず、ログファイルは次のように生成していきます。
<bbs>
<article id=3>略(nameやemailやpasswordなどのノード)</article>
<article id=2>略(nameやemailやpasswordなどのノード)</article>
<article id=1>略(nameやemailやpasswordなどのノード)</article>
</bbs>
●「id="2"、password="1234"を消してくれ」と依頼が来る。
●"file関数"で配列を作る。
●id="2"を探す。
●見つけたらその記事のパスワード(暗号化されている)と送られてきたパスワード(暗号化)を比較する。
●一致したら配列からその要素を消す。

パーサで解析する方法だと指定したノードのみ削除したり追加したりが出来るのでしょうか…。

日々苦戦する中、ゆうじさんの作成された"sbbs"をダウンロードして研究してみようと思ったのですが、あまりの長さに逃げ出しました。
特にエンコードの処理がよく分かりませんでした…。

もうちょっと頑張ってみます。
Parent: 777  reply: 781 返信 編集 削除

[781] 1レコード1行

user: ゆうじ | created: 2003-10-16 11:59
> 「md5」や「crypt」など全く知らなかったので調べてやっと分かりました。・・・

ピンポン♪
ブラウザでログファイルに直アクセスされても、
パスワードは読めないので少し安心♪


> 記事を削除する方法についてかなり頭が混乱しながらも素人なりに考えているのですが、次のような方法は無理でしょうか?

ログファイルのフォーマットを
1レコード1行にするという手がありましたね。
気づきませんでした。


> パーサで解析する方法だと指定したノードのみ削除したり追加したりが出来るのでしょうか…。

出来るようです。
私のスキルがついてかないだけで・・・。
PHP正規サポート外ですが DOMXML とか
PEAR にそれらしきライブラリがあります。
Parent: 780  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 782 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑