[過去ログ]
【PHP】下らねぇ質問はここに書き込みやがれ 12 (1002レス)
【PHP】下らねぇ質問はここに書き込みやがれ 12 http://mevius.5ch.net/test/read.cgi/tech/1619667579/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
717: デフォルトの名無しさん (ワッチョイ 895f-VlOp) [sage] 2021/08/06(金) 23:28:26 ID:RLLkP2Do0 >>716 最初に"TCP接続を明示的に切りたい"とあったので機能はないと回答した そのあたりは認識してほしい 環境依存にはなるがwebサーバーに通知つする仕組みはある fastcgi_finish_request tps://www.php.net/manual/ja/function.fastcgi-finish-request.php FastCGI用の物なのでapacheのmod_phpでは不可 また、Content-Lengthは後処理不要ならば付けなくても問題なし json出すならContent-Type: application/jsonは付けたほうがいいと思う http://mevius.5ch.net/test/read.cgi/tech/1619667579/717
720: デフォルトの名無しさん (ワッチョイ c17b-NIVl) [sage] 2021/08/07(土) 00:55:00 ID:dDF85n970 >>717 > 最初に"TCP接続を明示的に切りたい"とあったので機能はないと回答した 責める気はないが、これはさすがに屁理屈だろ。 572は確かに俺の書き方が悪い。 ただ、「初心者」が間違った「やり方」を選んでトンチンカンな方向に行くことはよくある話で、 これを防ぐ為には「最終的に何を目指してるか」を言わなければならないが、 俺は575の時点で、 ・俺が初心者であり、 ・後処理してる最中でもブラウザにパースさせてUXを改善したいから、 ・TCP接続を切りたい と全部揃えているのだから、本当に分かってる奴が居たら、この時点で 「それはやり方を間違ってる。ヘッダにContent-Lengthを付ければそれで済む」の回答が出てきて然りなんだよ。 それがおかしな小手先テクニック合戦になったり、 或いは上記のように全部正しく揃えているのにそれを理解せず「コミュ障」呼ばわりしてくるから、 PHPerは糞だと言ってるんだよ。 これは君も含めてね。何を相手に伝えるべきか分かってないんだよ。 まあコミュ障だからこそ、(=つまり何を伝えれば通じるかが分かってない) 相手がコミョ障かどうか(=つまり必要事項が全部含まれているか)を見分けることが出来ないという、 至極当然の話で、よくあるから慣れてはいるけども。 なんかNodeを勘違いしているっぽいが、プログラミングモデルのレイヤーはPHPと同じだよ。 PHPは上手く抽象化されてる(584)というのなら、そりゃNodeでもその他でも同じだよ。 実際書けば(文法が違うだけで)ほぼ同じコードになる。 下位のTCP接続を直接切りに行けるのはCで相当野蛮に書かれたものだけだが、そんな物存在してないでしょ。 だからこれはエスパーではなく常識で読み替えられる範囲だよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/720
721: デフォルトの名無しさん (ワッチョイ c17b-NIVl) [sage] 2021/08/07(土) 00:55:28 ID:dDF85n970 >>717 ただまあ、これはさておき、 そもそも環境依存コードを導入する気はないが、無料鯖は大体CGIモードだから行けるのか。 とはいえ少し金かけたらモジュールも選べて、 その際にいちいち「動かなくなりました」とか言われるのが面倒だから止めとくが。 ただ、これだとやっぱり昔は必要だと認識されてたって事だよ。 正直、Content-Lengthよりも直接的で分かりやすい解決策だから、俺も606で言ってるように、 最初に整備されるAPIであり、普通のプログラマにとっては第一選択肢の筈なんだよ。 ただこれだと、モジュール化した際に不要だと見なされて落とされたってことになる。これは何でだろう? 実装自体は至極簡単だし、基本的な物だから、「問題を多発させた」とかない限り落とす判断にはならないはずだけど。 > また、Content-Lengthは後処理不要ならば付けなくても問題なし MDNは「付いている時も、付いてない時もあります」と言い、 W3Cは「出来る限り付けろ。ストリーミング以外は付けられるだろ」と言い、 実際の他サイトは確かに「付いている」ので、ちと迷ってる。 > json出すならContent-Type: application/jsonは付けたほうがいいと思う これは勿論付けてる。てか、そうじゃないとブラウザで正しく読めないので。 > 楽に使うならクラス作って継承して使えばエレガントに書けると思う 問題はそこではなく、メモリを出来るだけ食わない方法でやろうとしてた。 jsonはDBの読み出し結果から直接生成する(長さを予期出来ない)ので、Content-Lengthを付けるにはob_xxxxを使うしかないが、 これだと単純に倍のメモリを食ってしまうので。 まあ君らは「でも物理で殴る方が速いんでしょ?」なノリで、実際これも事実ではあるが、俺としては以下と同様、 正しく使えばポンコツでも速いぜ!を目指したいんだよ。 https://qiita.com/masarufuruya/items/3bd72326448e4f8fa569 JSがそうなんだけど、おそらくPHPも同様で、糞コードばかり食わされて正当な評価を得ておらず、 それなりに洗練されたコードだったら意外と速いんだろうとは思うよ。 Webでは「速いよりも早い方が重要」だからある程度致し方ないのだとしても。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/721
723: デフォルトの名無しさん (ワッチョイ c17b-NIVl) [sage] 2021/08/07(土) 09:24:23 ID:dDF85n970 >>717 一応こちらの現時点の結論を言っておくと、 Content-Lengthはストリーミング以外は全部つけないと駄目だな。RFCでもSHOULDだし、 https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2 動きを見る限り、apacheもこれをスヌープしてる。 よって、「仕様準拠」なら flush() だけで何も問題ないから、 fastcgi_finish_requestはモジュール化した際に廃止された、と見える。 だから711内のページ筆者もだいぶ間違ってて、 まずConnection: closeをTCP接続終了(いわゆるFIN/FINACK/ACK)と勘違いしてるが、 実際はこれは同じコネクションを再利用するかの話だから関係ないし、 HTTP/1.1だとデフォでkeep-aliveなので無駄にcloseにするとバグに当たる可能性があるから悪手だ。 https://en.wikipedia.org/wiki/HTTP_persistent_connection#HTTP_1.1 そしてContent-Lengthを付けたら上手く行くよ!ではなく、付けないと話にならなくて、 仕様準拠=付けてれば最初からこんな事にはならずに済んでる。 だからこいつも俺も『仕様を知っている者から見れば』ただのマッチポンプでしかない。 ここで711内ページ筆者、俺、或いは君らも含めての問題は、レイヤーを間違ってることだ。 PHPは生のヘッダを普通に扱えるレイヤーでのプログラミングになるから、ヘッダについての仕様を(本来は)熟知してないといけない。 だから575に対してはいきなり「Content-Lengthヘッダ付けろ馬鹿タレ」とぶった切れないといけない。 とはいえ昨今の状況であらゆる階層の仕様を熟知しろなんてどだい無理な話ではあるが。 だからやっぱりもう一つレイヤーを上げるべきなんだ。 ヘッダの知識がない状態で具だけ書きたいのなら、ヘッダ周りを自動的によしなにやってくれるフレークワークを使うべきだろう。 そしてLaravelは見たところそんな感じだ。 なるほど、「セッション周りとかはフレームワークに任せてLaravelだけ使ってろ」というのは当たってる。 (俺も含めて)素人ほどフレームワークを使うべきだろう。 とはいえ、俺はデプロイ先が無料サーバなのでいちいち仕様確認して素PHPレイヤでのプログラミングをするしかないのだが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/723
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.052s