【PHP】下らねぇ質問はここに書き込みやがれ 12

■ このスレッドは過去ログ倉庫に格納されています
2021/04/29(木) 12:39:39.75ID:P0iZ4CYt0
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ

PHPに関する質問スレです

前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 11
https://mevius.5ch.net/test/read.cgi/tech/1591334726/

次スレは>>980以降
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2021/08/05(木) 12:19:31.36ID:jTl1oJKL0
まだやってて草w
で、この朝6時から20レス以上してるガイオヤジは、なんでPHPにこだわってるの?

> マルチプロセスだから根本的に考え方が違うんだな
> 質問には確かにexecが正解のように見える
と自分で書きながらもPHPではどうしても納得いかないんでしょ?
だったらPHP以外でやればいい
質問はこれで綺麗サッパリ解決したし、あとはチラシの裏へどうぞ

ちなみに>>610については、例えばPythonでsubprocess.run()を使っても一緒の話なわけで、
「PHPだから」という話ではない
それを非同期で実行したいならPythonならsubprocess.Popen()を使うし
PHPならpopen()やproc_open()を使う
2021/08/05(木) 12:19:59.18ID:bqGeTZjz0
PHP はレンタルサーバー用言語

Ruby on Rails は、プロ用フレームワーク。
WSL2 Linux, Heroku, AWS

だから、PHPでは転職できないから、KENTA のサロンでは勧めない

Node.js, Django も、Railsのシェアを崩せなかった。
募集がなく転職できないから、サロンでは勧めない

唯一の時給1万円コースの道筋は、Ruby → Go だけ

企業が欲しい人材は、AWS Solution Architect。
AWS でシステム構築運用できる人
2021/08/05(木) 12:28:51.37ID:6TA++zayd
>>616

> 本処理ではbodyを出力する場合もあるし、403等でheaderだけで終わる場合もある。

だから、今の仕様はそうなのかも知れませんけど、その本処理はユーザーがアクセスしただけで処理が出来るなら本処理が終わるまで何も出力しないように書き換えればいいんだし、何かユーザーの入力に応じて処理するのなら、postで再アクセスさせて本処理が終わるまでなにも出力しないように書けないんですか?

まあいずれにせよ、リダイレクトはそもそも論外のようなので不毛な話しではありますが。
2021/08/05(木) 12:28:59.36ID:bqGeTZjz0
食べチョクみたいな若い女の子が、Ruby on Rails で1人で始めたサイトでも、
求人募集は、AWS に詳しい人

システム構築運用できる人

コロナで取引量が30倍になった。
こういうのは言語・アプリで解決できる問題じゃない

だから、むしろプログラマーよりも、LinuC などのLinux の資格保持者とか、
AWS Solution Architect が必要

今は、プログラミング言語よりも先に、
Linux コマンド・シェルスクリプト、Docker Compose, VSCode などが来る
2021/08/05(木) 12:30:20.75ID:F8+XC2Dv0
>>623
まあforkしたいわけでもないんだけどね。それも事を大きくしすぎ。

Pythonを選択しないのは、俺が知らないからだね。
ただしレンタルサーバーでも使えるから、選択肢としてはありなんだろうけど、
言っちゃ悪いがPython使う理由なんてPHP以上にないでしょ。
2021/08/05(木) 12:35:56.18ID:F8+XC2Dv0
>>625
一応聞くが、headerはbodyの後には出力出来ないってのを知ってるか?

ちなみに本処理はgetであって、postではない。
そして304ならheaderのみ、200ならheader+bodyの、至極普通のget処理だ。
その200、つまりheader+bodyを送信後に再びLocation"header"を出すのは不可能だが、それは理解してるか?
2021/08/05(木) 12:37:33.28ID:jTl1oJKL0
>>627
Python使えなんて一言も書いてないんだがw
PHPのexec()の例は別の言語でも一緒って例を示しただけ

ほんと頭が固いというか思い込みが激しいというか…
現場に居たら陰口叩かれまてるタイプだわお前はw
2021/08/05(木) 12:44:05.08ID:F8+XC2Dv0
>>629
なら、PythonもPHPと同程度に文法が糞だ、というだけだろ。
実際、Pythonを「プログラミング言語として」褒めてる奴も少ないだろ。
みんなが使ってるから使う、というのが大半であって。
2021/08/05(木) 12:44:10.37ID:jTl1oJKL0
ちなみに、ものすごく低レベルな方法だがこんなやり方もある

> SQLiteを操作してhttp出力
の中に
<img src="重い処理をするPHP" width="1" height="1">

と書くだけw
これならcronが使えない環境でも簡単にできる
これで解決したら笑う
2021/08/05(木) 12:48:28.04ID:F8+XC2Dv0
>>631
それは面白い発想だが、べき論で言えば反則だろうよ。
ただし、確かに技術的には解決する。
2021/08/05(木) 12:58:15.10ID:F8+XC2Dv0
>>631
いや待て、今回はhtmlではなかったので駄目だった。
主にjsonとxmlだ。

まあしかし、発想自体は面白いよ。
ただ、なんか余計なアクセスが出てるように見えるからそれで実装することはないが。

今現在の実装だと、「運が悪く、ブラウザも怠慢していれば、倍かかる時があります」であって、
そんなに問題な実装でもないし、実際htmlを出すのは最初だけ(SPA)にしようとしてるので、それでは解決出来ない。
2021/08/05(木) 13:00:46.26ID:jTl1oJKL0
>>632
こんなもんは、例えば何かしらのトラッキングや、メルマガで配信するHTMLメールで開封率を調べる時等で
当たり前に使われてる方法だけどねぇ…

でも、元の質問は>>575だろ?
これ>>631で解決するよな?w

でもどうせ気に食わないんだろ? だったらPHPなんかやめてサッサと他の言語でやればいい
なんでこのスレに居るわけ? サッサと出ていけよw
2021/08/05(木) 13:06:35.62ID:jTl1oJKL0
>>633
また後付でなんか出てきたw
>>575はとにかく、重たい後処理をするPHPを非同期で起動させればいいだけ
それがexec()だろうがproc_open()だろうが<img>タグだろうが同じだ

それが我慢ならんのなら、それ以上PHPにこだわる必要性は何もない
まぁお前みたいな「面倒くさい人」はどこにでもいるよw
もうええでしょ
2021/08/05(木) 13:08:11.92ID:F8+XC2Dv0
>>634
ああ、Webビーコンと大昔に呼ばれてて、その結果htmlメールは悪だとされた奴だな。
今でも普通に使ってるのか?それはそれで問題だとは思うが。
少なくとも、俺は>>631で出来る状況であってもそれは使わない。今現在の実装の方がマシ。
2021/08/05(木) 13:08:51.75ID:xWv0yV5l0
pythonというのは、
等加速度直線運動の3公式で、多くの問題を解決するようなもので、
これをできれば、スピードアップするらしいが。
高度なことをできる部品はある。
2021/08/05(木) 13:26:51.61ID:F8+XC2Dv0
>>635
ちなみに
> 重たい後処理をするPHPを非同期で起動させればいいだけ
これが間違い。

単に、出力を閉じる connection_close みたいな関数を呼んでユーザーとの接続を終了させ、
そのあとそのプロセスが引き続き後処理をすれば良いだけだし、これが一番軽い実装だ。
そして他言語だとこれは出来るのに、何故この基本的な操作ができないのだ?という話。

非同期=軽いとか思ってる馬鹿も特にJSには多いんだが、非同期が軽いわけではないんだよ。
むしろキューイングしてやる分だけ重くなる。
2021/08/05(木) 13:41:39.90ID:bqGeTZjz0
>>628
Ruby on Rails でも、view を、render できるのは1回限り。
double rendering 禁止

>>633
Railsなら、
format.html
format.json

と書いておけば、例えば、
books/1 なら、HTML、
books/1.json なら、JSON を返す

テンプレートファイルも、show.html.erb, show.json.erb と、ERB で2つ書いておく。
show.json.jbuilder と、jbuilder を使えば、もっと簡単に、オブジェクトをJSONにできる

Railsには、SPA 用のAPI モードもある。
HTMLを返さない。JSONでやりとりする

フレームワークを使わず自作してると、10年やっても低品質のまま。
Railsを1年やっただけの人にも勝てない
640デフォルトの名無しさん (ワッチョイ 4dcf-pCDs)
垢版 |
2021/08/05(木) 13:44:24.19ID:/9S9EoKc0
robots.txtを守らないと逮捕されるって本当ですか?
2021/08/05(木) 13:47:42.25ID:jTl1oJKL0
>>638
だからさー…あのなぁ…俺は「>>575みたい低レベルな話なら」それで解決するだろ?と言ってる
しかもレンタルサーバでやるような低レベルなもんだろ?

ここは質問スレだ
俺は「その低レベルな質問に対して方法を提示した」だけ

言語仕様が我慢できないなら他の言語を使え 何度も同じ事を言わせるな
つかお前、なんかの病気じゃね?w
2021/08/05(木) 13:51:30.80ID:jTl1oJKL0
>>640
どこから聞いたんだよそんな話w

例えば640が、robots.txtの記述内容を無視してスクレイピングをしたとする
そのせいでサーバに負荷をかけまくりサーバをダウンさせれば、罪に問われる可能性はあるわな
もしくは著作権で守られているコンテンツを無視して転載しても、罪に問われる可能性はあるわな

でもそれは、robots.txtを守らないと逮捕されるって話とは別の話だよな?
理解できるか?
2021/08/05(木) 13:59:25.27ID:QPICGq8w0
ID:F8+XC2Dv0
ご大層なゴタクを並べてるのにサーバーはレンタルサーバーなのですね
644デフォルトの名無しさん (ワッチョイ 4ee6-A9KZ)
垢版 |
2021/08/05(木) 14:04:31.11ID:xD0lMLd30
>>643
www
2021/08/05(木) 14:06:09.47ID:IpTlZujB0
>>628
> 一応聞くが、headerはbodyの後には出力出来ないってのを知ってるか?

知ってますよ笑
だから、本処理終わるまで何も出力しないように書き換えればと言ってるんです
本処理完了の次の行でheader locationを出力し、リダイレクト先のページにパラメーター渡して表示すればいいです

<?php
sleep(3); // ←本処理の代わり(ここまで何も出力しない)
ignore_user_abort(true);
header('location: hoge.php?a=パラ1');
flush();
sleep(10); // ←後処理の代わり
exit;
?>

不可能かどうか、コピペで実行してみて笑
2021/08/05(木) 14:22:57.10ID:F8+XC2Dv0
>>592
イマイチ全体像が掴めないのだけど、確かにジョブキューイングは出来るようだ。
ただ見たところLaravelのソースコードはphpのようだし、RedisだSQSだとか言ってるから、これは、

DBに対するPDOのように、キューイング機能のあるRedis/SQS等に対しての共通ラッパを提供したもの

ということでいいのか?
(そもそもRedis/SQS等は初耳なので大幅に勘違いしてるかもだが)
なお、確かに今回の俺の用途ならこれで対応可能だ。
話が大げさになりすぎてる感はあるが、
元々Laravelを知ってて、かつ、使える環境なら、この選択もありだろう。
いちいちキューを自前で作るよりもキューサーバー、なんてのは
あらゆる物をマイクロサービスに分割するWeb系的な発想ではあるが、まあ確かに面白い。
実際、Javaとか無駄にモノリシックになってて開発人月がでかくなりすぎてる感はあるし。


ただこれ、インストールが必要みたいだし、最安(=無料)のレンサバじゃ動かないよな?
インストールが必要/有料での契約なら俺的にはNodeの方がマシで、PHPを選ぶ理由がない。
既に言ったが、PHPで書くのは無料サーバーでも動かす為で、
プログラミングについて何も知らない人がGitHubからクローンしたらもう動く!みたいな
超イージーデプロイじゃないとわざわざPHPで書く意味はない。俺なら書き慣れたJSを選ぶ。
(勿論君らがPHPを選ぶのは自由として)


結果的に、エンタープライズな連中はLaravel等を使うから問題なく、こんな基本的な問題も放置されてるってところか。
巣のPHPを使う連中は基本的に初心者であり、細かいことは気にしてないのだろうし。
2021/08/05(木) 14:31:39.19ID:F8+XC2Dv0
>>641
> しかもレンタルサーバでやるような低レベルなもんだろ?
これはその通りだ。
お前らのやってるエンタープライズなコードでは許されないような方法でも、許されるのだろうさ。

とはいえ、それをやるかどうかはまた別だろ。
プログラミング初心者が四苦八苦して数百行のやっと動くコードを書いてる状況ではないんだよ。
他言語ではバリバリに書ける奴がPHPだとデタラメやっていい、ってことにもならないだろ。
それは矜持の問題だ。
勿論、お前がデタラメやるのもお前の自由だが、俺的には恥ずかしくてそんなコードは公開出来ないよ。
2021/08/05(木) 14:32:09.85ID:bqGeTZjz0
Ruby on Rails では、redirect_to でリダイレクトする(302・発見)。
lesson/step1 にアクセスすれば、lesson/step2 へ飛ばされる

その時、flash に情報を入れておけば、リダイレクト後に使える。
これで、abc と表示される

def step1
flash[ :notice ] = "abc"
redirect_to action: "step2"
end

def step2
render plain: flash[ :notice ]
end
2021/08/05(木) 14:36:28.61ID:F8+XC2Dv0
>>645
なるほど、その方法でも出来るのは理解した。
が、それだと2往復するし、やっぱりかなり無駄だろ。

結局お前らは「動けばいい」でしかないからそういうことになる。
それだったら、現実装の方がまだマシだよ。


ただまあ、エンタープライズならLaravel等でキューサーバー、ってのは分かった。
確かにこれで玄人は問題ないのだろうさ。
2021/08/05(木) 14:45:20.58ID:bqGeTZjz0
例えば、Ruby on Rails では、

食べチョクみたいな若い女の子が、1人で始める場合は、Heroku, Bootstrap。
食べチョクは、AWS だけど

AWSなら、くろかわこうへいのサロンにも入る必要がある

KENTA, 2021/3

女性エンジニア&個人開発者のだむはさんにインタビュー
www.youtube.com/watch?v=ieljaqRC98A

Heroku, S3, 決済はStripe, Docker

こういうのでビジネスを初めて、会社の時価総額1億円ぐらいへもっていく。
元々、cloud 9, Heroku でクラウド開発してるし、絶対にLinux

XAMPP, MAMP など、Linux以外を使うことはない。
環境が異なると、テストにならない
651デフォルトの名無しさん (ワッチョイ d58c-By/s)
垢版 |
2021/08/05(木) 14:50:29.16ID:IpTlZujB0
>>649
理解いただけてなによりです。
ただ2往復の意味が良く分かりません。

1.本処理+後処理.phpにGet付でアクセス
2.本処理終わったらbody用パラメーターつけてhoge.phpに飛ばす
3.ユーザーにはhoge.phpが表示される
4.サーバー側は後処理が継続される

進行は分岐するけど常に1方向だし、どこにも戻ったりもしてないと思いますが。
2021/08/05(木) 14:55:48.88ID:F8+XC2Dv0
>>651
リダイレクトは別サイトにもいけるだろ。
だから基本的にはブラウザとは2往復するはず。

結果的に同一サイトにリダイレクトされる場合でも、おそらくブラウザはもう一度接続し直してくるはず。
この辺は試した方が早いかもしれんが。
2021/08/05(木) 15:07:47.04ID:cuxOZbzu0
無料レンタルサーバを使う上級者様が朝の6時半から32レスという渾身のギャグ
654デフォルトの名無しさん (ワッチョイ d58c-By/s)
垢版 |
2021/08/05(木) 15:08:57.20ID:IpTlZujB0
>>652
なるほど、再接続という意味ならそうですね。

では別の案ですが、
1.本処理中に吐き出すHTMLの先頭に、文字列なりHTMLタグなりの目印を検出するJavascriptを仕込む。
2.本処理が終わったタイミングで目印になる文字なりHTMLタグなりを出力(Flush)する。
3.Javascriptで対象の目印を検出したら window.stop() で、ブラウザ側から切断させる。
2021/08/05(木) 15:17:03.80ID:F8+XC2Dv0
>>651
ああだからな、元々は「処理を速く見せる為」なんだよ。それで、

・接続を明示的に切れれば、往復1回+本処理
・接続を明示的に切れない現状では、往復1回+本処理+後処理
・651方式で転送した場合、往復2回+本処理

というようにユーザーには見えることになる。
結果、ネットワークが速くて後処理時間より短いならこれもありかもしれないけど、ネットワークも地味に重い。
この辺のさじ加減は君らの方が詳しいだろうけど、
現状の後処理は、整理するデータがある場合は400ms程度、無ければ10-40ms程度だ。
整理するデータが存在するのは1/20程度の確率だと想定している。
となると、単純には後処理は平均して29.5-58ms程度の重さになる。
だから、ネットワークがこれ以上重いと赤字になってしまうんだよ。
(XAMPPでの時間計測なんて意味あるかボケ!というのはさておき)
2021/08/05(木) 15:19:28.77ID:qHbol2On0
ID:F8+XC2Dv0は開発環境がXAMPPで無料レンタルサーバを使う初心者なのだから身の丈にあったことをすればいいのにキチガイ過ぎる
657デフォルトの名無しさん (ワッチョイ 6501-pCDs)
垢版 |
2021/08/05(木) 15:26:17.55ID:tyzHpayb0
>>642
ID:bqGeTZjz0の人にrubyスレで教わりました
2021/08/05(木) 15:31:25.87ID:F8+XC2Dv0
>>654
それは君がブラウザの動きを分かってない。

flushで出力されるのはPHP側のバッファだけで、apache/nginxのバッファはflushされない。
だからapache等でgzしている場合には最後まで出力されるかどうかはかなり怪しい。(というか、多分されない)
そしてブラウザはある程度溜まったら勝手に出来るところまでパースする。
そしてパースが完了しないとJS側からはデータにアクセスしようがない。(送信途中のデータは読めない)

よってその方法では出来ない。
接続を明示的に切れれば、apache等は溜まってるデータをflushして接続を切りに行き、
それを受けてブラウザはすぐにパースを開始する。
だから、接続さえ明示的に切れれば、すぐさまパースされるんだよ。その後PHPが動き続けてても関係なく。
これをやろうとしている。
まあ、Laravelでキューサーバー使えというのはその通り。エンタープライズならこれなのだろう。

多分君はDOM(HTMLページ内)のJSが同期的に動くのを見て勘違いしてる。
ajaxで取得したデータは、途中では読めないよ。
2021/08/05(木) 15:31:32.98ID:jTl1oJKL0
>>657
そいつは有名なキチガイだから相手にしたら駄目よ
今このスレでも ID:bqGeTZjz0 で支離滅裂な事を書いてるけど頭の病気だから
2021/08/05(木) 15:38:06.77ID:F8+XC2Dv0
>>656
だから最初から言ってるが、
俺はPHPの初心者ではあるけどプログラミングは初心者ではないんだよ。
だから、PHPといえども恥ずかしいコードは書けない。
2021/08/05(木) 15:54:01.25ID:qHbol2On0
>>660
いやいやご冗談がきつい
どこからどう見ても初心者ですよ?
初心者じゃないならXAMPPや無料レンタルサーバに固執しなくていいですし
PHPに固執しなくてもいいですからね
2021/08/05(木) 15:57:19.11ID:F8+XC2Dv0
ちなみにお前ら、PHPにコントリビュートしてみたい奴はいるか?
居るなら手伝うが。
Web開発ってのは、「こんなポンコツを使わされるくらいなら俺が直してやるからソースコードよこせ!」の繰り返しではある。
今の俺がそれだ。

write_closeは基本的な関数であり、存在しないのがおかしい。
実装は、exitで行っているであろうクローズ処理を前倒しすればいいだけ。具体的には、

1. exitのソースコードを「接続を閉じる部分」と「それ以外」に分け、
2. 「接続を閉じる部分」が write_close() で呼ばれるようにし、閉じたかどうかをフラグで保存、
3. exit ではそのフラグを見て、閉じてない場合は呼んでから、「それ以外」を呼んで終了とする。

とまあ、要は exit のソースコードを2分割すれば済む話ではある。
dieとか、他に止める方法もあるから既に分割されてる可能性もある。
この場合は、単純に関数エントリを一つ追加するだけで終わる。

ソースコードは既にダウンロードしてmain.cとか見てるが、肝心のexit/dieのコードがどこにあるのか分からないんだな。
知っている奴がいればよろしく。
なお、俺一人だとコントリビュートはしない。
俺はPHPの初心者であり仕様を知らなさすぎて、俺一人だとバグを埋め込んでしまうから。
2021/08/05(木) 15:59:24.92ID:bqGeTZjz0
レンタルサーバーの速さを言っても、仕方ない。
他人と共有しているから、他人がリソースを使うと、待たされる

安いのだから、低品質も仕方ない。
そういうものと割り切るしかない

KENTA は完全に割り切ってる。
PHP は一生使わないでよいと言ってる

金にならないから。
低品質で安い仕事
664デフォルトの名無しさん (ワッチョイ d58c-By/s)
垢版 |
2021/08/05(木) 16:09:21.48ID:IpTlZujB0
>>658
あなたこそ、理屈はともかく現実がわかってないかと。
以下をtest.phpにコピペしてブラウザからアクセスしてみてください。
(Chrome、FireFox、Edgeのどれでも)
hello world が表示されて、接続が切断され、"これは表示されない"は受信されません。
----------
<html><head>
</head>
<body>hello world
<SCRIPT language="JavaScript">
window.stop();
</SCRIPT>
<?
echo str_pad(" ",4096);
flush();
sleep(10);
echo "これは表示されない";
?>
</body>
</html>
----------
2021/08/05(木) 16:10:32.06ID:bqGeTZjz0
Ruby on Rails では、
XAMPP, MAMP など、Linux以外を使うことはない

Linux コマンド・シェルスクリプト、Docker, Heroku, AWS も、
KENTA のサロンの初心者用コースに入っているから

それに皆、AWS のくろかわこうへいのサロンにも入る

Windows 10, WSL2, Linux, Docker, VSCode でも出来る

XAMPP, MAMP とか、訳の分からない環境を使うことはない。
動きが本番環境と異なるから
2021/08/05(木) 16:13:52.63ID:cuxOZbzu0
id:F8+XC2Dv0ってPHPがApacheのモジュールとして動作する時の理屈すら理解してなさそうw
2021/08/05(木) 17:59:10.16ID:F8+XC2Dv0
>>664
まあわざわざコード書いてよこしたのだから、こちらでも試したよ。
ファイルは200Bytes, ダウンロードサイズは 4.4KBと表示されてる。
確かにそちらの意図どおり、ハロワだけ先に表示されるよ。(パースされてる)
4KBパディングすれば、通常ならバッファをキック出来るから、確かにパーサもキック出来るはずだし、実際そうなってる。

ただな、時間を既に書いたが、それでは間に合わないんだよ。
ネットワークってのは地味に遅くて、例えばここからPHP.netへのpingは264msかかってる。
後処理は平均29.5-58ms程度だと予想されてるので、window.stopがサーバーに間に合わない。
結果、パケットは送信済みで、受け取られたパケットが捨てられるだけだよ。

ただし確かにパースはされてる。(=その方法でもユーザーの体感速度は上がる可能性がある)
ただ、それはページのhtmlだからであって、ajaxではその方法は使えない。
ページのhtmlはブラウザの速度競争のおかげで出来るだけ早くパースするように出来てるからだ。

xmlを送る場合、閉じタグ以降に何かあったらエラーだったので、パディングで押し込みは無理だ。
jsonについては後ろにパディングしてもエラーは出ないようなので、押し込み自体は出来るが、
そもそもAPIが途中のパース結果を見せるように出来てないから、普通に実装されてれば全部揃ってからパースだよ。
世の中の大部分のサイトがこの「押し込み」で高速化してる、というのならブラウザも対応するはずだけど、聞いたこと無いでしょ。
2021/08/05(木) 17:59:23.81ID:X/tiD49H0
記録37レスか
殿堂入りだな
2021/08/05(木) 18:01:07.93ID:X/tiD49H0
と思ったらまだ記録更新するつもりか
2021/08/05(木) 18:23:53.35ID:IpTlZujB0
>>667
間に合わないの意味がわかりませんです。
本処理終了の時点でブラウザ表示に必要な情報と、その次の行にwindow.stopまでを一気に吐き出すんだから、そのあとにサーバーから何か来て破棄されようが、どうでもいいんじゃないかしら?
要は十分な情報を受け取った段階でブラウザ側から切断してるんですよ。

本処理の後の後処理を待たせてる時間をなんとかしたいのが目的なのに、4KBでぐだぐだ言われてもねぇ。

後処理を待たせてる時間と比較したら明らかに早い段階で通信終了してるはずですよ。なんとかしたいレベルってことは人間が認識できるレベルの待ち時間は発生してるんですよね。それと比較して4KBは人間にわからないレベルの時間ですよ。

xmlが〜とかは、htmlでラップするなり、頭良いんでしょうから工夫してくださいな。
2021/08/05(木) 18:32:12.95ID:xWv0yV5l0
接続の切断が目的なら、
<?
echo str_pad(" ",4096);
flush();
sleep(10);
これは、いらない。
2021/08/05(木) 18:37:28.54ID:IpTlZujB0
>>671
あら、そうなんですか?
後学のためにどうやるのか教えて下さい
2021/08/05(木) 19:02:41.47ID:Sb1zsMiv0
>>654
コレ、面白いね
2021/08/05(木) 19:56:24.99ID:uMZDvd8qa
無職のアスペルガーであるコミュ症プログラマーはエネルギーが違うね
そのエネルギーをもっと違うところに使おうか
2021/08/05(木) 20:15:50.49ID:F8+XC2Dv0
>>670
「間に合わない」はこちらの勘違いだった。その後送信データはないので関係ない。

とはいえ、君の案を採用することはないから安心しろ。
それはexecより酷すぎる。
実際のところ、ajaxでhtmlを取っても途中でパースするとは思えないので、iframeに突っ込んでそこから取るしかないが、
そんなコードを見せられたら、ハア?ってなるだろ。

それよりはまだexecの方がマシ。環境依存コードは散らかされたら終わるが、俺がやるのでそれはないし、
とりあえず今回については linux.php と windows.php に纏めておけば、そんなに悲惨なことにならない。

纏めると、よい順に、

1. write_close()を呼ぶ。が、無いのでどうしようもない。
 他言語では普通にあるこれがないのでPHPはクソ、
 そしてこれが必要なことを理解出来ないのでPHPerもクソ。
 (なおコントリビュートする気がある奴が居たら手伝うのでよろしく。
 ちなみにexitとdieは同じらしいので今は分離はしてないね、多分。そしてこの辺の基本的な仕様すら抑えてないから俺だけでは無理だ)
2. 現実装。多分平均 29.5-58ms程度待たされることになる。
 が、そもそもajaxはほぼ自動アップデータだし、実際のサイトではどれくらいの速度なのか不明だし、
 これがもっさり感につながるかは分からない。
3. exec。待たされることはないが、環境依存コードになるので開発とデプロイの手間が増える。
 とはいえ、今のところのPHP的な正解はこれのようだ。
4. htmlタグでラップしてiframeに突っ込んでパースさせる。
 ただ、上から下のdomは触れた気がするが、下から上には触れなかった気がするので、実際はchannelで通信か?
 まあやれば出来るが、コード見たら呆れられるだろ。
 execは精々数行で済むのに対し、こちらは一手間二手までは済まないし、execよりも遅いし。

やるのが目的ならそれで良いが、一応execという解があるのだから、それよりもマシでないと意味がない。
今のところ、現実装のままで本番環境まで持っていき、実際の使用感を確かめて、必要ならexecか、というところ。
2021/08/05(木) 20:22:29.50ID:F8+XC2Dv0
>>670
> なんとかしたいレベルってことは人間が認識できるレベルの待ち時間は発生してるんですよね。
ちなみにこれはない。まだ部品を動かしている段階。

ただそもそもC出身なので基本的にノーコストで速くなるのならそれを選択する。
そして普通の環境では有る close が無いので面食らっているわけだ。
俺が見落としてるだけだと思っていたが、本当にないのだから驚きだ。
2021/08/05(木) 20:32:09.79ID:Sb1zsMiv0
まー設計レベルでミスってるから write_close みたいなこと言い出してんだけど、2年ぐらい Web に関われば、自力で解決できるかもね
がんばれw
2021/08/05(木) 20:54:11.00ID:xr/U2THc0
アスペおじさんに50の質問しようぜ

>>675
・PHPはクソクソという癖してPHPにしがみついてるのはなんで?
・なんで無料レンタルサーバーなの?無職だからお金ないの?
・任意でcloseできてウェブと親和性が高い言語って例えば何?あるならそれ使えば?
・例えばNodeならできるが?Nodeでやればいいのに何でやらないの?
・Nodeが使えるサーバーってVPSで500円ぐらいで用意できるけど500円も払えないの?それとも自分じゃサーバーを作れないの?
・何度かproc_openって出てるみたいだけどそれを無視してるのはなんで?
・そもそも働いてるの?
・そんなコミュ能力で仕事できるの?
2021/08/05(木) 21:04:38.27ID:tYvxU5+Zr
無料レンサバ案件受けるか普通
イキっててキメぇわ
2021/08/05(木) 21:05:44.43ID:IpTlZujB0
>>675
あーいえは、こーいうで、なかなか楽しかったです
あなたが不可能と断定したものを、あたしは2つも実現してみせたんですから、少しは敬意を表しなさいよ笑
断定したことをひっくり返されても、上からの態度とか、かっこわるいわよ
そんなんじゃ、いつまで経っても童貞卒業できませんよ
2021/08/05(木) 21:19:16.52ID:xWv0yV5l0
>>672
場合分けしました。
とは言え、ググって原因は予想したけど。

昔、「システム業界では、滅多に不可能と答えてはダメ」というようなことを言われたことがあります。
2021/08/05(木) 21:22:27.97ID:F8+XC2Dv0
>>678
proc_openはexecと変わらんだろ。
それで環境依存無しのコードが書けるわけでも無し。

PHPについては何度も言ってるように無料レンタルサーバーで動かす為で、
それは俺が使う用ではないからだよ。
PCのことなんて分からない連中でも動かせるようにして、しかも無料なら試しにやってみようかともなるだろ。
この辺については俺がどういうアプリ戦略を採るかだから、意見言われてもああそうですか、でしかない。
そしてここで色々ひけらかして後々粘着されてもウザイだけだから、特定出来るほど詳しく言うつもりもない。
なおNodeの無料鯖が日本に出現したら間違いなくそれに向けて作る。
今それがあるのならPHPは捨てるし、多分今後は書くこともない。

既に言ったが俺的にベストなのはサーバレスで、実際はレンタルサーバーよりもサーバレスが断然いい。
だからherokuの鯖が日本に出来るのがベストだが、無いのだから仕方ない。
PHPは糞だが、そもそも俺のアプリはそんなに大きいものではなく、
むしろSQLiteのラッパでしかないので、今はphp.netを睨みながらやってるような状況だが、それでも何とか進めてる。

ただまあ、俺が考えてることは今のWebからすると奇妙な事だから、君達と話が噛み合わないのは仕方ない。
それで君らが頭に来てるのも分からんでもない。
ただ先述の通り、詳しく言うと後々の憂いになるから、お互いに技術的なこと以外には踏み込まないようにした方がいい。
Webってのはそれくらいの距離感が丁度いいのだと俺は思ってる。
2021/08/05(木) 21:23:55.06ID:xWv0yV5l0
場合分けしました。 →場合分けして検証しました。

たいした仕事ではなかったんだけど、
ある公式を忘れても、基本の基本から証明できるので、
基本の基本が用意されてれば、(システム業界では)不可能と答えてはダメなんです。
2021/08/05(木) 21:24:45.00ID:tYvxU5+Zr
しかもSQLiteって笑うところだな
2021/08/05(木) 21:25:17.35ID:F8+XC2Dv0
>>680
つかまともな解じゃねえし。それでドヤられても困る。
動くっつうのと、やっていいかと、やるべきかは、別の問題だよ。

ただまあ、アイデアは面白いよ。それは他の人も言ってるとおり。
2021/08/05(木) 21:30:22.62ID:F8+XC2Dv0
>>684
エンタープライズ用途ならスケールアウト出来ないSQLiteは論外なのだろうけど、
ぶっちゃけ俺の用途ではSQLiteで十分だし、それは既にチェック済み。

というかね、単体では十分速いよSQLite。
まあ、他は使ったこと無いんだけどね。
SQLとか知らんし、とりあえず一番簡単な奴から、ってことで試して、十分だったのでそれまで。
2021/08/05(木) 21:40:09.08ID:tHJjXwU70
>>682
execとproc_openが同じなんだw
もうこの一言で満足したわ
2021/08/05(木) 21:44:25.28ID:tHJjXwU70
ちなみに解決法の例
https://github.com/elazar/asynchronous-php
あー面白かった
満足したわ
2021/08/05(木) 21:48:51.81ID:cTOwQa60H
上のレン鯖の人は、
・無料で使える
・日本国内に鯖がある
・好きなミドルウェアや言語をセットアップできる
という条件を満たす環境があるなら、PHPに拘らないという主旨の発言をしているようにみえるが、その認識であってる?
2021/08/05(木) 21:58:56.90ID:IpTlZujB0
>>681
場合分けとは?
具体的にどういうコードにすればいいのか教えてもらえるとありがたいです。

「いらない」とは、単純に指摘箇所をコードから削除するだけですか?
2021/08/05(木) 22:05:04.22ID:vJjfvU2/0
php嫌いなのは分かるし俺も別に好きじゃないが、じゃあなんで使うんだよ、使わざるを得ないなら従え、以外に帰着しねーんでは。
お得意のnode様でも他言語からしたらディスられるだろうし不毛だわ
2021/08/05(木) 22:08:47.31ID:F8+XC2Dv0
>>689
まあyes。正確には

> ・無料で使える
> ・日本国内に鯖がある
ここまではその通りで、

> ・好きなミドルウェアや言語をセットアップできる
この必要はない。好きでもないPHPを使ってるのがその証拠。
一番いいのはNode。
ただ、動的言語でないと無理なのではないかと予想してるので、(が、何故そうなのかは言えない、これはすまん)
GoとRustは駄目だ。というかGoはPHP以上に糞だし、Rustは今のところ様子見してる。

それで、無料鯖で使える動的言語=PHP/Python/Rubyで、どれも知識ゼロだから、
とりあえずメジャーなPHPから試すか、で、まあ、言語と界隈が糞な所以外は問題ないから我慢して使ってる。(というほど使ってないけど)
まあぶっちゃけ、PHPが糞だ糞だと言われつつものさばってるのは、確かに便利なんだよ。これは認める。
そしてPHP.netの出来はマジで素晴らしい。PHP.netと比べるとPythonやRubyのサイトはゴミだね。
この辺も、また、ググッて回答が出てくるかも含めて、知識ゼロならPHPから試すのが妥当だし、そうしただけ。


もしかして他の選択肢がある?
ご指摘の通り、PHPは手段であって、目的ではない。
2021/08/05(木) 22:18:22.41ID:cTOwQa60H
>>692
あるよ。俺はoracleが提供しているプラットフォームを無料で使ってる。メモリ1GBのインスタンス2つとoracleの自律型DB2台。東京と大阪リージョンがある。

あとGCPのGAEなら東京リージョンで使える無料枠がある。
2021/08/05(木) 22:20:09.19ID:F8+XC2Dv0
>>691
Nodeは、俺がJS好きなだけで、PHPerからすると糞なのは認める。
というかね、DBと非同期が壮絶に相性が悪くて、Nodeだと結構トンデモなコードになる。
それに慣れてる俺は良いが、慣れてない奴からしたら糞以外の何者でもない。
ただしasyncが導入されたから今書いたらだいぶマシなのかもしれんが。

とはいえ、PHPは真偽判定テーブルとか見るだけでマジで糞で、糞なのを知っててもどハマりするから俺的には無理なんだ。
直近だと三項演算子、勿論結合がおかしいのは知ってるが、癖としてやってしまうんだよ。
そして見た目、バグに見えないから嵌る。
だからまあ、PHPを主力に使ってる人にとっては問題ないのだろうけど、
他言語を普段使ってて、偶にPHPとかだと、本当に無駄に嵌って、あ〜、ってのが多すぎて悲しいんだよ。
2021/08/05(木) 22:22:30.05ID:cTOwQa60H
>>693
DB必須ならGCPだと無料のGCEにDBセットアップすれば良いけど国外リージョンになるので、実質oracle一択かな。
2021/08/05(木) 22:25:46.31ID:F8+XC2Dv0
>>693
Oracleなんてガチ枠だから完全にノーマークでしたわ。
とはいえ、SQLとはまた違うとは聞いてるし、そもそもそれってあんまりど素人向けじゃないから不味い気が。

逆に無料レンタルサーバーなんて完全にど素人向けでしょ。
向こうもど素人が使う前提だし、やっぱりど素人にはレンサバがお似合いだと思うのだけど。
お互いトラブらないという意味で。
2021/08/05(木) 22:28:07.44ID:xWv0yV5l0
>>690
勉強不足では困るので、
「ハードウェア」も「予想してから知識を呼び出す」のも必要です。
単純なプログラムを作ってから、魂を足し算します。
2021/08/05(木) 22:29:03.23ID:cTOwQa60H
>>694
jsの真偽判定テーブルも他言語からみたらPHP8と50歩100歩だと思う。7や5はもう過去だから知らない。
2021/08/05(木) 22:35:41.93ID:cTOwQa60H
>>696
補足しておくと、インスタンス2台無料だから、oracleのDB使いたくない場合は、インスタンス1台に好きなDBインストールする方法もあるよ。ど素人にどこまでのオペレーションを任せるかはわからんけど。
2021/08/05(木) 22:36:53.61ID:IpTlZujB0
>>697
えっと、すいません、なにかの宗教ですか?
2021/08/05(木) 22:44:02.23ID:F8+XC2Dv0
>>698
JSのもそれなりに糞だが、
型を意識してれば実際問題としてそこに命中することはないんだよ。
だから一般のプログラミングをしてる奴にとっては問題ない。

PHP7のはなあ、なんだったか忘れたが、
JS的には問題ないものでもおかしなのがあって、しかもそれに普通に命中するから嵌るんだよ。

とはいえ最早PHP8を使うべきなのかな?三項演算子は解決されてるし。
今確認したが、無料鯖はまだ7のようなのだけど、
現実的に俺が今書いてるのを公開するのはどうやっても半年後とかでしかないから、
その頃に一般的に使えれば全く問題ないし、
駄目でもいつかはPHP8に移行するのだろうから、待ってれば済む話ではあるし。

今7を使ってるのは、実は4年前に味見だけしてて、その時に7だったからなんだよね。
まあ、PHP8は検討しとくわ。
2021/08/05(木) 22:48:59.24ID:cTOwQa60H
>>701
10月に8.1出るし、今から開発するのに7.4はどうかと思う。アクティブサポートは今年の11月末で切れるし。
2021/08/05(木) 22:53:13.39ID:F8+XC2Dv0
>>699
OracleやAWSとかは、基本的に「将来有料のお客様になるかも」な人向けだろ。
だから、その気がない人がずっと使うのは不味いと思ってるんだよ。
勿論技術的な問題もあるけど。

無料レンサバはその点、広告を貼りますよ!だから、
永久に無料で使われてもいいですよ、な点が違う。

だからまあ、ガチ向けなものは基本ノーマークなんだわ。
ただ、技術的にはだんだん敷居が下がってて、サーバレスなんてその最たる物だろ。
たぶん、本当になんにも知らないど素人が、それが鯖であることを認識もせず鯖を運用する時代が来つつあるんだよ。
俺はそれに向けてちょっと仕掛けようとしてる。(まあ高確率でポシャるが、それは致し方ない)
2021/08/05(木) 22:55:44.39ID:F8+XC2Dv0
>>702
了解です。
現実的に古いバージョンを使う理由もないからね。
まあ問題は環境の再構築だが、これもやるしかないね。
2021/08/05(木) 22:57:56.82ID:xWv0yV5l0
>>700
コマンドラインだけのプログラムでは、
ユーザーが使いやすいものではないので。
2021/08/06(金) 05:53:40.73ID:13Hyhr+y0
無料サーバーは低品質だから、まともに動かない。
他のアプリがリソースを使うと、5秒ぐらいの動画広告でも、1時間動かない事もある

素人向けだから、PHP・SQLite でも良いと思う。
KENTA がPHPを一生やらなくても良いというのは、お金にならないから

未経験者の転職では、Ruby on Rails, Heroku, AWS だけ。
Node.js, Django も使われていない

プログラミングの話というよりは、安い・低品質の仕事の話。
すごく限定されたことしか出来ない、世界の話
2021/08/06(金) 06:20:19.81ID:4ndH842K0
>>706
実稼働12時間程度で100万円超えの案件もあるぞ
言語やフレームワークだけで語ってる奴には一生回ってこないだろうなw
2021/08/06(金) 06:29:46.94ID:UjnAn9a5a
>>707
もう令和になっているのにこのネタにマジレスしちゃうの?
2021/08/06(金) 14:33:32.85ID:Pmsm9i010
どういうネタならマジレスしていいの?
2021/08/06(金) 18:17:48.03ID:sAaum+q/0
そもそも後処理とやらを軽くすればいい話ではないのかね
DBの設計とSQLの書き方次第で速度がかなり違うよ
そこを見直すのがいいんじゃないかな
それとnode.jsはwebサーバーと一体だから切断があるがphpはwebサーバーからリクエストされるものであって接続の管理はできないのでは無いんでないのかね
2021/08/06(金) 18:35:46.02ID:sAaum+q/0
そもそもphp上で接続するのではなくブラウザに終了を認識させればいいので
ob_startとob_get_lengthなどを使い
headerでContent-LengthとConnection: closeを出力する方法がマッチしているのではないかな
適当にググってみたけど下のサイトがわかりやすかったかな
ttps://pisuke-code.com/php-send-response-immediately/
2021/08/06(金) 20:51:49.77ID:lgptz/Bq0
> Content-Length
おお正解出てきたか。実はこちらもそこに気づいて試して(昼間に)確認済みだった。
んで、いちいち文句言われるからとりあえず夜まで待ってたところだった。

つかマジで、お前らだいぶ酷いわ。改めてPHPerは糞だと再認識した。
小学生同士の小手先テクニック大会は楽しいのだろうけど、そんなんだから上達しないんだと思うぞ。


>>710-711
こちらはheaderだけで問題なくなった。
とりあえずサイト読んでみたが、こちらの結果からすると、ob_xxxもconnection:closeも要らんね。
(というか多分 connection: close は問題になるからやらない方がいい)

> そもそも後処理とやらを軽くすればいい話ではないのかね
> DBの設計とSQLの書き方次第で速度がかなり違うよ
> そこを見直すのがいいんじゃないかな
勿論分かってるが、今でも十分軽いし、これ以上どうしようもないので。

> 接続の管理はできないのでは無いんでないのかね
これは違う。接続の管理を「しなくてもいい」のであって、「出来てもよい」んだよ。
単純には機能が足りてないだけ。
近いのはGUIのイベント、onXXXだが、
あれも最初は addEventListenerとかは不要(onXXXだけで問題ない)と思われてたんだよ。
でも、有るのと無いのとでは大違いで、今は全面的に採用されてるだろ。
といってもお前らは若すぎてこの話が意味不明なら、イベントバブルでもいい。
あれもHTMLは最初から搭載していたようだが、おまえらPHPerなら特に、バブルなんて無くても設計出来ると思ってるだろ?
しかしこれも同様に有るのと無いのでは設計のしやすさの次元が違ってくるので、全面採用になりつつある。
機能が足りてないときでも、足りてないと気づけない人の方が多い。
ネットが無くても不自由しなかったし、その前は携帯が無くても不自由しなかった。
無ければ無いなりにやってしまうものなのだけど、これが有ればどんなに良いか!と思いつける人はほぼ居ないんだよ。
(一応言っておくが、俺も思いついたわけではなく、他言語で知ってたから不便を感じられただけ)
例えば、asyncとか、技術的には最初からあっても不思議ではなかったけど、誰も思いつけなかったろ。あれと同じ。
2021/08/06(金) 21:13:42.19ID:lgptz/Bq0
>>711
> 適当にググってみたけど
ちなみにどうググッたか教えてもらえないか?
こちらも昼間ググリまくったが、このサイトは見てない。多分ヒットしてない。使ったのはBingだ。
んで、今google/duckduckgo/yandexで"Content-Length header"で試したが、ヒットしない。

ヒットしない(しにくい)理由は簡単で、多分仕様じゃないからだ。
ブラウザが勝手にそう動くだけで、動かなくても問題ないし、動くべきだともされてない物を、
Content-Lengthの紹介で書くことが出来ないからだ。
ただこちらは、前から意味不明なヘッダだなと思ってたので、今日改めて目にした時にピンと来た。
が、ググッてもそうは書いてないし、まあ試しにやってみるか、で、ビンゴだった。
(と書けば簡単そうに見えるが、実際はちゃんと動いているか確認するまでに結構手間取ってる)

だからここみたいに個人レベルのTips集やQiitaとかじゃないと駄目なのだが、
そもそもこちらの検索結果にはそのサイトが出てこない。
どういうキーワードでどこで検索したか教えてもらえないか?
2021/08/06(金) 22:05:32.07ID:sAaum+q/0
php 後処理 でgoogleで検索して最初に出てきたやつ
接続を切ることができないのはwebサーバーへの接続だから
node.jsはwebサーバーを内包しているから出来ることでphpはwebサーバーを内包していない
Content-Lengthは何バイト応答があったらコンテンツの終わりかブラウザが認知するのでそれを利用したテクニック
2021/08/06(金) 22:08:02.71ID:lgptz/Bq0
>>711
すまん、713取り下げ。
Bingで「PHP 後処理」でググったら一番上に出た。

俺は仕様を確認しようとしていたのだが、やり方をググれば出るのか。
なまじ自分で出来るものだから「やり方」なんてググろうとも思わなかったのが問題だな。
PHPについては初心者だということを再認識して、「やり方」もググるべきだった。
2021/08/06(金) 22:36:18.90ID:lgptz/Bq0
>>714
すまん、前後した。手間をかけて本当にすまん。

> node.jsはwebサーバーを内包しているから出来ることでphpはwebサーバーを内包していない
これはその通りだが、PHPから出力をクローズしたら当然apacheにも伝わりクローズされる。
そしてこれはnodeでも同じだ。
実際は(Nodeでも)closeしてもhttpコネクションを切っているわけではない。
それだと再送要求が来た時に対応出来ないだろ。
だから、実際の低レベルの接続はNodeでもPHPでも同様に隠蔽されてる。
(勿論ApacheはHTTP/1.1だとgzipしてるし、別にバッファも持ってる)
よって、PHPでもNodeと同様に『プログラミングモデルとしては』接続を切ることが出来る。
だからやっぱり機能が足りてないんだよ。

パイプで説明した方が分かりやすいかな?
php | apache > /dev/eth0 な状況で、php が stdout(出力パイプ) をクローズすることは出来るだろ。それだけ。
その後も apache は必要なら動き続けるし、終了すれば終わる。
この構造はNodeも内部的に持ってないと話にならないから同様の筈だよ。

ただしそもそも論として「Content-Lengthは常に付けとけボケ!」なノリのようだ。
この手のTipsとしてはStackoverflowが秀逸で、
https://stackoverflow.com/questions/2773396/whats-the-content-length-field-in-http-header
の回答の中に以下仕様書へのリンクとかがあるが、
https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.4
読む限りContent-LengthはもしかしてHTTP/1.0時代には必須だったのかな?

今現在、 echo json_encode(...); でjsonを語れ流してるから、これアウトかよ、、、、ってちょっと萎えてる。
メモリを無駄に食わない素晴らしいコードだと思ってたんだがなあ、、、。
2021/08/06(金) 23:28:26.68ID: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は付けたほうがいいと思う
2021/08/06(金) 23:30:33.96ID:RLLkP2Do0
楽に使うならクラス作って継承して使えばエレガントに書けると思う
2021/08/07(土) 00:43:48.11ID:f2WMK3C10
androidにPHPアプリとかあるけど役に立つ?
2021/08/07(土) 00:55:00.18ID:dDF85n970
>>717
> 最初に"TCP接続を明示的に切りたい"とあったので機能はないと回答した
責める気はないが、これはさすがに屁理屈だろ。

572は確かに俺の書き方が悪い。
ただ、「初心者」が間違った「やり方」を選んでトンチンカンな方向に行くことはよくある話で、
これを防ぐ為には「最終的に何を目指してるか」を言わなければならないが、
俺は575の時点で、
・俺が初心者であり、
・後処理してる最中でもブラウザにパースさせてUXを改善したいから、
・TCP接続を切りたい
と全部揃えているのだから、本当に分かってる奴が居たら、この時点で
「それはやり方を間違ってる。ヘッダにContent-Lengthを付ければそれで済む」の回答が出てきて然りなんだよ。
それがおかしな小手先テクニック合戦になったり、
或いは上記のように全部正しく揃えているのにそれを理解せず「コミュ障」呼ばわりしてくるから、
PHPerは糞だと言ってるんだよ。
これは君も含めてね。何を相手に伝えるべきか分かってないんだよ。
まあコミュ障だからこそ、(=つまり何を伝えれば通じるかが分かってない)
相手がコミョ障かどうか(=つまり必要事項が全部含まれているか)を見分けることが出来ないという、
至極当然の話で、よくあるから慣れてはいるけども。

なんかNodeを勘違いしているっぽいが、プログラミングモデルのレイヤーはPHPと同じだよ。
PHPは上手く抽象化されてる(584)というのなら、そりゃNodeでもその他でも同じだよ。
実際書けば(文法が違うだけで)ほぼ同じコードになる。
下位のTCP接続を直接切りに行けるのはCで相当野蛮に書かれたものだけだが、そんな物存在してないでしょ。
だからこれはエスパーではなく常識で読み替えられる範囲だよ。
2021/08/07(土) 00:55:28.53ID: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では「速いよりも早い方が重要」だからある程度致し方ないのだとしても。
2021/08/07(土) 08:23:51.18ID:xdlB1E9b0
phpでもやるかなって思ったけど、大勢で同じセッションみるとかできる?
2021/08/07(土) 09:24:23.62ID: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レイヤでのプログラミングをするしかないのだが。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況