せっかくだからPHPで掲示板作ってみませんか?
Perl + CGI とか色々ありますけど、サーバ管理してるものとしては重いんですよ
結構回線食ってますんで、できれば軽い掲示板を使って欲しいです
PHPだと文法エラー等がある場合、エラーメッセージが出ると聞いたのだが、
そんなもんは出なくて、
白紙(IEでソース見るとレンタルサーバの広告のみ)しか出ない。
これはいったい何のエラーなんだか。 >>221
サーバによっちゃエラーメッセージでないよ。 ファーストキスはエラー吐く。
しかし奴はECUで書かなないとあかんのでめんどいのー。
ところでレンタルスペースのミルトクラブはトップからphpなのはいいが、
エラーメッセージさらしっぱなしでひじょうにみっともないんだが…。
直す気ないのか? PHPの掲示板でお勧めのLOCKあります?
$fp = fopen ("$logfile","a");
flock($fp,2);
fputs($fp, $hoge);
flock($fp,3);
fclose($fp);
で効きますか?
配布などは考えてません。 >>229さんではありませんが、私も良いLOCK方法を知りたいっす。
Cのflockと同じものなのか、それともPHPらしくもちょっと実用的にっていうか
229さんが書いたコードでオッケーな感じになっているのか……。
PHPのflockの中身を知りたいです。
あ。ソースを見ればいいのか。逝ってきます……。 PHP初心者だけどPHPを学習しつつ
スレッドフロート式掲示板の開発を進めている。
学習しながらなんで非常に時間掛かってるけど。
只今の進行状況:3%ってとこか? でもPerlの心得はあるからそれほど苦労はしてないけどね。 PHP+RDBMSを使ったツリー型のBBSで、
ツリー表示をする際のアルゴリズムとデータベースの構成を説明して貰えませんかのう。
PHP-Nukeのソース読んだけど理解出来ない...(・ A ・)
・[ 1 ] 逝ってヨシ
・[ 2 ] あぼーん
・[ 4 ] あぼーん
・[ 3 ] ワショーイ
↑こういう表示がスマートにできるようなアルゴリズム.....。
レスのテーブルに子レスIDのデータを持たせようとすると、
複数のレスがついた場合を考えて配列にしなきゃいけない。
レスのテーブルに親レスIDのデータを持たせると、
こんどは描画の際に面倒。
あとはレスに階層の深さテーブルを持たせるとか、
子レスの「数」を親レスに持たせるとか...。 ああ面倒。
php-nukeはいったいどうやって。
ttp://phorum.org/support/list.php?f=1&collapse=0 >>234
データベースは知らんが
W1・新規スレッドの>>1とそれに対するレスを区別しないで時間順にテーブルにぶち込む。
その際、ユニークなメッセージIDを振る。
W2・レスはその返信先のIDをリファレンスとして保持、>>1は空欄のまま。
R1・書き出し時にリファレンスの項目を参照して1を取り出す。(時間順に並んでいれば普通は最初だが)
R2・1のメッセージIDでリファレンスを検索。一致するものを配列として取り出す。見つからなければreturn。
R3・とりだした配列の要素へR2の手順を実行。
な感じじゃないか?
要はただの再帰呼び出しだが。 ウチは、IDとか親記事のIDと階層の数字(*)を持たせて
再帰呼び出ししてます。
・[ 1 ] 逝ってヨシ *0
・[ 2 ] あぼーん *1
・[ 4 ] あぼーん*2
・[ 3 ] ワショーイ *1
作るのと関係無いんだけど、
http://bbs.rakusagashi.com/free/sample/bbs.php?db=sample
↑の掲示板、メールアドレス入力するところに
'>'>'>">">'>">'><IMG src='mailto:unko.ne.jp'><xmp>
って入力して投稿するとローカルでのみ、凄い事になるんだけど・・・。
他にもこの掲示板にセキュリティホールありますか?
教えて君でスマソ。 (´-`).。oO(>>163はどこに逝ってしまったんだろう…?) bbsxml.php$B$H$+$G7G<(HD$,(BXML$B=PNO$5$l$k$H$J$*M3(B 2ちゃんねる風の掲示板はどの様に作ればいいのですか?
教えて下さい。あと、素材があったら貼っといて下さい。
>>252
さっさと責任取ってくれんか?クソ人間。
2chの掲示板は何を使ってますか?
http://pc.2ch.net/test/read.cgi/php/1037459580/l50
各位。
PHPで掲示板なら昔作ったけど。ソースいる? >>253
>PHPで掲示板なら昔作ったけど。ソースいる?
俺も作った。好感しようか(w 簡単な掲示板ならperlでかくより、PHPのほが楽じゃないすか?
便利そうな関数がごまんとあるし(perlでも多いと思ったのに・・)
データベースをそこそこさわり始めるとある程度の事までは
わかるんだけど、バキュームとかバックアップやらの事が出てきはじめると
ワケワカメになる。
掲示板とかでDB使うとそうとうグシャグシャな状態になりそうな気が
するんだが、大丈夫なもんなのか?
容量の問題もあるし・・・ もし、2ch型の掲示板をPHP+RDBMで作る場合、
テーブルの構造はどんな感じになるんだろうか?
PHPの側からテーブル作ったりできんのか?
なんかイメージするにスレッド毎にテーブルがあった方が
スッキリ管理しやすいようにおもうんだが、、、、、
でも、それじゃぁDB使う意味ないのか?
まぁ、厨房の独り言でし。 >便利そうな関数がごまんとあるし
PHPに5万も標準の関数はありませんとか言ってみるテスト
>もし、2ch型の掲示板をPHP+RDBMで作る場合、
>テーブルの構造はどんな感じになるんだろうか?
1つの板につきスレッドテーブルと記事テーブルを各1個 >1つの板につきスレッドテーブルと記事テーブルを各1個
そんだけでいいんだ。そうだよなぁDBでしかもリレーショナルだもんね(ワ。
漏れがPerlで作ったBBSはしこたまファイルが出来るから
dataやらのディレクトリをのぞく度に鬱になる。 >>262
それは、もしかしてPerl + CGIの事ですか? >>262
+ = de
Perl + CGI = Perl de CGI php+MySQLで掲示板作っているけど、スレッドテーブルなんか使わないなぁ。
親スレで検索すればいいだけじゃん。テーブルを分ける必要は無いと思うのだが。。 でも、想像してみるに、記事用のテーブルはいろんな
スレッドのデータがグチャグチャに入ってて、そのグチャグチャを
DBは一生懸命検索しなきゃいけないわけでしょ。
もし、1スレッドに1テーブルだと検索する手間が省けてかなり
早くなりそうな気がするんだが・・・・。
メンテ的にも1掲示板で持てるスレッド数が決まっている場合、
さくっとテーブルの削除ができる。
ところでスレッドの順位のテーブルも必要なんじゃないか? 親スレを示すフィールドと、スレッドの順番を示すフィールドがあれば、ソート出来るじゃん。
検索し、並び替えるのが得意なDBにとって、順番やスレッドがぐちゃぐちゃなんてたいした手間じゃないと思うけどな。 >262
まさか、perl == CGI とか思ってやしないよな。
と煽り返してみる。 必要以上にテーブル分けして、外部ジョイーンとか連発しなければ遅くはならないとYO。
あと、like で or な検索連発してみたり(しないか)。
つーか、BBS程度のシステムなのに、絶賛稼動中なロジックの中で create table するのって、
ちょっと正気の沙汰とは思えない、とか。
1スレ=1テーブルって、どういう設計よ。 >つーか、BBS程度のシステムなのに、絶賛稼動中なロジックの中で create table するのって、
>ちょっと正気の沙汰とは思えない
禿同 ありがちな例:
"板コード"をpKeyにして、"スレコード"で別テーブルぶらさげて、
他になんか文言とか付随データをVARCHARでいくつか付けておいて、
その後その別テーブル上に「書き込みindex」をキー、スレコードはfKeyで、
カキコの中身はVARCHAR(256)位でまとめればいいんじゃないのかな。
DBだと記事の削除とか楽だからいいよね。
テキストファイルだと削除が大変。
漏れは
1) 該当スレのログファイルをオープン
2) ファイル全体を配列に読み込む
3) 該当行を配列から削除
4) 元ファイルに書き込む
5) スレッドインデックスファイルの「レス数」を変更
という風にやっています。
なんかいい方法ありませんかね。 >>272 さん。
その処理って、ナニでやってるの?Perl?
オレは基本的にJava野郎で、Perlはすでにウロ覚え状態です。
前にServlet(&JSP)で、個人的にソレっぽいもの作った時は、
TextFileとして記録されるLogのフォーマットを、HTTPのPOST内容っぽい
(つまりバウンダリ文字列で区分する)形で記録するようにしました。
それ専用の汎用ParserClassを作って、Servletで使用って感じで。
でも、結局TextFileに記録って時点で、あまり凝った事はやりづらいです
よね。
Stringの塊を整形して、取り出す時は部分取得して...。
それでもPerlの場合正規表現は最初からあったけど、JavaにRegExpが標準パッケージ
として含まれたのって最近だし...。
やっぱDBがイイすね。楽。 >>272
1) 該当スレのログファイルをオープン
2) 新しいファイルを作る
ループ{
1) ログファイルから次の「1行ダケ」読み込む
2) 該当行じゃなければ、新しいファイルに行を書込む
}
3) 元ファイルを削除
4) 新しいファイルを元ファイル名に変更
5) 「レス数」とやらを変更
とやるのが一般的だよっと。
世間の参考書は全行読むのが多いよなあ。
出版社にはこの辺チト配慮してほすぃ。
>>274
どもです。
確かにメモリ食いまくりですね。
私も最初は、
1) インデックスファイルなど小さいモノはそのまま読み込む
2) 大きいモノは1行づつ読み込む
としていましたが、
掲示板の内容をhtmlに書き出すときに、
<html>から</html>まで全部変数に入れて、
一気に書き出す。
という方法をとってからは、ファイル全部読み込むことにしました。
まあ、ログサイズは大きくならないようにしてますけど。
続き
たとえば「最新10レスを表示」する場合、
最初の設計時には
1) 最新10レスが何番目のレス(start)から何番目のレス(end)なのかを計算
2) ログファイルをオープン
3) 1行づつ読んで、(1)のstartにきたら内容を配列に読み込む
endにきたらファイルを閉じる
という風に考えていたのですが、
よく考えてみれば、(1)を計算するにはファイルをあけて何行あるかを
feof まで1行づつ読み込むループをして調べなくてはならないですね。
それなら最初から全部読み込んでしまえ。となったわけです。
それからstart、endを計算して、いらない部分を配列から消すと。
272は始めから改善する気がなさそうな気もするけど、一応レスってみる事に。
例えば、PHPで初めの10行をとばすなら、
$begin = 10;
while($rec = fgets($FP,'12345') and $begin) {$begin--;}
while($rec = fgets($FP,'12345')) {読み込みたい件数だけ配列に入れてループ抜ける}
Perlかもしれないから一応補足。
while($rec = <FH>) {$begin--; last if(!$begin);}
while($rec = <FH>){読み込みたい件数だけ読み込む}
てな感じでやりなって。
HDへのアクセス時間短縮&メモリ空間になるでしょ。
うちで作ったスレ式掲示板はこんなかんじ。
板毎にファイルを2つ作りそれぞれ
A:書き込みに番号を付け1行にまとめて追記
B:スレッドの構造を1スレ1行に書き込み番号を連ねて収納
スレッドを表示する時はB内の所望の行を読み、それに基づきA内の行を吐く。
age処理はBの行の順番を入れ替える。レス削除はBの該当番号を消し、
スレッド削除はBの1行を消す。Aは出来るだけいじらない。
lockの手順とかしっかりしないと嵌る。
SQLはいじった事ないけどねヽ( ´ー`)ノ 漏れの作った2ch型はレス毎の位置を記録したのを別に持っていて、
read.cgiではseekするようにしてる。 あの、Java野郎なんですけど、
2chの発言内容って、htmlタグを全て排除してるじゃないですか。
でも、http://www.yahoo.co.jp
は、別画面が出てくるように、http://***.2ch.net/"""
はスレッドを表示する…
それと、>>n はスレ内のレスを直接表示…と、
よく出来ていると思うのですが、これに近い処理をするPHPやPerlの
ソースはありませんか。Javaで書いてみたいのですが…もしくは、
同じ処理をするJavaソースがあれば教えて下さい。。。
PHPとPerlはうろおぼえでGoogle探しても色々あって、どれがいいのか、はて、、です。
read.cgi(pl)とread.phpは17氏のスクリプトについてたが。 >>281
17にアクセスしても404なんですが、、、どこかに転がっていませんか。
googleでさがしたんですが、ウトゥ- >>277
レスありがとうございます。
while($rec = fgets($FP,'12345') and $begin) で and $begin という使い方は知りませんでした。
これは便利ですね。早速使ってみます。
さて、上述の、「ファイルを舐めないと総レス数がわからないので、たとえば「最近10レス」が
どのレスからどのレスまでを計算するには、ファイルを舐めないといけない」を
上手く解決する方法はありますか? この問題さえ解決できれば、必要な行だけを配列に
読み込む方式に移行できます。
よろしくお願いします。 Perl + CGIって何だよ(藁
じゃあ Shift_JIS + html もいいのかw
誰も変だと思わないのか?
>>283
何故最新10レスを計算する必要があるのかナスカの地上絵よりも謎だが、
ツリー形式掲示板なら、記事追加時に記事の情報を別に記録しておくとか
最新記事がファイルの先頭に記録するタイプなら、最初の10件だけ読み込む
2ch式掲示板なら、書込み時にftellして、読み込み時にfseekする
固定長ファーマットにしてランダムアクセスする手もある
そもそも277と279が答え出してるだろ Perl + CGIって何処にあるって探したら >>1かよ。 >282
別スレでも話題になってるが♪のならこのへん。perlだけね。
ttp://www.onpuch.jp/files/onpuch.zip ログをテキストでやるのって難しそうですよね。
いっぱいファイル開いたり閉じたり面倒で気が遠くなりそうだったんで
DBにしました。DBでも面倒なので放置気味ですが。
2ch型作っても、書き込み少なくてスカスカで見苦しいサイトがほとんどだし
もっと一般人向けの良いアイディアの掲示板ってないですかね。
>>92-101
あたりの話をもっと聞きたいんだけど…
でも自分から話をふるほど知識がないのでsage 電動ナナシ氏も初期不良氏も見かけなくなっちゃったからねぇ…。
まだ居るのか期待してageっ! おお、自分以外にも期待している人が!
というわけで、ついでに1年以上前のことですが質問させてください。
>>95で
>BbsThread は自分のスレッドの全メッセージにアクセスでき、
てことは、BbsThreadは自分のスレッドの全メッセージを配列で持っているの?
それともメッセージ取得メソッドが呼ばれるたびにファイルを開いて読み込むのかな?
でもそうだとDBを使うかファイルを使うかで変わってくるからMesseageStoreのように
MessageReaderを複数種類用意するってこと?? >>291
後者じゃないのかな?
>MessageReaderを複数種類用意するってこと??
うん。多分。 【IT】すべてのWebページに勝手に掲示板を作成
http://news2.2ch.net/test/read.cgi/newsplus/1039690102/l50
グローバルビジョンは、すべてのWebページに勝手に掲示板を作成
できるシステムを開発した。http://www.petitmedia.com/
ここのシステム、PHP+ PostgreSQLでできてるらしい。 >>292
レスありがとうございます。やはり後者でしたか。
ということはThreadStoreやThreadReaderも複数用意するってことかな。
ああ、電動ナナシ氏作成の掲示板見てみたいなぁ。 電動さん降臨キボンヌ
前に掲示板のクラス設計途中までやったよね とりあえずとほほさんとこの
http://tohoho.wakusei.ne.jp/soft/wbord.htm
みたいな掲示板作ってみませんか?
これなら簡単そうだし。
>>92 のメッセージクラスも流用できそうだし。 ━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━― ∧_∧
ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉 他のスレでも書いたけど、掲示板っつかphpbbとかvBulletin目指して作ってる。
完成したけど、まだまだ付けたい機能あるし、バグチェック不十分だからソース公開してない。
http://earth.s13.xrea.com:8080/obb/index.php
ほいな >>307
フリーで配布するから、もし見たいなら待ってください。
まだ付けたい機能あるし、バグのチェックが不十分。量も多いし…(汗。
遅くなっても6月中には公開します。 あ、でもソース公開したところで私の「オナニー作品」なのに変わりないよ(笑)
__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄ ∧_∧
.(・∀・ )
と )
ガッ Y /ノ
人 / )
__∧_..< > _/し'_
|(.. `Д´ V (_フ彡
|\⌒⌒⌒\←>>310
\ |⌒⌒⌒~| ∧_∧ ∧_∧
ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ (⌒V⌒)
│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン 現在PHPで掲示板を作成してるんですが
サーバーによっては、書き込みデータに
"(半角ダブルクォーテーション)と'(半角シングルクォーテーション)と\(円マーク、バックスラッシュ)
の文字があると、これらの文字の前に勝手に\マークを挿入して記録してしまうんです。
" → \" ' →\' \→\\
こんな感じに。何が原因なんでしょうか?
いま、試してみたらほとんどのサーバーで勝手に挿入されてました。
xrea.comサーバーだけは挿入されませんでした。
もちろん、挿入するような処理はスクリプト側では一切やってません。
原因わかりました。どうやら
ttp://search.net-newbie.com/php/faq.using.html#faq.using.stripslashes
これが原因のようですね。
しかしfwrite関数で書き込みデータをファイルに書き出す直前に
$message = stripslashes($message);を入れてみましたがそれでも\が除去されません。
どうしてでしょうかね? >>316
取れない事ないっしょ。。。
まずその処理を具体的にどうしてるのか出してみないとなんとも。
ってかここ質問すれじゃないし。
http://pc2.2ch.net/test/read.cgi/php/1073291978/l50