[過去ログ] 【PHP】下らねぇ質問はここに書き込みやがれ 12 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
572: (ワッチョイ bd7b-LMHu) 2021/08/05(木)00:28 ID:F8+XC2Dv0(1/49) AAS
PHPで接続を明示的に切る方法ってある?

本処理後、後処理としてDBの整理を行うのだが、
本処理と後処理が同程度の重さになるので、可能であればTCP接続を明示的に切りたい。
そうすればブラウザが確実に処理を始めるので、クライアント側の体感速度が上がることを期待している。
とりあえずfush()はした。出力バッファは使ってないので、ob_xxxxはやってない。
他に何かある?
573: (ワッチョイ 5d01-pCDs) 2021/08/05(木)00:42 ID:N2Iw/qnR0(1) AAS
意味不明
574: (ワッチョイ d563-IKHw) 2021/08/05(木)00:45 ID:JVVnzoun0(1/2) AAS
DBがクローズされているなら、PHPへのアクセスは関係ないんじゃ?
というか、設計がおかしくない?
575
(5): (ワッチョイ bd7b-LMHu) 2021/08/05(木)01:01 ID:F8+XC2Dv0(2/49) AAS
ああすまん、書き方が悪かった。
こちらはPHPの初心者なので、そちらが想定しているような高度なことはしていない。
「TCP接続」をDBとの接続だと想定したのだと思うが、こちらはSQLiteだ。

クライアント(ブラウザ)からのアクセスで、SQLiteを操作してhttp出力を行う。
その後、ユーザーに対しての追加の出力はないので、ここでユーザーとのTCP接続(=http接続)を切りたい。
(確かGoかNodeだとこれが出来た)
さらにその後、後処理を行うのだが、これが本処理と同じ程度に重い。
そしてexitで終了する。

ブラウザがexitにてTCP接続が切れてからパースを開始すると、体感2倍重くなってしまう。
flushでデータを全部送りきることは出来るが、
省4
576: (アウアウウー Sa09-d0wC) 2021/08/05(木)01:28 ID:qQkilq/Na(1) AAS
404のっとファウンドなどのエラーページを自作しる
577
(1): (ワッチョイ d563-IKHw) 2021/08/05(木)01:43 ID:JVVnzoun0(2/2) AAS
>>575
クライアントに応答を返すPHPは、応答を返したら、
後処理を行うPHPを起動し、自身はその終了を待たずexitする
578
(1): (スップ Sd9a-0pp8) 2021/08/05(木)03:48 ID:9Ap3lZssd(1) AAS
>>575
〜ここまで本処理
// 結果を待たずに次の行へ進む非同期コマンド
exec('php 後処理.php > /dev/null &');
exit;

もし後処理.phpに何かパラメーターを渡したい場合は
exec('php 後処理.php パラ1 パラ2 パラ3 > /dev/null &');

受け取る側の「後処理.php」の中で$argvに配列として格納されてる
579
(2): (ワッチョイ bd7b-LMHu) 2021/08/05(木)06:36 ID:F8+XC2Dv0(3/49) AAS
>>577-578
なるほど、マルチプロセスだから根本的に考え方が違うんだな。ありがとう。
(だとすると、途中で明示的に接続を切れたのはNodeか?)

マニュアルページが完全にstackoverflow並のtips集になっていることにも驚いた。
外部リンク[exec]:www.php.net
(やたらWindowsについての言及が多いが、意外にIIS上で動かされてるのか?)

見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい。
そしていきなり環境依存コードを注入するというのはプログラマとしては頂けない。
ここら辺のノリがPHPの嫌いなところだ。
プログラマ向けに作ってないから、プログラマの常識でやってると変に嵌ったり、見落としたりする。
省5
580
(1): (ワッチョイ 56bb-ds/h) 2021/08/05(木)06:50 ID:Sb1zsMiv0(1/8) AAS
>>579
ローカルコマンド叩くのに環境依存がない言語なんてあるわけ無いだろ
嫌いになるのは勝手だけど、アホな理由で嫌いになるなよ
581
(1): (ワッチョイ bd7b-LMHu) 2021/08/05(木)07:24 ID:F8+XC2Dv0(4/49) AAS
>>580
だから発想が『プログラマとしては』おかしいんだよ。
少なくともNodeでもGoでも、環境依存無しのコードを記述出来る。
PHPでは出来ないのに、それでも良しとされてる。
そういうところが嫌いなんだよ。

覚えだが、上記の通り、明示的に切れたのは多分Nodeだ。
これはそもそもシングルスレッドだから、PHPのようにスクリプト終了=接続終了とは出来ないから当たり前だが。
そしてGoなら内部プロセス(goroutine)で、となる。もちろん環境とは依存しない。

PHPでも、session_write_closeと同様に、例えば write_close() というコマンドを作り、
そこで接続終了、それ以降の出力は全部捨てられます、とすれば、全く問題なく環境依存無しに出来る。
省12
582
(1): (ワッチョイ 56bb-ds/h) 2021/08/05(木)07:52 ID:Sb1zsMiv0(2/8) AAS
>>581
んなアホなことやりたいなら、phpでWebサーバ書けばいい
メジャーなのはないけど、ふつうにGitHubにも転がってる

そもそもフィトするもんが別にあるんだったらそっち使うのがエンジニアだぞ
583
(3): (ワッチョイ bd7b-LMHu) 2021/08/05(木)08:23 ID:F8+XC2Dv0(5/49) AAS
>>582
だからその発想がおかしいんだよ。フィットしてるなんて到底言えない。

PHPは「できればいい」「動けばいい」で済ませる初心者〜中級者の感覚に合ってる。
だからその層には絶大な支持を受けるが、上級者には支持されない。
実際、PHPが「プログラミング言語として」素晴らしいなんて言ってる上級者は世界中でも誰一人もいないだろ。

connection_closeとかを用意すればいいだけなのに、
外部コマンドで自己ファイルをバックグラウンドプロセスとして起動する、なんて解は、頭がおかしいレベルだ。
自宅から歩いて3秒の場所に自動車で行く、に近い。

以前は「XAMPPなんて捨てろ。どうせ本番環境では動かないし、XAMPPで開発する意味はない」とか言ってる奴も居たが、
実際はこの辺の、それが環境依存コードだと理解出来ないレベルの初心者が勝手にやらかしまくってるだけだと思うよ。
省6
584
(1): (ワッチョイ 56bb-ds/h) 2021/08/05(木)08:42 ID:Sb1zsMiv0(3/8) AAS
>>583
使ってる方からするとWebサーバレベルのハンドリングを意識しなくて良いレベルで抽象化されていることが使いやすいし、不足箇所は最近だとフレームワークが補完してくれている

ところで、支持してない上級者って何?
サーバサイド言語として、phpが必要ないって言っている人がいる?
普通に用途が合えばphp選択するのがエンジニアだと思うけど?
585: (ワッチョイ bd7b-LMHu) 2021/08/05(木)08:50 ID:F8+XC2Dv0(6/49) AAS
というか、思うにこれはPHPだと「出力用」と「DB整理用」のphpを別にして、
「DB整理用」は別にcronで叩く、というのが一般解なのかな?

これ自体も外部依存しているのでよい解ではないが、
ここまで蔓延っているPHPがこの辺の「普通にやる処理」を上手く記述出来ないのもあり得ない。
だとすると、現実的にはこの解なのだろう。

とはいえ、最安のレンタルサーバーだとcronは使えないし、
纏めて整理する時に命中したらその時だけ奇妙に遅くなるわけで、
出来ればマメに整理しておきたいのだが。
586
(1): (スップ Sd7a-0pp8) 2021/08/05(木)08:55 ID:yR6UN7xmd(1) AAS
>>583
〜ここまで本処理
//接続が切れてもスクリプトを実行させる
ignore_user_abort(true);
// メッセージ表示ページへ飛ばす
header('Location: 本処理完了しました.html');
flush();
ここから後処理〜

環境依存使わないなら、こんなんでどうですか?
587: (ワッチョイ da52-wbwm) 2021/08/05(木)09:02 ID:e8dh7hYU0(1) AAS
>>583
ソースもないのに誰一人いないとか断言しちゃうから、だらだら長いだけで説得力のない空っぽな主張に見えちゃうんだぞ

お前さんの主張を支持する上級者は誰一人いないw
588
(1): (ワッチョイ bd7b-LMHu) 2021/08/05(木)09:24 ID:F8+XC2Dv0(7/49) AAS
>>584
> 不足箇所は最近だとフレームワークが補完してくれている
では今回の connection_close なり write_close が出来るフレームワークを紹介してくれ。
無いだろ。
PHPで出来ないことは、PHPで記述したフレームワークでも出来るはずがないからだ。
(とJS同様に思ってるんだが、PHPの場合は例えばC++で記述されててPHPをDSLとして採用してるだけ、
みたいな実行環境形のフレームワークがあるのか?
それがapacheだnginxだ、みたいな状況ではあるが)

> サーバサイド言語として、phpが必要ないって言っている人がいる?
居ない。
省16
589
(1): (ワッチョイ 56bb-ds/h) 2021/08/05(木)09:27 ID:Sb1zsMiv0(4/8) AAS
>>588
お前のやりたいことは、Jobのキュー登録だろ
普通にあるわ

なんで、connection_close なり write_close にこだわらないといけないんだ?
590
(1): (ワッチョイ bd7b-LMHu) 2021/08/05(木)09:33 ID:F8+XC2Dv0(8/49) AAS
>>586
それは動かないだろ。
本処理で既にheaderとbodyは出力してる。
だからその後に header('Location')はアウトだ。

そして仮に動いたとしても、いちいちLocationで飛ばすってのも余計におかしい。
今現在の、結果的にブラウザが反応しないかも、その場合は通常より倍の時間がかかります、の方がまだマシだ。

ここらへんの、ちゃんとした解がないから余計なことで遠回りにやる、ってのもPHP界隈が嫌いな理由だ。
そういうのは初心者から中級者にクラスアップしてきた連中が俺ツエー的にやりたがるのだけど、
そういうのが多すぎて、PHP界隈はウザイ。
ただ逆に言えば、そういうことをしたいレベルの奴にとっては「俺カッケー」が出来るから、大受けする。
省3
591
(1): (ワッチョイ bd7b-LMHu) 2021/08/05(木)09:37 ID:F8+XC2Dv0(9/49) AAS
>>589
あるならそれを教えてくれ。PHP.net上のurlだけでいいから。
jobで出てくるのは The GearmanClient class だけだが、さらっと見た限りなんか違うっぽいし。

というかね、PHP.netは本当に出来がいい。
あれだけは他言語も見習うべきだよ。
1-
あと 411 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.027s