トップページ⇒php
1002コメント237KB

【PHP】2chat開発スレ【2chを越える】 [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2016/04/23(土) 13:45:28.79ID:???
【2chatとは】
掲示板とチャットを組み合わせたオープンソースのPHPスクリプトです。
名前の由来は2ch+chat

【特徴】
*基本的な面
ユーザー登録は必要だが、匿名
ユーザーは日付の経過や書き込み、荒らしなどでレベルが上下し、このレベルは通報の影響度などに関わる
管理人が不在でも通報が集まった書き込みは自動削除
チャット形式の為、書き込み上限はなく、テンプレはいつでも誰でも編集可能
板はなく、各スレッドはカテゴリを付けられる為、スレッドを探しやすい
単発スレには向かない

*専ブラ
jsを使い専ブラなしで快適に閲覧出来るUIを提供
WEBで見れるため、PC⇔スマホで開いているスレなどを完全同期できる

*API
誰でも使えるAPIを提供(jsonp対応)
2ch互換のAPIも提供
ユーザーはサブパスワードを作る事で、悪意を持った外部サービス管理人によるアカウントの乗っ取りを防ぐ事が出来る
開いているスレなども外部サービス間で同期可能
005112016/05/01(日) 21:15:32.10ID:???
>>50
そうなるけど・・・
そっちの方が管理しやすいし
完全匿名でも、普通IPは記録するから、権力が働いたら匿名じゃなくなるのは一緒なのでは?
005212016/05/01(日) 23:06:54.88ID:???
SQL文分からなすぎ・・・
ちょっと複雑な事するとかなり難しくなる
0053nobodyさん2016/05/01(日) 23:08:57.58ID:???
>>51
そりゃ、TCP/IPを使っているのだからIPは記録するさ
でも「原理的に匿名でない設計」と「匿名を目指している設計」は似て非なるものだと思うよ
「表面的には匿名だけど、いつでも書き込んだ主を公開できる準備があるので注意してね」なんて注意書きを書いたらユーザはどう感じるかな
0054nobodyさん2016/05/01(日) 23:38:17.36ID:???
なにいってんだこいつ
005512016/05/01(日) 23:41:41.15ID:???
>>53
IDにLVをつける事によって、通報の多い書き込みの自動削除などがやりやすくなる
今の2ch見ていると、明らかに削除人が足りていないから、出来るだけ自動化したいし
005612016/05/02(月) 00:16:33.73ID:???
responseテーブルが、スレッドIDとレス番の複合主キーなんだけど、管理しにくいな・・・
スレッドに対するレス番じゃなくて、全部のレスに適当に番号振っていった方がよさそう
2chを意識しすぎた感
明日設計見直そう
005712016/05/02(月) 22:28:44.39ID:???
中核クラスは一応出来た
・・・と思ったんですが、javaとc#にincludeがないので、書くのすっかり忘れていました・・・
includeとコメントを詳しく書いたりして、APIを作っていきます

APIはtypeパラメーターに形式(XML、JSON、JSONP)を指定するタイプにします
005812016/05/03(火) 01:01:09.35ID:???
JSON(P)と、2ch互換があれば、XMLいらないんじゃないかと思ってきた
005912016/05/05(木) 09:05:44.80ID:???
クロスドメインでPOSTが使えないので、書き込みAPIの文字数制限がかなり厳しいです
そこで、短い書き込み用のGET、圧縮して送るGET、formタグからならPOSTが可能な事を利用したリダイレクトありPOSTを用意したいと思っています
0060nobodyさん2016/05/05(木) 09:43:28.83ID:???
PHPにクロスドメイン制限なんてあったっけ
006112016/05/05(木) 11:19:03.14ID:???
jsからAPIを使う時用です
0062nobodyさん2016/05/06(金) 13:26:22.48ID:???
>>61
PHPを経由させればいいのでは?
006312016/05/06(金) 17:49:22.63ID:???
>>62
IP記録などで都合がいいので、出来るだけクライアント言語で作りたいと考えています
006412016/05/06(金) 23:23:44.10ID:???
圧縮しなくてもIE以外なら大丈夫そう
長くて6000文字程度だし
IEの2000文字制限がな・・・
006512016/05/07(土) 08:58:18.11ID:???
API完成しました
006612016/05/07(土) 11:54:41.03ID:???
・メモ
タイムゾーン
UPDATE変更の必要なし問題
0067nobodyさん2016/05/07(土) 15:24:21.79ID:???
クロスドメインはいいんだけど
サーバ構成はどんなふうに考えてるとか
サイトマップとかページのフレーム構成とか
どんなふうに考えてるのか見てみたいな
006812016/05/07(土) 17:30:20.31ID:???
とりあえずAPIは出来たので、今クライアントサイドを作っています
Twitter風UIにする予定です
006912016/05/07(土) 20:28:53.36ID:???
返信をどう実装しようか。。
Twitterの場合、TLに返信が色々出てくるんだが
検索速度を考えると、整合性に気をつけてテーブル分割した方がよさそう
007012016/05/07(土) 22:04:18.58ID:???
クライアントサイド難しい…
サーバーサイドは単純作業で、セキュリティにだけ気を付ければよかったけど
007112016/05/07(土) 22:19:37.26ID:???
とりあえず、HTMLとcssのみで、デザインだけ作ってみます
007212016/05/07(土) 22:45:50.93ID:???
色とかが適当だけど、とりあえず骨組み
http://www.dotup.org/uploda/www.dotup.org852825.png
007312016/05/08(日) 00:57:34.98ID:???
JQuery UIという物があるみたいですので、それを使ってUI作ってみます
007412016/05/09(月) 00:53:48.86ID:???
タブのダブルクリック更新出来た・・・
土日ずっとしていたからかなり進んだ
0075nobodyさん2016/05/09(月) 07:30:48.17ID:???
>>1
だからSPAにしろって
今から覚えるならJQueryよりおすすめ
HTMLのView地獄の深みにハマってつらい思いするぞ
007612016/05/09(月) 07:41:01.66ID:???
>>75
ユーザー登録、会員情報の変更以外(つまりよく使う機能)はJQ UI+シングルページで作っています
007712016/05/09(月) 23:27:19.16ID:???
ローカル変数とグローバル関数名の衝突駄目なのか…
$$から始まる関数をJQオブジェクト作成関数にして、$始まる変数をJQオブジェクトにします
007812016/05/09(月) 23:45:45.83ID:???
とりあえずソース整理しないと保守が・・・
jsの設計分からん
0079nobodyさん2016/05/10(火) 00:41:45.00ID:???
>ローカル変数とグローバル関数名の衝突駄目なのか…
そうだっけ
どういうコードなんだろう
008012016/05/10(火) 07:50:47.24ID:???
window.$hoge()なら大丈夫みたいですが、$$hogeの方が楽なので
008112016/05/10(火) 21:16:30.20ID:???
会員登録ページ作ったらサーバーにアップロードします
008212016/05/10(火) 23:59:09.03ID:???
テンプレートエンジンっていうの使った方がよさそう
0083nobodyさん2016/05/11(水) 11:02:28.76ID:???
人の話聞く気ないみたいだからもう何も言わないけど
開発の仕方が5年ぐらい前に流行った開発だよね
ggったらよく出てくる内容だから勉強しやすいのかもしれないけど
特に今年は新しい環境が出揃ってこれからっていう元年に近い年だから
そっちに倣ったほうが楽しいと思うんだがな
それじゃ頑張ってくださいノシ
0084nobodyさん2016/05/11(水) 11:35:03.10ID:???
何しに来たんだ
せめて誘導しろや>そっちに倣ったほうが楽しい
008512016/05/11(水) 16:03:56.63ID:???
聞く気無い訳ではないんですが・・・
すみません
今ajaxが流行っていると書いてあったので、ajaxで作ってみました
008612016/05/11(水) 20:04:05.59ID:???
ネットオウルmysqli_stmt::get_result()が出来ない・・・
0087nobodyさん2016/05/12(木) 02:44:05.11ID:???
個人で作るならES2015+babelで作りたいよなぁ
SPA作るならフロントはReact+redux+react-routerで
ビルドはwebpackで十分だし
Angular2に手を出すのもアリだけど
DOM操作なんて人間様のやる事じゃないのでjQueryは必要無し
サーバーサイドPHPにするんならオレオレじゃなくて有名どころのFW使わないとセキュリティ周りで死ぬぞ
0088nobodyさん2016/05/12(木) 03:01:13.65ID:???
てかajax使うなという訳ではないが
流行ってるってどこに書いてあるんだそんなの
0089nobodyさん2016/05/12(木) 10:13:48.26ID:tNg+7L1I
流行ったのは数年前だろ
DOMで皆苦しんだ
0090nobodyさん2016/05/12(木) 10:37:40.79ID:???
最初から完成品目指しているわけでないならとりあえずこのままでいいよ
一度組み上げてこのままじゃだめだよねと確認して次のステップへ行こう
この場につきっきりでコミュニケーション取りながら教えられる人なんていないだろうし
0091nobodyさん2016/05/12(木) 12:12:53.26ID:???
早く確認できるといいですね・・・
0092nobodyさん2016/05/12(木) 13:23:55.76ID:???
初心者にあれこれ言ったって
形から入って完成しないパターンにしかならんしな
とりあえず動くものを用意して反応を貰うのが一番良い
009312016/05/12(木) 15:51:12.71ID:???
今調べたらajaxが流行ったのって数年前だったみたいです…
SPAアプリだと他のライブラリの方が、保守しやすいみたいですので、色々触ってみます
動く物を見せたいのですが、現在サーバーの審査待ちですので、少々お待ち下さい
009412016/05/12(木) 17:05:14.47ID:???
サーバーサイドは
Angular2+TypeScript+css+htmlで作る予定です
009512016/05/12(木) 17:05:51.17ID:???
ミス

クライアントサイドは
Angular2+TypeScript+css+htmlで書き直す予定です
009612016/05/12(木) 17:46:48.88ID:???
やっぱりvue.vsにするかも
0097nobodyさん2016/05/12(木) 18:18:58.09ID:???
jQueryとajaxをごっちゃにしてそうで怖い
009812016/05/12(木) 18:44:34.33ID:???
タブとかダイアログが簡単に作れるので、そこらへんはJQuery UI使います
また、APIでAccess-Control-Allow-Origin: *を出力して、POST通信でも出来るようにします
009912016/05/13(金) 20:11:58.20ID:???
ソースの整理出来そうな気がしてきた
日曜用事あるから、土曜頑張ろう
010012016/05/14(土) 16:33:06.50ID:???
とりあえずVue.jsで作った
かなり分かりやすくなった
010112016/05/14(土) 16:59:04.14ID:???
スクロール量を取得するサンプルはあるんだが、どのレスまで読んだか知る方法ないのかな・・・
各レスに固有IDつけているけど
0102nobodyさん2016/05/14(土) 19:50:02.33ID:???
>>101
Page Visibility API
010312016/05/15(日) 00:55:05.09ID:???
コンポーネントやっと出来た。とりあえず使い方は覚えたはず。。
コンポーネントが出来たから後はアンカー、ID、返信のポップアップだな

>>102
ありがとうございます。してみます
0104nobodyさん2016/05/15(日) 11:08:14.41ID:???
ふつーにajax(というかxhrというべきか?)使ってるが
うちの職場が遅れすぎてるのか?
0105nobodyさん2016/05/15(日) 12:05:15.48ID:???
>>88,89の話か
非同期通信ってどこで流行ってる? → 数年前。DOMで苦しんだ
まるで支離滅裂だ
010612016/05/15(日) 21:53:58.07ID:???
レスアンカーと自信へのレスとID抽出のポップアップ、二次元配列([ポップアップ階層][レス])でバインドすればいいのだろうか?
2chのアンカーポップアップでggっても、バインドの方法は書いてないし、DOM操作のも再帰的なポップアップがない
あと、全部のレス読み込む訳じゃないから、マウスオーバー時にサーバーにリクエストする予定だし
010712016/05/15(日) 22:16:41.02ID:???
いい方法思いついた気がする
010812016/05/16(月) 17:56:15.29ID:???
ポップアップじゃなくてドロップアダウン形式にしました
次は>>102をします
010912016/05/17(火) 19:27:11.65ID:???
var $responseHeaderList = $("#tab" + tab.id + ">.responseList").children(".responseheader");

//スクロール位置
var scroll=$("#tab"+tab.id).scrollTop()+$("#tab"+tab.id+">.responseList").position().top;

//一番近い要素
var $close=$responseHeaderList.first();
//最短距離
var minDistance=Math.abs(scroll-$close.position().top);

//最短距離のオブジェクト取得
$responseHeaderList.each(function () {
//距離取得
var distance=Math.abs(scroll-$(this).position().top);

//今回の方が短ければ
if(minDistance>distance){
$close=$(this);
minDistance=distance;
}

//デパッグ
//$(this).css("color","#555555");
});

tab.scrollResponse=Number($close.data("responseID"));

//デパッグ
//$close.css("color","red");
011012016/05/17(火) 19:28:15.65ID:???
ここまで読んだやっと出来た
0111nobodyさん2016/05/18(水) 10:28:37.26ID:???
どんなシステムになるのか知らんが、Reddit移住が何故失敗したかを考えた方がいい。
011212016/05/19(木) 19:19:04.16ID:ie/BYStV
関数の型チェックにPHP7でしか使えない型を使っているから、PHP5だと動かなくてサーバーがあまりない
まだ7は普及してないし
0113nobodyさん2016/05/19(木) 20:10:55.06ID:???
レンタルサーバーじゃ不自由だしVPSの方がよくない?
011412016/05/19(木) 20:13:58.11ID:???
ラズパイで鯖立てているんだけど、PHP7のインストールが上手くできなくて・・・
011512016/05/19(木) 22:12:27.85ID:???
ラズパイで2chat動いた
あとはポート開放だけなんだけどやり方が分からない
011612016/05/19(木) 22:14:01.00ID:???
ラズパイでもサクサク動いてよかった
ラズパイ3欲しいが今の所は1で問題なさそう
0117nobodyさん2016/05/19(木) 23:14:40.04ID:???
え、自宅サーバで公開するの?
011812016/05/19(木) 23:30:36.95ID:???
とりあえず試しに公開したいので
0119nobodyさん2016/05/19(木) 23:39:49.21ID:???
ポート開放もわからない知識レベルで自宅鯖
狂気の沙汰ほど面白い
0120nobodyさん2016/05/20(金) 00:17:19.01ID:lNAjozeA
Herokuの無料枠とかでいいんじゃね
自宅サーバのセキュリティは正直面倒だ

レンサバでもXServer(と傘下のネットオウル系)やhetemlはPHP7入ってるでしょ
ttps://www.xserver.ne.jp/functions
ttp://www.minibird.jp/service/function.php
ttps://heteml.jp/service/function/
012112016/05/20(金) 07:16:43.70ID:???
ネットオウルは無理(mysqliプリペアの拡張モジュールがない)だったので他のを試してみます
012212016/05/20(金) 18:02:21.87ID:???
Heroku無理だ
MySQL使うのにクレカ登録がいる・・・
012312016/05/20(金) 20:17:09.92ID:???
エックスドメインもget_result使えない・・・
012412016/05/20(金) 20:31:33.97ID:???
15日間しか使えませんが、とりあえず動きました
http://2chat.heteml.jp/
012512016/05/20(金) 20:48:21.19ID:???
mysqlnd使えるところ少なすぎる
0126nobodyさん2016/05/20(金) 22:33:08.79ID:???
まあpdoで組むのが主流だしなあ
0127nobodyさん2016/05/20(金) 22:38:01.89ID:???
http://ja.phptherightway.com
012812016/05/20(金) 22:43:23.03ID:???
>>126
最初mysql関数で組んでいて、PHP7で使えないことに気付いて組みなおしたけど、PDOの方が主流だったのか・・・
0129nobodyさん2016/05/20(金) 22:52:21.60ID:???
その辺のフレームワークだと複数のDBに対応するためにPDO一択ってだけで、パフォーマンスはmysqlndの方が良いとだろうので別に悪くはないと思うよ
013012016/05/21(土) 08:38:48.52ID:???
>>129
MySQL以外を使う予定はないので、このままでいいですかね?

・今後の予定
モバイル版専ブラ
URLを持った、2ch風の閲覧専用ページ
IDポップアップ
013112016/05/21(土) 09:45:57.12ID:???
TSoft Server落ちた
013212016/05/21(土) 10:12:29.63ID:???
http://www.akiyan.com/blog/archives/2011/07/php-mysqli-fetchall.html
これを使えば、mysqlndなしでいけるのだろうか
013312016/05/21(土) 10:37:40.59ID:???
Xdomainサーバーでもいけそうです
ここのサーバーを長期的に使うことになりそうです
013412016/05/21(土) 10:47:06.56ID:???
Xdomain携帯だと広告出るけど、JSONPに広告タグ追加されて、不具合出たりはしないみたい
多分headerで確認しているね
ここなら安心して使える
0135nobodyさん2016/05/21(土) 11:41:42.34ID:???
広告付きのサーバでチャットって流石に貧弱すぎると思うが
まあ万が一負荷が問題になるほど流行ったらよそへ移ればいいか
013612016/05/21(土) 11:47:09.27ID:???
でも×押せばリロードするまで出ないし、SPAだからリロードは少なくて済むから大丈夫と思う
013712016/05/21(土) 11:48:07.69ID:???
広告あってもすぐ負荷大杉画面にリダイレクトするホスティンガー()よりはマシと思うし
0138nobodyさん2016/05/21(土) 15:37:44.53ID:???
>>1
.gitignoreって知ってるか
nbprojectとかいうNetbeansの設定フォルダはバージョン管理の対象から外すといい
0139nobodyさん2016/05/21(土) 15:38:48.65ID:???
あと名前空間とクラスのautoloadとかcomposerくらい使おうや……
0140nobodyさん2016/05/21(土) 15:39:53.51ID:???
せっかくPHP7使ってるのに書き方が5.2あたりで止まってるぞ
0141nobodyさん2016/05/21(土) 15:48:22.45ID:???
失礼、名前空間は使ってたか
PSR-4に従っとくと楽だと思うが
0142nobodyさん2016/05/21(土) 16:51:55.65ID:???
イントランスとは一体
014312016/05/21(土) 17:23:25.76ID:???
>>138
外してよかったんですね
外します

>>139
使ったことありませんでした
調べてみます

>>140
スカラー型のタイプヒンティングを使いたかったので、PHP7にしました

>>141
よく分からないので調べてみます

>>142
WEBアプリ(特に永続化が必要な物)のオブジェクト指向ってどう作ればいいんでしょうか?
よく分かりませんでした
0144nobodyさん2016/05/21(土) 17:33:59.54ID:???
PHP the right way読んどけ
PHPはネットにクソ情報が多すぎる
0145nobodyさん2016/05/21(土) 17:41:43.15ID:???
リレーショナルデータベースへの永続化はその辺のORMのライブラリ使えば楽だけどね。このアプリは大して複雑じゃないからActive Record系が手っ取り早い。


勉強がてらなら、オブジェクトの永続化を抽象化するリポジトリパターンを独自で組んでみてもいいのでは。

Threadなどのオブジェクト(エンティティ)は自身の永続化には関知せず、ThreadRepositoryなどリポジトリクラスを作って、DBとのやり取りはそちらのクラスの責務にする。
014612016/05/21(土) 17:49:08.01ID:???
>>144
初めて見ました
読んでみます

>>145
DBの処理と分ければいいんですね
>>144を読み終えたらしてみます
0147nobodyさん2016/05/21(土) 17:55:17.02ID:???
なお永続化は特にWebアプリに限ったもんじゃない
大抵のWebアプリに永続化が必要ではあるが


Webアプリで真っ当なオブジェクト指向って時に特有なのはHTTPリクエストとHTTPレスポンスをオブジェクトとして扱うことだろうな。

大雑把に言うとアプリケーション全体をHTTPリクエストを引数にとってHTTPレスポンスを返す関数として捉える

PHP界隈だとHTTPリクエストとレスポンスのライブラリが標準にないため、フレームワークごとに乱立していた感じ
最近ようやくPSR-7 HTTP messagesという標準になってくれそうなインターフェースが決まって広まりつつある
0148nobodyさん2016/05/21(土) 18:07:09.53ID:???
アプリケーションの立ち上げ処理を共通化するためのフロントコントローラパターン、URLなどリクエストに応じて処理を振り分けるルータ、までがWebフレームワークの必要最低限かな
MVC2などによる構造の切り分けも大体のフレームワークが行っている

DBへの永続化、ユーザー認証認可、テンプレートエンジンなどの他の頻出機能は好きなライブラリやコンポーネントを組み合わせやすい便利な時代になった
Composer様々だな
014912016/05/21(土) 18:09:12.44ID:???
普通のアプリの永続化は、オブジェクトに様々な処理をして、終了時などに保存ですが、WEBアプリは処理が少ないので考え方が分からないんですよね
あと、デスクトップアプリでも、ファイルを全て読み込んで、オブジェクトに変換して、処理をして、保存といったアプリしか作った事がないので一部のみ読み込んで的なアプリがよく分かりません
015012016/05/21(土) 18:17:39.96ID:???
IOS絵文字を削除とかしていないのに、自動で削除される・・・
0151nobodyさん2016/05/21(土) 18:18:52.72ID:???
DB使ったアプリを作ったことがないだけでは

>>1の普通がどこの普通かは知らんが普通のデスクトップのアプリでもDB使うなら逐一DB更新することあるでしょ
■ このスレッドは過去ログ倉庫に格納されています