トップページ⇒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も提供
ユーザーはサブパスワードを作る事で、悪意を持った外部サービス管理人によるアカウントの乗っ取りを防ぐ事が出来る
開いているスレなども外部サービス間で同期可能
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更新することあるでしょ
0152nobodyさん2016/05/21(土) 18:42:14.46ID:???
いきなり色々言われて>>1のモチベが下がらないか心配
composer対応とかは後回しにしてとりあえず形にしちゃった方がいいと思う
0153nobodyさん2016/05/21(土) 19:17:03.07ID:???
まあ動くのが正義だしな
しっかり設計されてると保守・機能追加のしやすさはかなり変わるから徐々に改善していけばいい
015412016/05/21(土) 21:41:26.34ID:???
PHP the right wayを軽く読んでみました
何か分かったような分からなかったような・・・
015512016/05/21(土) 22:09:48.10ID:???
とりあえずサーバーサイドと、クライアントサイドは分離した方がよさそう
js開発をnbでするのは辛い
015612016/05/21(土) 22:13:21.64ID:???
TypeScript採用したほうがいいのかな
015712016/05/21(土) 22:22:25.99ID:???
Todo
>>130
autoloading
コーティング規約の統一
リポジトリパターンの採用
一部Unicode文字が使えない問題
スレッド取得APIの強化
スレタイ/全文検索
TypeScriptへの移植(未定)
TypeScriptでHTTPリクエストを隠蔽する薄いラッパーライブラリの作成(↑をするならこっちも作る)
015812016/05/22(日) 13:16:47.71ID:???
オートロード関数ってこんな感じでしょうか?
spl_autoload_register(function($name) {
//nicht\で始まるなら
if (strpos($name, "nichat\\") === 0) {
//クラス名→パス取得
//"nichat\"を削除し、\をパス区切り文字に置き換え
//最後に絶対パス化し、".php"をつける
$path = dirname(__FILE__) . str_replace("\\", DIRECTORY_SEPARATOR, substr($name, 7)) . ".php";

//読み込み
include $path;
}
});
0159nobodyさん2016/05/22(日) 13:47:35.56ID:???
こういのは技術の話よりサービスのアイデアが重要なんだが、
技術の話ばっかりなのは仕方ないか・・
016012016/05/22(日) 14:09:27.45ID:???
>>159
確かに利用者にとっては、内部がどうなっているかは関係なく、使いやすい物が出来ればそれでいいのですが、PHPを正しく学習したいと考えています
016112016/05/22(日) 14:14:29.02ID:???
PSR-4をざっくり読んでみました
多分今作っているオートローダーの仕様で大丈夫と思います・・・
016212016/05/22(日) 14:16:52.13ID:???
>>157に追記
レス取得APIに自分の書き込みかを知るフラグの追加
016312016/05/22(日) 15:50:41.18ID:???
nbってphp7に対応していないみたい
バージョン選択から選べないし
(function(){})();がエラーになって面倒
016412016/05/22(日) 17:23:23.90ID:???
【Todo】
*サーバー
リポジトリパターンの採用
一部Unicode文字が使えない問題
スレッド取得APIの強化
コーティング規約の統一
IDポップアップ
スレタイ/全文検索

*クライアント
モバイル版専ブラ
URLを持った、2ch風の閲覧専用ページ
TypeScriptへの移植(未定)
TypeScriptでHTTPリクエストを隠蔽する薄いラッパーライブラリの作成(↑をするならこっちも作る)
コーティング規約の統一
IDポップアップ
スレタイ/全文検索
016512016/05/22(日) 17:29:08.44ID:???
レスの取得は簡単だけど、スレはスレッドフロート式だから難しいんだよね・・・
1〜20件取得→一番下までスクロール→21〜40取得とかだと取得出来ないレスがあったり重複したりするし
016612016/05/22(日) 17:29:43.64ID:???
1〜20件取得→1〜40件取得→1〜60件取得みたいに取得しなおすのがいいのだろうか?
0167nobodyさん2016/05/22(日) 18:27:48.14ID:???
内部で各スレにインクリメンタルなIDを振ればいいだけじゃねぇのか?
0168nobodyさん2016/05/22(日) 18:30:58.77ID:???
最初の20件取得、でその取得したIDの最大値が次へのセットへのカーソル。
カーソルの最大値以降の次の20件を取得。
以下ループ。
0169nobodyさん2016/05/22(日) 18:31:36.55ID:???
ごめん。レスじゃなくてスレの話か・・
017012016/05/22(日) 18:36:23.01ID:???
レスは順番変わらないからそれでいいんだけど
仕方ないからreadThreadPageを消して、searchThread追加した
あとsearchThreadにスレタイ検索も組み込んだ
017112016/05/22(日) 18:39:41.93ID:???
とりあえずサーバーサイドはしっかり作り込みたい
クライアントサイドはバグあっても(ないほうがいいけど)脆弱性には繋がらないけど、サーバーサイドは下手したら大変な事になる
DB流出してもパスワードとトリップはハッシュ化しているから分からないけど、誰が書き込んだかは分かるからね
017212016/05/22(日) 18:47:15.63ID:???
ページ切り替えで順番変わるのってよく考えたら検索エンジンと同じだな
Googleとかはどういう仕組み使っているんだろう
017312016/05/22(日) 18:51:58.75ID:???
いい加減用語統一しないとな・・・
2chで言うID→ハッシュ
2chでいう>>n→リプライ
連番ID→ID
文字列ID→スクリーンネーム
でいいか
017412016/05/22(日) 22:18:01.77ID:???
*サーバー
>リポジトリパターンの採用
core内クラスで、そこまで複雑な事をしておらず、ほとんどDB操作だけど、分割するべきなのか

>一部Unicode文字が使えない問題
php.iniの文字コード変えれば大丈夫らしい

>スレッド取得APIの強化
強化ではなくなったが、改善した

>コーティング規約の統一
作業中

>IDポップアップ
完了

>スレタイ/全文検索
スレタイ検索は完了

TODOにはなかったけど、Response取得系で、認証を行うことで自分の書き込みであるかを知ることのできるフラグを追加した
017512016/05/22(日) 23:41:55.28ID:???
ToDo追記

*サーバーサイド
存在しないレスへのリプライのエラー発生
自信へのリプライの通知
017612016/05/23(月) 00:08:12.74ID:???
mdを使ってToDo作りました
https://github.com/kgtkr/2chat/blob/master/ToDo.md
0177nobodyさん2016/05/23(月) 12:40:15.11ID:???
将来的にはプルリクとか受け付けたりするんかな?
TODO管理とかyoutrackとかteamcity見たいので管理するとええよ
ここで垂れ流ししつつツール上で管理するとやりやすい
■ このスレッドは過去ログ倉庫に格納されています