[過去ログ]
【PHP】下らねぇ質問はここに書き込みやがれ 12 (1002レス)
【PHP】下らねぇ質問はここに書き込みやがれ 12 http://mevius.5ch.net/test/read.cgi/tech/1619667579/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
572: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 00:28:51 ID:F8+XC2Dv0 PHPで接続を明示的に切る方法ってある? 本処理後、後処理としてDBの整理を行うのだが、 本処理と後処理が同程度の重さになるので、可能であればTCP接続を明示的に切りたい。 そうすればブラウザが確実に処理を始めるので、クライアント側の体感速度が上がることを期待している。 とりあえずfush()はした。出力バッファは使ってないので、ob_xxxxはやってない。 他に何かある? http://mevius.5ch.net/test/read.cgi/tech/1619667579/572
575: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 01:01:42 ID:F8+XC2Dv0 ああすまん、書き方が悪かった。 こちらはPHPの初心者なので、そちらが想定しているような高度なことはしていない。 「TCP接続」をDBとの接続だと想定したのだと思うが、こちらはSQLiteだ。 クライアント(ブラウザ)からのアクセスで、SQLiteを操作してhttp出力を行う。 その後、ユーザーに対しての追加の出力はないので、ここでユーザーとのTCP接続(=http接続)を切りたい。 (確かGoかNodeだとこれが出来た) さらにその後、後処理を行うのだが、これが本処理と同じ程度に重い。 そしてexitで終了する。 ブラウザがexitにてTCP接続が切れてからパースを開始すると、体感2倍重くなってしまう。 flushでデータを全部送りきることは出来るが、 ブラウザはパースしないと全部来たことが分からないので、fulsh後にすぐ動くことは期待出来ない。 http接続が切れれば、それ以上のデータはないと確定するので、パースを確実に開始する。 だからこれを早めたい。 何か明示的に出来る方法ってある? http://mevius.5ch.net/test/read.cgi/tech/1619667579/575
579: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 06:36:47 ID:F8+XC2Dv0 >>577-578 なるほど、マルチプロセスだから根本的に考え方が違うんだな。ありがとう。 (だとすると、途中で明示的に接続を切れたのはNodeか?) マニュアルページが完全にstackoverflow並のtips集になっていることにも驚いた。 https://www.php.net/manual/ja/function.exec (やたらWindowsについての言及が多いが、意外にIIS上で動かされてるのか?) 見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい。 そしていきなり環境依存コードを注入するというのはプログラマとしては頂けない。 ここら辺のノリがPHPの嫌いなところだ。 プログラマ向けに作ってないから、プログラマの常識でやってると変に嵌ったり、見落としたりする。 とはいえ、便利なのは事実だし、所詮スクリプトだと割り切るのも必要なのだろうけど。 とりあえずの問題は、開発環境がローカルホストのXAMPP(つまりwindows)で、 実行環境がレンタルサーバー(つまりLinux)ってところだが。 まあ、いずれにしてもありがとう。 この質問には確かにexecが正解のように見える。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/579
581: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 07:24:02 ID:F8+XC2Dv0 >>580 だから発想が『プログラマとしては』おかしいんだよ。 少なくともNodeでもGoでも、環境依存無しのコードを記述出来る。 PHPでは出来ないのに、それでも良しとされてる。 そういうところが嫌いなんだよ。 覚えだが、上記の通り、明示的に切れたのは多分Nodeだ。 これはそもそもシングルスレッドだから、PHPのようにスクリプト終了=接続終了とは出来ないから当たり前だが。 そしてGoなら内部プロセス(goroutine)で、となる。もちろん環境とは依存しない。 PHPでも、session_write_closeと同様に、例えば write_close() というコマンドを作り、 そこで接続終了、それ以降の出力は全部捨てられます、とすれば、全く問題なく環境依存無しに出来る。 だからプログラマが主導して開発をしていればとっくにそうなってるはずなのに、 現実としてそうなってないから、色々無駄に戸惑う。だから好きにはなれない。 何だかんだで意外とNodeが蔓延っているのは、ここら辺の理由もある。 今回の使途ならJSのsetTimeoutでの実装の方がプログラムとしては断然美しくフィットする。 PHPで書くと、こんなコードにしかならないのかよ、と本当に愕然としてしまう。 腕が良くてもまともなコードを書けないんだよ。 それは上記の通り、PHPの開発の方向性が間違ってるからだ。 (とはいえ例の三項演算子についてはPHP8で修正されてるようだが) まあとにかくだ、プログラマとしては禁忌に近い「環境依存コードの注入」を普通にやらせるのは異常だし、 そんな状況が放置されてること自体も異常なんだよ。 だからプログラマがPHPを好きになることはないと思うよ。 PHPを好きな奴は、他言語をまともに使えない奴だけだと思う。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/581
583: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 08:23:37 ID:F8+XC2Dv0 >>582 だからその発想がおかしいんだよ。フィットしてるなんて到底言えない。 PHPは「できればいい」「動けばいい」で済ませる初心者〜中級者の感覚に合ってる。 だからその層には絶大な支持を受けるが、上級者には支持されない。 実際、PHPが「プログラミング言語として」素晴らしいなんて言ってる上級者は世界中でも誰一人もいないだろ。 connection_closeとかを用意すればいいだけなのに、 外部コマンドで自己ファイルをバックグラウンドプロセスとして起動する、なんて解は、頭がおかしいレベルだ。 自宅から歩いて3秒の場所に自動車で行く、に近い。 以前は「XAMPPなんて捨てろ。どうせ本番環境では動かないし、XAMPPで開発する意味はない」とか言ってる奴も居たが、 実際はこの辺の、それが環境依存コードだと理解出来ないレベルの初心者が勝手にやらかしまくってるだけだと思うよ。 そしてその意味も分からず、「XAMPPなんて捨てろ」だけ真に受けた初心者が、 例えば>>394みたいに、右も左も分からないのにリモート環境で開発する、みたいな、余計におかしな事をやらかす要因となってる。 そしてその根元は、PHP自体に落とし穴がありまくるからだ。 なんでそこで環境依存コードを注入するしか解がないの?というね。 が、まあ、parallelとかphtとかはここら辺の対策用なのかな? それにしても connection_close とかの単純な解の方が断然いいが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/583
585: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 08:50:37 ID:F8+XC2Dv0 というか、思うにこれはPHPだと「出力用」と「DB整理用」のphpを別にして、 「DB整理用」は別にcronで叩く、というのが一般解なのかな? これ自体も外部依存しているのでよい解ではないが、 ここまで蔓延っているPHPがこの辺の「普通にやる処理」を上手く記述出来ないのもあり得ない。 だとすると、現実的にはこの解なのだろう。 とはいえ、最安のレンタルサーバーだとcronは使えないし、 纏めて整理する時に命中したらその時だけ奇妙に遅くなるわけで、 出来ればマメに整理しておきたいのだが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/585
588: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 09:24:21 ID:F8+XC2Dv0 >>584 > 不足箇所は最近だとフレームワークが補完してくれている では今回の connection_close なり write_close が出来るフレームワークを紹介してくれ。 無いだろ。 PHPで出来ないことは、PHPで記述したフレームワークでも出来るはずがないからだ。 (とJS同様に思ってるんだが、PHPの場合は例えばC++で記述されててPHPをDSLとして採用してるだけ、 みたいな実行環境形のフレームワークがあるのか? それがapacheだnginxだ、みたいな状況ではあるが) > サーバサイド言語として、phpが必要ないって言っている人がいる? 居ない。 しかし、PHPは「素晴らしいプログラミング言語だ」と言ってる奴も居ない。 それは君も知ってるとおり、色々グダグダ過ぎるからだ。今回も然り。 他言語だと楽に美しく実装出来る事が、出来ない。いちいちストレスだ。 (とはいえRust/Go推しの連中もどうかしてると思うが) > 普通に用途が合えばphp選択するのがエンジニアだと思うけど? それはその通り。だから俺も今回はPHPを選択している。 ただこれは「プログラミング言語として」ではなく、「実行環境含めて」だ。 今回は「無料レンタルサーバーでも動く」事も重要な為、今のところPHP以外に選択肢がない。 技術的には、サーバーレス+Nodeが一番フィットし、つまりherokuなのだが、 あれは無料だが海外鯖なので見送りにしてる。 サービス提供先は主に国内なのにいちいち海外鯖では無駄に遅くなるから。 そしてNodeの無料鯖が国内にも広まるのを待っていたのだが、これは今のところ全然なさそうだ。 とかやってるうちに他状況も整ってきたから、しょうがないからPHPで本格的に書くか、と諦めたわけだ。 あと、Nodeが数倍速いのも事実なのだが、どうせ鯖を借りる側からすれば、 値段当たりの処理能力なら実はVPS+Nodeもレンタルサーバー+PHPも大差ないのかも、という気もしてきてる。 この辺も諦めにつながってる。とはいえ、どのみちNodeでも書く羽目にはなりそうなのだが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/588
590: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 09:33:30 ID:F8+XC2Dv0 >>586 それは動かないだろ。 本処理で既にheaderとbodyは出力してる。 だからその後に header('Location')はアウトだ。 そして仮に動いたとしても、いちいちLocationで飛ばすってのも余計におかしい。 今現在の、結果的にブラウザが反応しないかも、その場合は通常より倍の時間がかかります、の方がまだマシだ。 ここらへんの、ちゃんとした解がないから余計なことで遠回りにやる、ってのもPHP界隈が嫌いな理由だ。 そういうのは初心者から中級者にクラスアップしてきた連中が俺ツエー的にやりたがるのだけど、 そういうのが多すぎて、PHP界隈はウザイ。 ただ逆に言えば、そういうことをしたいレベルの奴にとっては「俺カッケー」が出来るから、大受けする。 だからPHPを嫌いな人は多いが、廃れることもないだろうね。新規参入者はいくらでもいるから。 ある意味初心者ホイホイな面はある。 (ただしプログラマになる為の教育としてはかなり最悪だが) http://mevius.5ch.net/test/read.cgi/tech/1619667579/590
591: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 09:37:34 ID:F8+XC2Dv0 >>589 あるならそれを教えてくれ。PHP.net上のurlだけでいいから。 jobで出てくるのは The GearmanClient class だけだが、さらっと見た限りなんか違うっぽいし。 というかね、PHP.netは本当に出来がいい。 あれだけは他言語も見習うべきだよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/591
593: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 10:14:26 ID:F8+XC2Dv0 >>592 LaravelはPHPで書かれてるのだから、素のPHPで出来ないことが出来るはずがないだろ。 と思ってるのだが、この認識が間違ってるのか? まあ、導入する予定はないが、見てみるよ。 Webプログラミング板のスレはさらっと読んでみたが、ぶっちゃけここと大差ないような。 まあ、ここで一通り終了したら向こうでも聞いてみるかも。 なお、俺はプログラミングの初心者ではないが、PHPに関しては初心者だ。 一通りも知らないからPHP.netをいちいち引きながら書いてる。 それでいちいち、「他言語ならこうだけど、PHPならどう書くの?」になるわけ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/593
595: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 10:21:45 ID:F8+XC2Dv0 >>592 あ、すまん。訂正。 laravelをさらっと見たが、dockerで導入してるところからして、俺 が想定していたJS的なフレームワークとは違い、これは実行環境形のフレームワークだな。 Job管理もあるのだろう。これはこれから読む。(とはいえ時間はかかるが) http://mevius.5ch.net/test/read.cgi/tech/1619667579/595
597: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 10:24:44 ID:F8+XC2Dv0 >>594 > 「言語を問わず」 "コマンド > /dev/null &" ってすればいいかな?って発想になるもん 理解してないのお前だ。俺は「言語を問わず」ではなく、「実行環境依存」なのを問題視してる。 まあお前レベルの奴がグダグダ言ってくるところがPHP界隈の嫌いなところだよマジで。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/597
600: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 10:51:05 ID:F8+XC2Dv0 >>594 ラスマスの記事を読んだ。まあ想定どおり。 これはWeb上のオープンソース開発、つまりJSやRustも同じ事。 それらに比べてPHPはポンコツ過ぎ。 ちなみにfiberが欲しいわけではない。それも「歩いて3秒の場所に自転車で行く」に近い。 俺がやりたいのは、 fclose(/dev/stdout) だよ。 ただまあ、PHPがラスマスの言うとおり勝手に開発された機能の団子なのなら、 俺が勝手にCのコード書いて送れば採用されるのかな? 精々10行程度で実装出来るから送ってみてもいいんだけどさ。 あとそれ、「PHPは柔軟でスゴイ!」ってのも、 最近よくいる「俺が使ってる言語スゲー=俺スゲー」系の馬鹿だから止めとけ。 他言語で既に使えてる便利機能が今更採用されたところでスゲーと思えるのは明らかに信者でしかない。 第三者なら「ようやくかよ」でしかない。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/600
602: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:01:32 ID:F8+XC2Dv0 >>599 > だから「開発環境はDockerやVagrantで作ればいい」と書いた だからその解も本来は間違ってるんだよ。それは、 実行環境依存のコードしか書けないから、それぞれの実行環境を毎回用意してそこで開発しろ なわけだろ。それはJavaが目指した「Write once, run anywhere」でも全然無いだろ。 まあ実際はともかく、そもそもプログラミング言語はOS上のレイヤだけで動いているのなら、こうあるべきなんだよ。 そしてJSとか他言語はそうなってる。 PHPはその努力もしてないから駄目なんだよ。 その、「間違った解を正解として誇らしげにドヤる」のも、 典型的な「初心者から中級者にアップしたての馬鹿」がやることで、おまえはまさにそれだよ。 実際PHP界隈はそういうのが多数派で、それが問題視されることはないのだろうけど、それ自体が問題だよ。 それでは生産性がまるで上がらない。まあこれも理解出来ないのだろうけどさ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/602
606: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:09:50 ID:F8+XC2Dv0 >>601 非同期知ってる俺カッケー、か。 俺がやりたいのは非同期ではないんだよ。 ここら辺なんだよ、PHPerは、(JSerもだからWeb系全般だと思うが) 本人が実力を過大評価しすぎてていちいちウザイ。 今回は同期の fclose(/dev/stdout) がベストで、この単純なことが出来ないのは奇妙だと思って聞いてる。 他の言語/実行環境なら最初に用意される物であって、存在しないのはほぼありえない。 だから俺の勘違いか見落としだと思って聞いてるわけだ。 そしてこんな基本的な物がないのに非同期とかfiberとか、整備の順番を完全に間違ってるんだよ。 とはいえlaravelはどうやら俺の想定していたものとは違うので、そこにあることには期待している。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/606
607: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:14:45 ID:F8+XC2Dv0 >>603 > 既にbody出力済みという前提も無かったし。 いやそれは普通に読めば分かるだろ。 むしろ、接続を切ろうとしてるのに、なんでその後に何か出せると思ったの? もしかして、本処理ではheaderだけしか出力してないと思った? それはレアケース(常に403とか?)であって、その仮定の方が無理あるだろ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/607
610: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:25:02 ID:F8+XC2Dv0 >>604 exec自体は同期コマンドなんだよ。 そしてその書き方自体も他言語が出来るプログラマにとっては気に入らない。 exec("cmd"); // 同期 exec("cmd > /dev/null &"); // PHPではこれで非同期、しかし書き方がイマイチ exec("cmd") > /dev/null; // これならまだマシ exec_async("cmd"); // 本来はこうあるべき まあここら辺もPHPが嫌われる理由だよ。他言語と揃ってないからいちいち文法で躓く。 だから他言語で慣らした連中に取っては無駄に参入障壁となっていて、 結果的にPHPはPHP育ちの初心者パラダイスになってる。 そりゃ居心地はいいんだろうけど、良いコードに遭遇出来ないのは上達の妨げにしかならないことに本人達も気づけない。 なんだかね。 実際お前ら、上の4つ、何が問題か分からないだろ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/610
611: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:26:44 ID:F8+XC2Dv0 >>608-609 > 簡単な非同期処理で解決するのになに言ってるのこの人 そう思えちゃうところがPHPerだよ。 まあ他のプログラミングが出来る連中にも聞いてみるんだね。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/611
614: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:43:44 ID:F8+XC2Dv0 >>612 開発環境の再構築に乗り気ではないのは、それは手段が目的化する恐れがあるから。 いろいろ分かってない状況(=今の俺)の場合は、環境構築こそが最大のネックで、 コード自体は書けば書けるものでしかないんだよ。 そして既にXAMPP+NetBeansでブレークポイントも当たるし、xhprofだっけ?も導入してるからそれでやってる。 (ただし環境を構築したのは4年前だから、君らからするとこれは古すぎかもしれないが) 新しい開発環境も、作ってしまえば結果的には楽勝なのかもしれないが、あっさり出来る自信がないんだ。 ただまあ、今回の話は、環境構築すればいいって物ではないのだけどね。 それって、例えば鯖を変えたり、あるいはGitHubで公開した後に「○○ですけど動きません」ってのに いちいち対応するのか?って話になるだろ。 そもそも環境依存のコードを書くべきではない ってのが大正義なのに、それを認めずあれこれ無駄に言ってくるからおかしな事になる。 お前らは何をすべきなのか本質を理解するべきだよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/614
616: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:46:58 ID:F8+XC2Dv0 >>613 > 本処理が終わるまで何も出力しないように書き直して工夫することだってできる可能性もあるわけだし 本処理ではbodyを出力する場合もあるし、403等でheaderだけで終わる場合もある。 本処理終了後は出力はない。だからそこで切りたい。 というわけだがこれでいいか? いずれにしてLocationでリダイレクトは度頭でやらないといけないから君の間違いだとは思うけど。 > てか、あなたが返事すべきはそこじゃないんだけど〜 どこよ? http://mevius.5ch.net/test/read.cgi/tech/1619667579/616
617: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 11:48:24 ID:F8+XC2Dv0 >>615 そう思うのは、君の周りにはその程度の人しか居ないからだね。君も含めて。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/617
619: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:00:42 ID:F8+XC2Dv0 >>613 616訂正。 > Locationでリダイレクトは度頭でやらないといけない と思ったが、もしかしてリダイレクトが間に合わなかったケースを意図的に利用して接続を切ろうって事か? それは解としてはだいぶ酷い。そういうコードを書くと数年後には意味不明で読めなくなる。 あとその場合は結局ブラウザ上でパースされた時に転送(=接続終了する)だけであって、 結局今の実装(ブラウザのパースタイミング次第)と同じでしかないし、改善しないと思うが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/619
627: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:30:20 ID:F8+XC2Dv0 >>623 まあforkしたいわけでもないんだけどね。それも事を大きくしすぎ。 Pythonを選択しないのは、俺が知らないからだね。 ただしレンタルサーバーでも使えるから、選択肢としてはありなんだろうけど、 言っちゃ悪いがPython使う理由なんてPHP以上にないでしょ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/627
628: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:35:56 ID:F8+XC2Dv0 >>625 一応聞くが、headerはbodyの後には出力出来ないってのを知ってるか? ちなみに本処理はgetであって、postではない。 そして304ならheaderのみ、200ならheader+bodyの、至極普通のget処理だ。 その200、つまりheader+bodyを送信後に再びLocation"header"を出すのは不可能だが、それは理解してるか? http://mevius.5ch.net/test/read.cgi/tech/1619667579/628
630: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:44:05 ID:F8+XC2Dv0 >>629 なら、PythonもPHPと同程度に文法が糞だ、というだけだろ。 実際、Pythonを「プログラミング言語として」褒めてる奴も少ないだろ。 みんなが使ってるから使う、というのが大半であって。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/630
632: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:48:28 ID:F8+XC2Dv0 >>631 それは面白い発想だが、べき論で言えば反則だろうよ。 ただし、確かに技術的には解決する。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/632
633: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 12:58:15 ID:F8+XC2Dv0 >>631 いや待て、今回はhtmlではなかったので駄目だった。 主にjsonとxmlだ。 まあしかし、発想自体は面白いよ。 ただ、なんか余計なアクセスが出てるように見えるからそれで実装することはないが。 今現在の実装だと、「運が悪く、ブラウザも怠慢していれば、倍かかる時があります」であって、 そんなに問題な実装でもないし、実際htmlを出すのは最初だけ(SPA)にしようとしてるので、それでは解決出来ない。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/633
636: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 13:08:11 ID:F8+XC2Dv0 >>634 ああ、Webビーコンと大昔に呼ばれてて、その結果htmlメールは悪だとされた奴だな。 今でも普通に使ってるのか?それはそれで問題だとは思うが。 少なくとも、俺は>>631で出来る状況であってもそれは使わない。今現在の実装の方がマシ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/636
638: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 13:26:51 ID:F8+XC2Dv0 >>635 ちなみに > 重たい後処理をするPHPを非同期で起動させればいいだけ これが間違い。 単に、出力を閉じる connection_close みたいな関数を呼んでユーザーとの接続を終了させ、 そのあとそのプロセスが引き続き後処理をすれば良いだけだし、これが一番軽い実装だ。 そして他言語だとこれは出来るのに、何故この基本的な操作ができないのだ?という話。 非同期=軽いとか思ってる馬鹿も特にJSには多いんだが、非同期が軽いわけではないんだよ。 むしろキューイングしてやる分だけ重くなる。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/638
646: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 14:22:57 ID: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を使う連中は基本的に初心者であり、細かいことは気にしてないのだろうし。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/646
647: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 14:31:39 ID:F8+XC2Dv0 >>641 > しかもレンタルサーバでやるような低レベルなもんだろ? これはその通りだ。 お前らのやってるエンタープライズなコードでは許されないような方法でも、許されるのだろうさ。 とはいえ、それをやるかどうかはまた別だろ。 プログラミング初心者が四苦八苦して数百行のやっと動くコードを書いてる状況ではないんだよ。 他言語ではバリバリに書ける奴がPHPだとデタラメやっていい、ってことにもならないだろ。 それは矜持の問題だ。 勿論、お前がデタラメやるのもお前の自由だが、俺的には恥ずかしくてそんなコードは公開出来ないよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/647
649: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 14:36:28 ID:F8+XC2Dv0 >>645 なるほど、その方法でも出来るのは理解した。 が、それだと2往復するし、やっぱりかなり無駄だろ。 結局お前らは「動けばいい」でしかないからそういうことになる。 それだったら、現実装の方がまだマシだよ。 ただまあ、エンタープライズならLaravel等でキューサーバー、ってのは分かった。 確かにこれで玄人は問題ないのだろうさ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/649
652: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 14:55:48 ID:F8+XC2Dv0 >>651 リダイレクトは別サイトにもいけるだろ。 だから基本的にはブラウザとは2往復するはず。 結果的に同一サイトにリダイレクトされる場合でも、おそらくブラウザはもう一度接続し直してくるはず。 この辺は試した方が早いかもしれんが。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/652
655: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 15:17:03 ID:F8+XC2Dv0 >>651 ああだからな、元々は「処理を速く見せる為」なんだよ。それで、 ・接続を明示的に切れれば、往復1回+本処理 ・接続を明示的に切れない現状では、往復1回+本処理+後処理 ・651方式で転送した場合、往復2回+本処理 というようにユーザーには見えることになる。 結果、ネットワークが速くて後処理時間より短いならこれもありかもしれないけど、ネットワークも地味に重い。 この辺のさじ加減は君らの方が詳しいだろうけど、 現状の後処理は、整理するデータがある場合は400ms程度、無ければ10-40ms程度だ。 整理するデータが存在するのは1/20程度の確率だと想定している。 となると、単純には後処理は平均して29.5-58ms程度の重さになる。 だから、ネットワークがこれ以上重いと赤字になってしまうんだよ。 (XAMPPでの時間計測なんて意味あるかボケ!というのはさておき) http://mevius.5ch.net/test/read.cgi/tech/1619667579/655
658: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 15:31:25 ID:F8+XC2Dv0 >>654 それは君がブラウザの動きを分かってない。 flushで出力されるのはPHP側のバッファだけで、apache/nginxのバッファはflushされない。 だからapache等でgzしている場合には最後まで出力されるかどうかはかなり怪しい。(というか、多分されない) そしてブラウザはある程度溜まったら勝手に出来るところまでパースする。 そしてパースが完了しないとJS側からはデータにアクセスしようがない。(送信途中のデータは読めない) よってその方法では出来ない。 接続を明示的に切れれば、apache等は溜まってるデータをflushして接続を切りに行き、 それを受けてブラウザはすぐにパースを開始する。 だから、接続さえ明示的に切れれば、すぐさまパースされるんだよ。その後PHPが動き続けてても関係なく。 これをやろうとしている。 まあ、Laravelでキューサーバー使えというのはその通り。エンタープライズならこれなのだろう。 多分君はDOM(HTMLページ内)のJSが同期的に動くのを見て勘違いしてる。 ajaxで取得したデータは、途中では読めないよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/658
660: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 15:38:06 ID:F8+XC2Dv0 >>656 だから最初から言ってるが、 俺はPHPの初心者ではあるけどプログラミングは初心者ではないんだよ。 だから、PHPといえども恥ずかしいコードは書けない。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/660
662: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 15:57:19 ID:F8+XC2Dv0 ちなみにお前ら、PHPにコントリビュートしてみたい奴はいるか? 居るなら手伝うが。 Web開発ってのは、「こんなポンコツを使わされるくらいなら俺が直してやるからソースコードよこせ!」の繰り返しではある。 今の俺がそれだ。 write_closeは基本的な関数であり、存在しないのがおかしい。 実装は、exitで行っているであろうクローズ処理を前倒しすればいいだけ。具体的には、 1. exitのソースコードを「接続を閉じる部分」と「それ以外」に分け、 2. 「接続を閉じる部分」が write_close() で呼ばれるようにし、閉じたかどうかをフラグで保存、 3. exit ではそのフラグを見て、閉じてない場合は呼んでから、「それ以外」を呼んで終了とする。 とまあ、要は exit のソースコードを2分割すれば済む話ではある。 dieとか、他に止める方法もあるから既に分割されてる可能性もある。 この場合は、単純に関数エントリを一つ追加するだけで終わる。 ソースコードは既にダウンロードしてmain.cとか見てるが、肝心のexit/dieのコードがどこにあるのか分からないんだな。 知っている奴がいればよろしく。 なお、俺一人だとコントリビュートはしない。 俺はPHPの初心者であり仕様を知らなさすぎて、俺一人だとバグを埋め込んでしまうから。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/662
667: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 17:59:10 ID:F8+XC2Dv0 >>664 まあわざわざコード書いてよこしたのだから、こちらでも試したよ。 ファイルは200Bytes, ダウンロードサイズは 4.4KBと表示されてる。 確かにそちらの意図どおり、ハロワだけ先に表示されるよ。(パースされてる) 4KBパディングすれば、通常ならバッファをキック出来るから、確かにパーサもキック出来るはずだし、実際そうなってる。 ただな、時間を既に書いたが、それでは間に合わないんだよ。 ネットワークってのは地味に遅くて、例えばここからPHP.netへのpingは264msかかってる。 後処理は平均29.5-58ms程度だと予想されてるので、window.stopがサーバーに間に合わない。 結果、パケットは送信済みで、受け取られたパケットが捨てられるだけだよ。 ただし確かにパースはされてる。(=その方法でもユーザーの体感速度は上がる可能性がある) ただ、それはページのhtmlだからであって、ajaxではその方法は使えない。 ページのhtmlはブラウザの速度競争のおかげで出来るだけ早くパースするように出来てるからだ。 xmlを送る場合、閉じタグ以降に何かあったらエラーだったので、パディングで押し込みは無理だ。 jsonについては後ろにパディングしてもエラーは出ないようなので、押し込み自体は出来るが、 そもそもAPIが途中のパース結果を見せるように出来てないから、普通に実装されてれば全部揃ってからパースだよ。 世の中の大部分のサイトがこの「押し込み」で高速化してる、というのならブラウザも対応するはずだけど、聞いたこと無いでしょ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/667
675: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 20:15:50 ID: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か、というところ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/675
676: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 20:22:29 ID:F8+XC2Dv0 >>670 > なんとかしたいレベルってことは人間が認識できるレベルの待ち時間は発生してるんですよね。 ちなみにこれはない。まだ部品を動かしている段階。 ただそもそもC出身なので基本的にノーコストで速くなるのならそれを選択する。 そして普通の環境では有る close が無いので面食らっているわけだ。 俺が見落としてるだけだと思っていたが、本当にないのだから驚きだ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/676
682: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 21:22:27 ID:F8+XC2Dv0 >>678 proc_openはexecと変わらんだろ。 それで環境依存無しのコードが書けるわけでも無し。 PHPについては何度も言ってるように無料レンタルサーバーで動かす為で、 それは俺が使う用ではないからだよ。 PCのことなんて分からない連中でも動かせるようにして、しかも無料なら試しにやってみようかともなるだろ。 この辺については俺がどういうアプリ戦略を採るかだから、意見言われてもああそうですか、でしかない。 そしてここで色々ひけらかして後々粘着されてもウザイだけだから、特定出来るほど詳しく言うつもりもない。 なおNodeの無料鯖が日本に出現したら間違いなくそれに向けて作る。 今それがあるのならPHPは捨てるし、多分今後は書くこともない。 既に言ったが俺的にベストなのはサーバレスで、実際はレンタルサーバーよりもサーバレスが断然いい。 だからherokuの鯖が日本に出来るのがベストだが、無いのだから仕方ない。 PHPは糞だが、そもそも俺のアプリはそんなに大きいものではなく、 むしろSQLiteのラッパでしかないので、今はphp.netを睨みながらやってるような状況だが、それでも何とか進めてる。 ただまあ、俺が考えてることは今のWebからすると奇妙な事だから、君達と話が噛み合わないのは仕方ない。 それで君らが頭に来てるのも分からんでもない。 ただ先述の通り、詳しく言うと後々の憂いになるから、お互いに技術的なこと以外には踏み込まないようにした方がいい。 Webってのはそれくらいの距離感が丁度いいのだと俺は思ってる。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/682
685: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 21:25:17 ID:F8+XC2Dv0 >>680 つかまともな解じゃねえし。それでドヤられても困る。 動くっつうのと、やっていいかと、やるべきかは、別の問題だよ。 ただまあ、アイデアは面白いよ。それは他の人も言ってるとおり。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/685
686: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 21:30:22 ID:F8+XC2Dv0 >>684 エンタープライズ用途ならスケールアウト出来ないSQLiteは論外なのだろうけど、 ぶっちゃけ俺の用途ではSQLiteで十分だし、それは既にチェック済み。 というかね、単体では十分速いよSQLite。 まあ、他は使ったこと無いんだけどね。 SQLとか知らんし、とりあえず一番簡単な奴から、ってことで試して、十分だったのでそれまで。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/686
692: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:08:47 ID:F8+XC2Dv0 >>689 まあyes。正確には > ・無料で使える > ・日本国内に鯖がある ここまではその通りで、 > ・好きなミドルウェアや言語をセットアップできる この必要はない。好きでもないPHPを使ってるのがその証拠。 一番いいのはNode。 ただ、動的言語でないと無理なのではないかと予想してるので、(が、何故そうなのかは言えない、これはすまん) GoとRustは駄目だ。というかGoはPHP以上に糞だし、Rustは今のところ様子見してる。 それで、無料鯖で使える動的言語=PHP/Python/Rubyで、どれも知識ゼロだから、 とりあえずメジャーなPHPから試すか、で、まあ、言語と界隈が糞な所以外は問題ないから我慢して使ってる。(というほど使ってないけど) まあぶっちゃけ、PHPが糞だ糞だと言われつつものさばってるのは、確かに便利なんだよ。これは認める。 そしてPHP.netの出来はマジで素晴らしい。PHP.netと比べるとPythonやRubyのサイトはゴミだね。 この辺も、また、ググッて回答が出てくるかも含めて、知識ゼロならPHPから試すのが妥当だし、そうしただけ。 もしかして他の選択肢がある? ご指摘の通り、PHPは手段であって、目的ではない。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/692
694: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:20:09 ID:F8+XC2Dv0 >>691 Nodeは、俺がJS好きなだけで、PHPerからすると糞なのは認める。 というかね、DBと非同期が壮絶に相性が悪くて、Nodeだと結構トンデモなコードになる。 それに慣れてる俺は良いが、慣れてない奴からしたら糞以外の何者でもない。 ただしasyncが導入されたから今書いたらだいぶマシなのかもしれんが。 とはいえ、PHPは真偽判定テーブルとか見るだけでマジで糞で、糞なのを知っててもどハマりするから俺的には無理なんだ。 直近だと三項演算子、勿論結合がおかしいのは知ってるが、癖としてやってしまうんだよ。 そして見た目、バグに見えないから嵌る。 だからまあ、PHPを主力に使ってる人にとっては問題ないのだろうけど、 他言語を普段使ってて、偶にPHPとかだと、本当に無駄に嵌って、あ〜、ってのが多すぎて悲しいんだよ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/694
696: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:25:46 ID:F8+XC2Dv0 >>693 Oracleなんてガチ枠だから完全にノーマークでしたわ。 とはいえ、SQLとはまた違うとは聞いてるし、そもそもそれってあんまりど素人向けじゃないから不味い気が。 逆に無料レンタルサーバーなんて完全にど素人向けでしょ。 向こうもど素人が使う前提だし、やっぱりど素人にはレンサバがお似合いだと思うのだけど。 お互いトラブらないという意味で。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/696
701: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:44:02 ID:F8+XC2Dv0 >>698 JSのもそれなりに糞だが、 型を意識してれば実際問題としてそこに命中することはないんだよ。 だから一般のプログラミングをしてる奴にとっては問題ない。 PHP7のはなあ、なんだったか忘れたが、 JS的には問題ないものでもおかしなのがあって、しかもそれに普通に命中するから嵌るんだよ。 とはいえ最早PHP8を使うべきなのかな?三項演算子は解決されてるし。 今確認したが、無料鯖はまだ7のようなのだけど、 現実的に俺が今書いてるのを公開するのはどうやっても半年後とかでしかないから、 その頃に一般的に使えれば全く問題ないし、 駄目でもいつかはPHP8に移行するのだろうから、待ってれば済む話ではあるし。 今7を使ってるのは、実は4年前に味見だけしてて、その時に7だったからなんだよね。 まあ、PHP8は検討しとくわ。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/701
703: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:53:13 ID:F8+XC2Dv0 >>699 OracleやAWSとかは、基本的に「将来有料のお客様になるかも」な人向けだろ。 だから、その気がない人がずっと使うのは不味いと思ってるんだよ。 勿論技術的な問題もあるけど。 無料レンサバはその点、広告を貼りますよ!だから、 永久に無料で使われてもいいですよ、な点が違う。 だからまあ、ガチ向けなものは基本ノーマークなんだわ。 ただ、技術的にはだんだん敷居が下がってて、サーバレスなんてその最たる物だろ。 たぶん、本当になんにも知らないど素人が、それが鯖であることを認識もせず鯖を運用する時代が来つつあるんだよ。 俺はそれに向けてちょっと仕掛けようとしてる。(まあ高確率でポシャるが、それは致し方ない) http://mevius.5ch.net/test/read.cgi/tech/1619667579/703
704: デフォルトの名無しさん (ワッチョイ bd7b-LMHu) [sage] 2021/08/05(木) 22:55:44 ID:F8+XC2Dv0 >>702 了解です。 現実的に古いバージョンを使う理由もないからね。 まあ問題は環境の再構築だが、これもやるしかないね。 http://mevius.5ch.net/test/read.cgi/tech/1619667579/704
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.039s