トップページ⇒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も提供
ユーザーはサブパスワードを作る事で、悪意を持った外部サービス管理人によるアカウントの乗っ取りを防ぐ事が出来る
開いているスレなども外部サービス間で同期可能
057312016/09/17(土) 19:19:03.25ID:???
>>572
idは数字のみ、tokenはbase64から=を除いたものだから多分大丈夫
0574nobodyさん2016/09/17(土) 20:53:57.80ID:???
なんだかんだでちゃんと進んでて偉いわ
057512016/09/17(土) 21:08:17.79ID:???
エラー関係はCSVで外出しした方が管理楽かも
057612016/09/17(土) 21:22:09.76ID:???
twitterの200台ステータスは200 OKしか使ってないみたい
これは分ける必要なさそう
0577nobodyさん2016/09/17(土) 21:22:16.27ID:???
いやいや、偉くないだろ。ユーザーにとっては、完成させれるか完成させれないかの
どっちかしない。開発者にとっては、完成させれなくても勉強になるけど。
だから、進んでても最終的に完成するかしないかが問題。
0578nobodyさん2016/09/17(土) 21:30:42.88ID:???
というか、このサーブレットはローカル環境で動いてるの???
057912016/09/17(土) 21:36:14.21ID:???
>>578
まだ実際に動かしてはいない
web.xmlとか作ってないからテスト出来ないし
058012016/09/17(土) 21:36:54.23ID:???
HTTPステータスコードってこんな感じ?

200 成功
401 認証が必要/認証エラー
403 リクエストの送りすぎ(書き込み間隔が短い)
404 見つからない(スレなど)
409 既に存在する(スクリーンネームなど)
421 リクエストがおかしい(パラメータが足りない、数値に変換出来ない、文字列が正規表現に一致しない、長すぎる)
500 鯖内部でエラー
058112016/09/17(土) 21:39:51.01ID:???
例えば、トピックIDを指定して取得するAPIで見つからなかったらエラーを返しているけど、
トピック検索APIで見つからなかったら成功+空の配列を返している
つまり単取得系と多取得系の違い
これってどっちもエラー返すべきだろうか…
0582nobodyさん2016/09/17(土) 21:49:02.01ID:???
ワロタ。やっぱ動かしてないかww
昨日も書いたけど、すごい水平展開に開発していくな。

https://tools.ietf.org/html/rfc7231
には421のってないな。
まぁ、そんな感じでいいんじゃないかな。
細かいところはAPIによってもマチマチだし。
0583nobodyさん2016/09/17(土) 21:50:44.95ID:???
>>581
それでいいと思う。検索の方はエラーじゃなくていいと思う。
058412016/09/17(土) 21:51:08.71ID:???
ウィキペディア見てた

421 Misdirected Request (RFC 7540)
誤ったリクエスト。
058512016/09/17(土) 21:52:45.98ID:???
とりあえずエラーコードは連番でしてみる
058612016/09/17(土) 21:54:03.23ID:???
500エラーはエラーコード-1だけでいいか
詳細教えたら危険だろうし
0587nobodyさん2016/09/17(土) 22:00:42.38ID:???
というか、マジで動かす方を優先した方がいい。
でないと、また、大幅な手戻り発生しそう。
クラスの依存関係で無理って言ったけど、そんなの当たり前。
だから、そこらへんは適当に動くようにつくればいいだけ。後で修正すればいいんだから。
>>544の人もアドバイスしてくれてるのに。
058812016/09/17(土) 22:02:21.52ID:???
とりあえず動かした方がいいのか
なら適当にAPI作って動かしてみる
0589nobodyさん2016/09/17(土) 22:10:38.89ID:???
俺もPHPの勉強し始めてるっていって、この前ASP.NET Coreをやりだしてるっていったけど、
君みたいなやり方してないぞww
初めての作業で全体像見えないまま、クラス設計なんてしようがないし。
だから、とりあえず、1,2つだけモデルクラスを作って、それで次はすぐにWeb APIの方作って、
実際にブラウザからアクセスさせてる。
それで、作り方に問題なさそうって確認してから、おおざっぱに全体の設計を
把握してから残りモデルクラスの作業に取り掛かってる。
0590nobodyさん2016/09/17(土) 22:24:28.58ID:???
PHPerだけどサーバサイド5日くらいで終わりそうじゃね?
ぼくのかんがえたさいこうの設計目指さなければ
0591nobodyさん2016/09/17(土) 22:27:06.02ID:???
複雑じゃないならActiveRecordで十分っしょ
0592nobodyさん2016/09/17(土) 22:29:55.08ID:???
まぁ、元々機能少ないからそんぐらいだろうね。データベースのテーブルも
5,6ぐらいしかないし。
0593nobodyさん2016/09/17(土) 22:33:27.35ID:???
ただ、俺はPHPで開発環境が悪いのか、コード補完とかあんま効かなくて、
タイプミスとかでエラー、メソッド名もまだ覚えてないから補完したいのにで
出なくていちいちブラウザで調べたりしてブチキレで。ASP.NET Coreの方に移行中だけど。
059412016/09/17(土) 22:36:38.04ID:???
5日ってそんな物なのか?
もしかしてここって職業プログラマ多い?
0595nobodyさん2016/09/17(土) 22:44:10.09ID:nfgV7g+h
君は、HTTPの基本みたいな事だってわかってなかったし新しい事を覚える時間が
かかるんだからしょうがないよ。
でも、なれればテーブル数も5,6ぐらいで小機能だし、5日ぐらいで実装できると思う。
俺はまだサーバーサイドは素人だから慣れが必要だけど。
でも、クライアントサイドやってきた経験から言うと、慣れれば機能的には5日くらいあれば実装できるとは思ってた。

サービスの仕様とか考える時間とかは別問題だから抜かしてね。
単純に実装する時間だけの話ね。
0596nobodyさん2016/09/17(土) 22:44:38.69ID:???
sageつけ忘れた。
059712016/09/17(土) 22:50:52.40ID:???
これで小機能って凄い
俺の中では今まで作ったWEBアプリで一番大きいのに…
059812016/09/17(土) 23:02:38.97ID:???
とりあえずコンパイル通ったのでweb.xml作っていきます
0599nobodyさん2016/09/17(土) 23:02:41.15ID:???
業務とかに比べると全然ちいさいよ。
業務だとテーブルだけでも何十、何百って数あるんだから。
で、それらのテーブルを複数結合したり、バッチで何十のテーブルを見て更新かけたり。

だからテーブル数5,6って学生の宿題用(テーブル数2,3?)に毛が生えたぐらいの規模だと。
2chだってもともと小機能なんだし。ただ、小機能とはいえユーザー数は
圧倒的だから。そこらへんはまた単純に作るだけじゃなく別のノウハウが必要だと思う。
060012016/09/17(土) 23:07:40.52ID:???
>>599
テーブルが何百って…そんなにあるのか
2chは単純だからな。ユーザーが多い以外に良い所がない気もするけど、掲示板だとユーザーの数が最大のメリットになるし
専門学校とか大学の工業科ってこういうの作ったりするの?こういう系の仕事するなら工業科進んだ方がいいかな
060112016/09/17(土) 23:09:46.74ID:???
2chってどういう負荷分散しているんだろう
gzipの存在知らなくて転送量で死に掛けた時期があったらしいし、技術と言うより単純な仕組みだから負荷少ないのだろうか
060212016/09/17(土) 23:12:09.04ID:???
web.xml凄く読みにくいし書きにくい
csv→xmlの簡単な変換器作った方が早そう
0603nobodyさん2016/09/17(土) 23:22:30.64ID:???
URLの設計の方は考え出してるの?
/api/v1/ここどうするの?
060412016/09/17(土) 23:25:59.77ID:???
>>603
/api/http/hoge/foo/…にする
今後socketとか作る可能性もあるから
060512016/09/17(土) 23:26:23.63ID:???
例えば
/api/http/topic/write/
みたいな
0606nobodyさん2016/09/17(土) 23:30:10.83ID:???
RESTful API的にはアレだけど。いっか。
必要な情報は全部、クエリ文字列で渡すんでしょ?
060712016/09/17(土) 23:40:46.58ID:???
>>606
トークン以外は全部クエリで渡す
xmlで渡したりするのが本当らしいけど、それにメリットあまり感じないし
0608nobodyさん2016/09/17(土) 23:47:54.31ID:???
メソッドもGET,POSTの2つで、パラメータはクエリ文字列経由で渡してで
RPC的なTwitter APIぽくしてるってことね。
了解。
060912016/09/17(土) 23:51:34.62ID:???
TwitterAPI結構参考にした
直接触った事はなくても、4j使って触った事はあるから他のに比べたら分かるし
061012016/09/18(日) 00:00:21.08ID:???
node.jsの実験の為にcsv→xml変換器作ったら凄く楽だった
オープンオフィスでAPIリスト作れば自動で変換してくれる
061112016/09/18(日) 00:26:10.28ID:???
tomCatが起動しないからテスト出来ない
0612nobodyさん2016/09/18(日) 11:59:41.41ID:???
tomcatいる?javaなんか
まあAppServer無くてもjarは動かせるが
061312016/09/18(日) 12:12:33.89ID:???
web.xmlがあるとエラーで落ちる
別にクラスパス間違っている訳じゃないし
0614nobodyさん2016/09/18(日) 13:20:47.67ID:???
クラスパスに言及が行くってことはClassNotFoundExceptionかな?
まあ色々ややこしいとこはあるかなあ
061512016/09/18(日) 13:24:53.37ID:???
"(TOM_CAT)\webapp/Nch.war"に配置したら
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/Nch]]

エクリプスから実行したら
情報: サービス Catalina を起動します [日 9 18 13:23:35 JST 2016]
情報: Starting Servlet Engine: Apache Tomcat/8.0.32 [日 9 18 13:23:35 JST 2016]
情報: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [185] milliseconds. [日 9 18 13:23:36 JST 2016]
重大: A child container failed during start [日 9 18 13:23:37 JST 2016]
重大: A child container failed during start [日 9 18 13:23:37 JST 2016]
重大: The required Server component failed to start so Tomcat is unable to start. [日 9 18 13:23:37 JST 2016]
情報: Pausing ProtocolHandler ["http-apr-8080"] [日 9 18 13:23:37 JST 2016]
情報: Pausing ProtocolHandler ["ajp-apr-8009"] [日 9 18 13:23:37 JST 2016]
情報: サービス Catalina を停止します [日 9 18 13:23:37 JST 2016]
情報: Destroying ProtocolHandler ["http-apr-8080"] [日 9 18 13:23:37 JST 2016]
情報: Destroying ProtocolHandler ["ajp-apr-8009"] [日 9 18 13:23:37 JST 2016]
0616nobodyさん2016/09/18(日) 15:15:31.08ID:???
とりあえずnchの事は忘れて、1つのサーブレット作って起動。
それからじゃな。
0617nobodyさん2016/09/18(日) 15:18:58.45ID:???
普段GlassfishだからTomcat忘れとるなあ、、、ちょっと動かしてみるかな
061812016/09/18(日) 15:24:07.23ID:???
Glassfishの方がいいの?
0619nobodyさん2016/09/18(日) 15:32:43.63ID:???
>>617
サーブレットって引数なしのコンストラクタ以外のコンストラクタって
定義できる??。俺はそれが気になるわ。>>514に書いたけど。
062012016/09/18(日) 15:36:34.74ID:???
>>619
HttpApiBaseは親クラスだから関係ないと思ってたんだけど違う?
web.xmlに書いているクラスは全て引数無しのコンストラクタ
0621nobodyさん2016/09/18(日) 15:42:16.46ID:???
あ、ごめん。
子クラスでコンストラクタの宣言ないとデフォルトの引数なしの
コンストラクタが宣言されたことになるんだっけ???
Scalaが?
そんだったら問題ないね。すまん。
062212016/09/18(日) 15:45:56.70ID:???
>>621
javaもコンストラクタがないクラスはコンパイル時に自動で追加される
0623nobodyさん2016/09/18(日) 15:50:08.08ID:???
>>622
追加されるのは、親クラスに引数がないコンストラクタがある場合じゃなかったけ??
親クラスに引数があるコンストラクタがある場合、
子クラスで勝手に引数なしのコンストラクタ追加しようがないじゃん。
親クラスのコンストラクタに渡す引数が不明なんだから。
062412016/09/18(日) 15:56:25.13ID:???
>>623
あーそういう事か
scalaはクラス宣言がそのままデフォルトコンストラクタになって、括弧も省略できるから

class Hoge extends Base(1)
は
public class Hoge extends Base{
  public Hoge(){
    super(1);
  }
}
と同じ
0625nobodyさん2016/09/18(日) 15:59:54.36ID:???
>>624
そういうことか。なるほど。
>>516の説明じゃちょっと納得できなかったから。
お手数かけました。
062612016/09/18(日) 16:02:17.93ID:???
あとはifとかtry-catchが式だったり
中括弧で囲むと複式になったり…
そこらへんは考え方の違いと言うか…
062712016/09/18(日) 16:03:14.83ID:???
まだScala触り始めて10日だけど
062812016/09/18(日) 16:12:12.19ID:???
TomCatが起動しない原因が全く分からない
一回消して入れなおすしかないのだろうか
Neonにバージョンアップもしたいし
062912016/09/18(日) 16:44:08.77ID:???
プロジェクトフォルダ整理していたらjava初めてすぐの頃に作った物が大量に…
ゴミばっかり
0630nobodyさん2016/09/18(日) 17:37:47.11ID:???
Tomcatは使わず、それぞれ単独インストールする方が良いと思ってる
063112016/09/18(日) 18:42:08.09ID:???
servlet-classに存在しないクラスを指定したら一応起動する(アクセスしたら当然エラーだけど)
謎すぎる
063212016/09/18(日) 18:52:05.40ID:???
もしかするとtomcatがおかしいかもしれないから8.8→8.10にバージョンアップしてみる
063312016/09/18(日) 19:46:44.95ID:???
やっぱり無理
他のクラス作ってしてみたら出来た…
何故だ
0634nobodyさん2016/09/18(日) 20:38:28.79ID:???
少しずつ動作確認しないで作るとこうなっちゃうわけだ。
HttpServletBaseどんどん動くとこまでコード削ってて、原因突き止める?
一度にすべてのバグの嵐に見舞われるわけだし。
0635nobodyさん2016/09/18(日) 20:42:54.10ID:???
少しずつ作って・実行なら対処するバグも1度に数個で
自分がちょっと前に追加したコードが原因だろうから範囲が狭くて見つけやすいけど。

完成するまで全く実行・デバッグしないでつくる->いざ、実行時に1度に大量のバグに見舞われる。
手に負えなくなるよ。
063612016/09/18(日) 21:11:07.29ID:???
まさかここで詰まるとは思っていなかった
原因が全く分からないし
昨日の夜から全く原因が分からん
063712016/09/18(日) 21:21:46.42ID:???
今日1日あったら解決すると思ってたのに
063812016/09/18(日) 21:28:29.48ID:???
NoClassDefFoundError、ClassNotFoundExceptionも大量に…
063912016/09/18(日) 21:49:30.66ID:???
HttpApiBaseを継承したら起動できないみたいだな
ここ調べた方がよさそう
0640nobodyさん2016/09/18(日) 22:12:21.92ID:???
はは。
064112016/09/18(日) 22:14:45.70ID:???
ここまで原因が見つからないって…
064212016/09/18(日) 22:28:22.44ID:???
キツイ…
0643nobodyさん2016/09/19(月) 10:06:23.73ID:???
なんか現象の起きる最小のjar作れん?
もしかしてGitHubからもってくればこっちで再現できたりする?
064412016/09/19(月) 10:40:42.90ID:???
>>643
今Pushしたから多分再現できる
環境が悪いのか、バグなのか分からないから動かしてくれると助かる
他にも色々バグありそうだけど、とりあえずTomcatの起動したい
064512016/09/19(月) 10:50:06.29ID:???
最小のjarは原因が不明だから難しい
064612016/09/19(月) 10:53:42.41ID:???
abstract class TestBase(private val httpMethod: HttpMethod, private val tokenFlag: TokenFlag, private val strParams: List[String], private val intParams: List[String]) extends HttpServlet {
}

class Test extends TestBase(HttpMethod.GET,TokenFlag.UNNECESSARY,List(),List()){
}

だとエラー

abstract class TestBase() extends HttpServlet {
}

class Test extends TestBase(){
}

だと動く
064712016/09/19(月) 10:59:55.64ID:???
abstract class TestBase(private val i:List[Int]) extends HttpServlet {
}

class Test extends TestBase(List()){
}

だとエラー

abstract class TestBase(private val i:Int) extends HttpServlet {
}

class Test extends TestBase(1){
}

だと動く
064812016/09/19(月) 11:02:26.71ID:???
abstract class TestBase(private val i:Map[String,String]) extends HttpServlet {
}

class Test extends TestBase(Map.empty){
}

だと動く
064912016/09/19(月) 11:05:08.84ID:???
List.empty…起動する
List()…エラー
065012016/09/19(月) 11:05:58.97ID:???
List(1)…エラー
使えないじゃん
065112016/09/19(月) 11:06:50.06ID:???
当然
List.apply(1)
でも駄目
065212016/09/19(月) 11:07:52.96ID:???
原因は分かった…でも何故?
謎でしかない
065312016/09/19(月) 11:22:55.46ID:???
原因判明したから質問サイト行ってくる
0654nobodyさん2016/09/19(月) 14:23:01.82ID:???
teratailか?stackoverflowか?2chか・・
065512016/09/19(月) 14:25:33.39ID:???
teratail
https://teratail.com/questions/48511
065612016/09/19(月) 14:47:02.51ID:???
ListじゃなくてArrayなら大丈夫みたいなのでとりあえず代用します
065712016/09/19(月) 14:54:59.36ID:???
でも本当何故エラーになるんだろう
065812016/09/19(月) 14:57:27.83ID:???
あれっ出来ない
065912016/09/19(月) 15:00:23.57ID:???
謎
066012016/09/19(月) 15:18:55.33ID:???
List以外にも原因ありそう
066112016/09/19(月) 16:03:55.92ID:???
もうこれどうなってるか分からん
0662nobodyさん2016/09/19(月) 16:43:56.86ID:???
なんか面白そうなスレめっけたw
こういう系のスレでちゃんと進んでるっぽいのは珍しいなw
0663nobodyさん2016/09/19(月) 16:48:31.02ID:???
くるタイミングおっそいわww
>>1はそろそろモチベーション切れかけてまた、2,3か月の休息とるんじゃねぇか。
066412016/09/19(月) 16:50:34.98ID:???
既にモチベ死にかけている
やっとサーバーサイド終わったと思ったらTomcatが動かないとか悲しすぎる
066512016/09/19(月) 16:51:46.20ID:???
Tomcatが動けばクライアントサイド始められるのに
066612016/09/19(月) 16:53:27.56ID:???
適当にプロジェクト分割してみる
0667nobodyさん2016/09/19(月) 16:56:08.96ID:???
Scalaとか使うからだなwwユーザー少ないし。
短くかけるってことは、裏で前提として覚える事がいっぱいあるから短くかけるんでって、
そんなのすぐれた言語とは思わん。

何事もバランス。そこそこ短くかけて、前提となる覚える事も少なくてみんな理解しやすい。
これで十分だわ。
066812016/09/19(月) 16:56:41.87ID:???
>>667
twitterもscalaだからwebには強いはず
0669nobodyさん2016/09/19(月) 17:01:43.62ID:???
Webとはあんま関係ないな。
Scalaは言語とコレクションのクラスライブラリぐらい?独自に提供してるの?
Web部分はJavaのライブラリに依存してるだろ。
067012016/09/19(月) 17:03:25.18ID:???
>>669
コレクションは不変のが結構ある
0671nobodyさん2016/09/19(月) 17:19:14.16ID:???
なんだモチベ尽きかけてんのかw
趣味プロジェクトでモチベは最大の敵だからなw
067212016/09/19(月) 17:21:08.72ID:???
Tomcat9って評価版だったのか
これ多分Tomcatのバグだわ
Tomcat8にする
■ このスレッドは過去ログ倉庫に格納されています