【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
540デフォルトの名無しさん (オッペケ Sr05-4OD8)
垢版 |
2021/07/30(金) 19:58:25.74ID:r27NHL07r
wordpressの場合特殊なのか、idから画像をリサイズして表示するときに<php echo wp_get_attachment_link( 12123 ); ?>で表示されました。

テンプレートタグ/wp get attachment link - WordPress Codex 日本語版
2021/07/30(金) 19:58:58.68ID:ScATWV4k0
そらそうだろ
542デフォルトの名無しさん (オッペケ Sr05-4OD8)
垢版 |
2021/07/30(金) 20:00:25.98ID:r27NHL07r
いずれはwordpressではなくデータベース軸でサイトを立ててみたいので、output_image.php?id=...で
なぜ表示できないのかも知りたいんですが…
543デフォルトの名無しさん (オッペケ Sr05-4OD8)
垢版 |
2021/07/30(金) 20:09:34.89ID:r27NHL07r
<php echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('wp-content/uploads/2021/07/7mgpH3K.jpg')) . '">';?>

だと同じように表示されました。教えていただきありがとうございます。
第三者がアップロードするかどうかでセキュリティを考えるんですね、コメントしかりページナビしかりマイページ機能しかり。
2021/07/30(金) 20:34:44.87ID:GDRR8sIEd
WordPressはWPの作法に従わないと動かないことがあるよ。裏でCSSやら.htaccessやらJavaScriptやらが動いていて、実際の処理は隠蔽されてるから。
545デフォルトの名無しさん (オッペケ Sr05-4OD8)
垢版 |
2021/07/30(金) 21:45:55.50ID:r27NHL07r
>>544
ありがとうございます
546デフォルトの名無しさん (オッペケ Sr05-4OD8)
垢版 |
2021/07/30(金) 21:52:20.21ID:r27NHL07r
> 「不正な画像をアップロード」できるのも内部犯に限られることになる

XSS を利用して不正アップロードする手口が徳丸さんのとこで紹介されていました。
https://www.youtube.com/watch?v=FpCabifwhKg

WordPress なら外部から似たような攻撃でアップロードされる可能性があるので、プログラムレベルでも適切にアップロード対策をしておくべきだと思います。

このような回答が追加されていたのですが外部からも勝手にアップロードされる危険性はあるのでしょうか?
2021/07/30(金) 23:36:35.91ID:1geFHcN20
ありますよ。実際に自分はアップローダーからマルウェア仕込まれて
VPSサーバーを総入れ替え舌経験があります。
WordPress宛の攻撃は毎日あるし、できる対策は全てしたほうが良いでしょうね
548デフォルトの名無しさん (アウアウウー Sa09-d0wC)
垢版 |
2021/07/31(土) 01:52:34.20ID:v7hkUDSma
この動画を見たところ検索フォーム?のXSS対策コードの記載漏れから不正コードを入力されて管理画面に侵入されたみたいですが

要するに第3者が侵入出来るような検索フォームやお問い合わせフォームやコメントフォームやマイページの対策を怠らない事で防げるということですよね?
自分のみがアップロードする場合は該当しないのでしょうか?
2021/07/31(土) 03:18:27.24ID:ZYWMYotdd
脆弱性は様々な枯れてない技術から発見されている。あのWPだってあちこちからゼロデイ攻撃が見つかっている。WP のテーマやプラグインにも脆弱性がある。度重なる更新や脆弱性に対応できないならWPを使うのをやめた方がいい。

パスワードセキュリティにも危険性がある。パスワードはセキュリティの基本であり、5文字程度の単純なパスワードはパスワードクラッカーで短い時間で突破されてしまう。攻撃者は性能の高い計算能力を持ち、世界中のどこからでも攻撃できる。パスワードは単純なのはダメ、短いのはダメ、憶測できるのはダメ。

あるいはソーシャルハッキングや電波漏れなどの未知のハッキング手法からも攻撃が成立することがある。

こうすれば絶対にハッキングされないという方法はないが、危険性が高いものを避けることは可能。
2021/07/31(土) 10:31:19.92ID:fqpnvpaJ0
>>548
WordPressの場合、自分は管理画面のURL変えてIP制限入れてますよ。
自分のみがアップロードなら、自分しか使えないIPアドレス制限した方がいいし、
ホスト名とか環境変数とか、そこまでチェックした方が確実だと思います。

ま、一番良いのはWordPress使わないことですけどね
2021/07/31(土) 10:46:33.80ID:z/SvtBD30
>>550
動画見ろよ
IPの制限無関係に投稿する仕組みの紹介だぞ
2021/07/31(土) 11:04:47.11ID:JJoM48pY0
わざとセキュリティホール作って、ほらね?危ないでしょ?ってアホかよw
まずWPに同じセキュリティホールあるかの議論が先だろw
無いけどw
2021/07/31(土) 11:34:42.98ID:z/SvtBD30
>>552
ユーザ投稿のプレビュー箇所とアップロード機能を持つ管理画面って,WordPressで頻繁に見るんだが?
それぞれに問題箇所があるとwebshell置かれて終了!の可能性を指摘する動画だけど、理解できてる?
554デフォルトの名無しさん (ワッチョイ 9154-mx9M)
垢版 |
2021/07/31(土) 11:37:50.11ID:BUpo1U8M0
プログラムで例えば4×4のマップがあった場合、4という数字は私は格子点数と呼んでいますが、皆さんは何と呼びますか?
2021/07/31(土) 18:56:05.10ID:JJoM48pY0
>>553
一連の流れでセキュリティの指摘をしたわけではなく、ただ動画を宣伝したかっただけなんですね!
理解できましたw
2021/08/02(月) 10:21:18.11ID:JwyUb7gK0
>>536
Oh...
それ、単に「例」として出しただけなのでw

例えば(あくまでも例え話ねw)
ID | 画像のパス
1 | hage/abc.jpg
2 | fuge/345.jpg
みたいにデータ管理してたとして、

id=1 を渡せば hage/abc.jpg を取得できるようにすれば結果的に
output_image.php?id=1
とすれば、「hage/abc.jpg」を表示できるでしょ?ってこと

それを、
output_image.php?path=hage/abc.jpg
みたいに直接パスを渡すような設計にしてると、あなたのレベルでは危ないよってだけ
2021/08/02(月) 10:45:18.84ID:JwyUb7gK0
>>546
> 外部からも勝手にアップロードされる危険性はあるのでしょうか?
そりゃ「可能性」はあるよw
人間が作るものにバグ(脆弱性)がないものなんてない

で、>>546にはその動画の意味は理解できる?
理解できてないよね
理解できてないのに、何をどうやって「対策」するの?w

その動画に指摘されている脆弱性は、「プラグインのXSS脆弱性を悪用した攻撃」なので、
対策といったところで、あなたのレベルでできるのは「WP本体やプラグインは常に最新版を使う」事ぐらいだよ?
※その動画の攻撃例は管理画面にIP制限なんかしても無駄ですw

結局、「画像は546本人しかアップロードしない」んだよね?
だったら、「アップロードした画像には問題ない」事を前提に話を進めようよ

546は、「HTMLやPHPの基礎がないままWordPressから始めた」のがいけない
基礎がガタガタなの
そんな人が細かい事を気にしたところで、話は前に進まんよ
2021/08/02(月) 10:50:01.92ID:JwyUb7gK0
>>552
>>555
546の動画の例は、WordPressでECサイトを構築する際の「超定番」プラグインEC-CUBEのXSS脆弱性を悪用したもので、
「実際に悪用事例も出た」ものだけどね…
そんな事すら理解できないなら、横からしゃしゃり出てこずに黙っておけw
2021/08/02(月) 10:59:23.86ID:JwyUb7gK0
>>546
>>557に補足しとくと、WordPress本体・プラグイン・テーマファイルの致命的な脆弱性を悪用され、
WordPress権限から自由にファイルのアップロード・編集が可能になった場合、
サーバー内の画像をPHP経由で出力する際のセキュリティ(笑)なんか、いくら考えても無駄ですw

その点については>>518さんが指摘している通り

例えるなら、「ヘルメットを被っていたら快速電車にダイブしても大丈夫だよね?」って聞いてるみたいもんw

だから、自分しかアップロードしない画像ファイルは安全であるという前提で、話を進めようよ…いや頼むからそうしてくれw
てかRSSの時もそうだけど、たったこんだけの事にどんだけ時間かけてるのよw
2021/08/02(月) 11:36:09.87ID:CDsmjzwf0
いいから構うやつもまとめてWPスレ行って帰ってくるなよ
2021/08/02(月) 11:55:16.38ID:jY8DN4600
自演ですし
2021/08/02(月) 14:06:37.03ID:LY8fDkppd
最初から自分しかアップロードしない前提なのにどんだけレスしたら気が済むの、このセキュリティガイジ
2021/08/02(月) 14:39:06.84ID:nA0UljqA0
セキュリティガイジは別人だろ
ガイジなのは質問者、それに対しセキュリティ全波の話を持ち出してる人、煽るしか能のない人
2021/08/02(月) 14:51:48.05ID:LkFRX9kvd
>>554
普通にサイズでよくね?
2021/08/04(水) 15:31:27.53ID:QhYrANy70
Array(a1,b1,c1,d1,...)とArray(a2,b2,c2,d2,...)を足し算して、
2次元配列にする時って、どうすればいいでしょうか?

$x[0]がArray(a1,b1,c1,d1,...)の時、
$x[1] = $s;としたら、
$xがArray(a2,b2,c2,d2,...)で上書きされてしまいました。
2021/08/04(水) 15:33:03.22ID:QhYrANy70
$s=Array(a2,b2,c2,d2,...); です。
567デフォルトの名無しさん (ワッチョイ 5d01-QEAr)
垢版 |
2021/08/04(水) 15:44:34.90ID:QhYrANy70
foreach とか for とか使うしかないでしょうか?
2021/08/04(水) 16:12:58.96ID:QhYrANy70
foreach とか for で、解決しました。
2021/08/04(水) 16:36:34.91ID:BE8GLseK0
Ruby なら、zip で複数の配列を、組み合わせられる

ary_1 = [ 1, 2, 3 ]
ary_2 = [ 10, 20, 30 ]

p tmp_ary = ary_1.zip( ary_2 )
#=> [[1, 10], [2, 20], [3, 30]]

p results = tmp_ary.map{ |a, b| a + b }
#=> [11, 22, 33]
2021/08/04(水) 19:56:28.27ID:JeeF5Fq/0
ゴミのような流れに草w
2021/08/04(水) 20:48:03.21ID:nRiwNpi/0
相変わらずRubyガイジがPHPのスレを荒らしに来るw
2021/08/05(木) 00:28:51.82ID:F8+XC2Dv0
PHPで接続を明示的に切る方法ってある?

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

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

ブラウザがexitにてTCP接続が切れてからパースを開始すると、体感2倍重くなってしまう。
flushでデータを全部送りきることは出来るが、
ブラウザはパースしないと全部来たことが分からないので、fulsh後にすぐ動くことは期待出来ない。
http接続が切れれば、それ以上のデータはないと確定するので、パースを確実に開始する。
だからこれを早めたい。

何か明示的に出来る方法ってある?
2021/08/05(木) 01:28:56.20ID:qQkilq/Na
404のっとファウンドなどのエラーページを自作しる
2021/08/05(木) 01:43:30.62ID:JVVnzoun0
>>575
クライアントに応答を返すPHPは、応答を返したら、
後処理を行うPHPを起動し、自身はその終了を待たずexitする
2021/08/05(木) 03:48:16.16ID:9Ap3lZssd
>>575
〜ここまで本処理
// 結果を待たずに次の行へ進む非同期コマンド
exec('php 後処理.php > /dev/null &');
exit;

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

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

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

見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい。
そしていきなり環境依存コードを注入するというのはプログラマとしては頂けない。
ここら辺のノリがPHPの嫌いなところだ。
プログラマ向けに作ってないから、プログラマの常識でやってると変に嵌ったり、見落としたりする。
とはいえ、便利なのは事実だし、所詮スクリプトだと割り切るのも必要なのだろうけど。

とりあえずの問題は、開発環境がローカルホストのXAMPP(つまりwindows)で、
実行環境がレンタルサーバー(つまりLinux)ってところだが。

まあ、いずれにしてもありがとう。
この質問には確かにexecが正解のように見える。
2021/08/05(木) 06:50:31.72ID:Sb1zsMiv0
>>579
ローカルコマンド叩くのに環境依存がない言語なんてあるわけ無いだろ
嫌いになるのは勝手だけど、アホな理由で嫌いになるなよ
2021/08/05(木) 07:24:02.52ID:F8+XC2Dv0
>>580
だから発想が『プログラマとしては』おかしいんだよ。
少なくともNodeでもGoでも、環境依存無しのコードを記述出来る。
PHPでは出来ないのに、それでも良しとされてる。
そういうところが嫌いなんだよ。

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

PHPでも、session_write_closeと同様に、例えば write_close() というコマンドを作り、
そこで接続終了、それ以降の出力は全部捨てられます、とすれば、全く問題なく環境依存無しに出来る。
だからプログラマが主導して開発をしていればとっくにそうなってるはずなのに、
現実としてそうなってないから、色々無駄に戸惑う。だから好きにはなれない。

何だかんだで意外とNodeが蔓延っているのは、ここら辺の理由もある。
今回の使途ならJSのsetTimeoutでの実装の方がプログラムとしては断然美しくフィットする。
PHPで書くと、こんなコードにしかならないのかよ、と本当に愕然としてしまう。
腕が良くてもまともなコードを書けないんだよ。
それは上記の通り、PHPの開発の方向性が間違ってるからだ。
(とはいえ例の三項演算子についてはPHP8で修正されてるようだが)

まあとにかくだ、プログラマとしては禁忌に近い「環境依存コードの注入」を普通にやらせるのは異常だし、
そんな状況が放置されてること自体も異常なんだよ。
だからプログラマがPHPを好きになることはないと思うよ。
PHPを好きな奴は、他言語をまともに使えない奴だけだと思う。
2021/08/05(木) 07:52:13.16ID:Sb1zsMiv0
>>581
んなアホなことやりたいなら、phpでWebサーバ書けばいい
メジャーなのはないけど、ふつうにGitHubにも転がってる

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

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

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

以前は「XAMPPなんて捨てろ。どうせ本番環境では動かないし、XAMPPで開発する意味はない」とか言ってる奴も居たが、
実際はこの辺の、それが環境依存コードだと理解出来ないレベルの初心者が勝手にやらかしまくってるだけだと思うよ。
そしてその意味も分からず、「XAMPPなんて捨てろ」だけ真に受けた初心者が、
例えば>>394みたいに、右も左も分からないのにリモート環境で開発する、みたいな、余計におかしな事をやらかす要因となってる。

そしてその根元は、PHP自体に落とし穴がありまくるからだ。
なんでそこで環境依存コードを注入するしか解がないの?というね。

が、まあ、parallelとかphtとかはここら辺の対策用なのかな?
それにしても connection_close とかの単純な解の方が断然いいが。
2021/08/05(木) 08:42:00.19ID:Sb1zsMiv0
>>583
使ってる方からするとWebサーバレベルのハンドリングを意識しなくて良いレベルで抽象化されていることが使いやすいし、不足箇所は最近だとフレームワークが補完してくれている

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

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

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

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

お前さんの主張を支持する上級者は誰一人いないw
2021/08/05(木) 09:24:21.23ID: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でも書く羽目にはなりそうなのだが。
2021/08/05(木) 09:27:08.25ID:Sb1zsMiv0
>>588
お前のやりたいことは、Jobのキュー登録だろ
普通にあるわ

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

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

ここらへんの、ちゃんとした解がないから余計なことで遠回りにやる、ってのもPHP界隈が嫌いな理由だ。
そういうのは初心者から中級者にクラスアップしてきた連中が俺ツエー的にやりたがるのだけど、
そういうのが多すぎて、PHP界隈はウザイ。
ただ逆に言えば、そういうことをしたいレベルの奴にとっては「俺カッケー」が出来るから、大受けする。
だからPHPを嫌いな人は多いが、廃れることもないだろうね。新規参入者はいくらでもいるから。
ある意味初心者ホイホイな面はある。
(ただしプログラマになる為の教育としてはかなり最悪だが)
2021/08/05(木) 09:37:34.01ID:F8+XC2Dv0
>>589
あるならそれを教えてくれ。PHP.net上のurlだけでいいから。
jobで出てくるのは The GearmanClient class だけだが、さらっと見た限りなんか違うっぽいし。

というかね、PHP.netは本当に出来がいい。
あれだけは他言語も見習うべきだよ。
2021/08/05(木) 09:41:54.34ID:Sb1zsMiv0
>>591
ぐぐればLaravelが出てくるだろ

素のphpでやりたきゃ
https://medaka.5ch.net/test/read.cgi/php/1557652864/
なら別海が出てくるかもな
2021/08/05(木) 10:14:26.57ID:F8+XC2Dv0
>>592
LaravelはPHPで書かれてるのだから、素のPHPで出来ないことが出来るはずがないだろ。
と思ってるのだが、この認識が間違ってるのか?
まあ、導入する予定はないが、見てみるよ。


Webプログラミング板のスレはさらっと読んでみたが、ぶっちゃけここと大差ないような。
まあ、ここで一通り終了したら向こうでも聞いてみるかも。

なお、俺はプログラミングの初心者ではないが、PHPに関しては初心者だ。
一通りも知らないからPHP.netをいちいち引きながら書いてる。
それでいちいち、「他言語ならこうだけど、PHPならどう書くの?」になるわけ。
2021/08/05(木) 10:15:03.38ID:jTl1oJKL0
要は「非同期処理すればいいだけ」の話なのだが、ID:F8+XC2Dv0 はLinuxができない人?

だってさ、Linuxではコマンドの最後に「&」をつけるとバックグランドジョブになるのだから、
「言語を問わず」 "コマンド > /dev/null &" ってすればいいかな?って発想になるもん

で、開発環境はDockerやVagrantで作ればいい
PHPなんて良くも悪くも適当に書けば適当に動いてくれる言語なのだから、別にそれでいいじゃんw

PHPがどういう思想から生まれた言語なのかは以下のインタービュー記事を読むといい
https://gihyo.jp/news/interview/2010/rasmus

例えばNode.jsはシングルスレッド・シングルプロセスなのだから、入出力関連の処理を非同期で行ったりと設計思想からPHPとはまるで違う
1つの言語に固執せず適材適所で言語を使い分けるのがプログラマのなのだから、お前みたいな書き方をしてたら「だったらPHP以外の言語でやれば?」って思われるだけだw

ちなみにPHP8.1以降では「Fibers」が実装されて、非同期処理を綺麗に書けるようにもなるんだけどね
https://php.watch/versions/8.1/fibers
PHPってここら辺がすごい柔軟 良いと思った仕様はどんどん取り入れる

とにかく、グダグダグダグダとうるせぇんだよお前はw
自分の頭が固いだけなのに仕事ができると「勘違いしている自称上級プログラマ様(笑)」ってのが、現場で一番タチが悪い人間なのは間違いない
固くするのはチンコだけにしておこうな?
2021/08/05(木) 10:21:45.83ID:F8+XC2Dv0
>>592
あ、すまん。訂正。
laravelをさらっと見たが、dockerで導入してるところからして、俺
が想定していたJS的なフレームワークとは違い、これは実行環境形のフレームワークだな。
Job管理もあるのだろう。これはこれから読む。(とはいえ時間はかかるが)
2021/08/05(木) 10:24:19.91ID:jTl1oJKL0
Rubyガイジといい、なんでガイジ(正確にはガイオヤジかw)ばかり湧くんだろうなぁ
夏だからかw
2021/08/05(木) 10:24:44.74ID:F8+XC2Dv0
>>594
> 「言語を問わず」 "コマンド > /dev/null &" ってすればいいかな?って発想になるもん
理解してないのお前だ。俺は「言語を問わず」ではなく、「実行環境依存」なのを問題視してる。

まあお前レベルの奴がグダグダ言ってくるところがPHP界隈の嫌いなところだよマジで。
2021/08/05(木) 10:33:36.93ID:5AKWeG2e0
このガイジLaravelスレでバカにされているガイジだろw
無能で仕事もしたことが無いレベルw
2021/08/05(木) 10:49:57.76ID:jTl1oJKL0
>>597
だから「開発環境はDockerやVagrantで作ればいい」と書いた

とにかく質問は解決しただろ?
だったらPHPスレに居座る必要もない

WPガイジ(こいつも相当頭が固いw)といい、俺はサッサと質問を解決しガイジにお帰り頂きたいだけだ
繰り返すが固いのはチンコだけにしとけw それといももうチンコも勃たない歳か?w
2021/08/05(木) 10:51:05.04ID:F8+XC2Dv0
>>594
ラスマスの記事を読んだ。まあ想定どおり。
これはWeb上のオープンソース開発、つまりJSやRustも同じ事。
それらに比べてPHPはポンコツ過ぎ。

ちなみにfiberが欲しいわけではない。それも「歩いて3秒の場所に自転車で行く」に近い。
俺がやりたいのは、 fclose(/dev/stdout) だよ。
ただまあ、PHPがラスマスの言うとおり勝手に開発された機能の団子なのなら、
俺が勝手にCのコード書いて送れば採用されるのかな?
精々10行程度で実装出来るから送ってみてもいいんだけどさ。

あとそれ、「PHPは柔軟でスゴイ!」ってのも、
最近よくいる「俺が使ってる言語スゲー=俺スゲー」系の馬鹿だから止めとけ。
他言語で既に使えてる便利機能が今更採用されたところでスゲーと思えるのは明らかに信者でしかない。
第三者なら「ようやくかよ」でしかない。
2021/08/05(木) 10:57:59.07ID:kPeKr//s0
ID:F8+XC2Dv0
質問に非同期って単語が出てない時点でお察しですな
PHPへの噛みつき方もテンプレ過ぎて10年前にタイムスリップしたかと思ったよ
加齢臭のするオッサンだろうな
2021/08/05(木) 11:01:32.69ID:F8+XC2Dv0
>>599
> だから「開発環境はDockerやVagrantで作ればいい」と書いた
だからその解も本来は間違ってるんだよ。それは、

実行環境依存のコードしか書けないから、それぞれの実行環境を毎回用意してそこで開発しろ

なわけだろ。それはJavaが目指した「Write once, run anywhere」でも全然無いだろ。
まあ実際はともかく、そもそもプログラミング言語はOS上のレイヤだけで動いているのなら、こうあるべきなんだよ。
そしてJSとか他言語はそうなってる。
PHPはその努力もしてないから駄目なんだよ。

その、「間違った解を正解として誇らしげにドヤる」のも、
典型的な「初心者から中級者にアップしたての馬鹿」がやることで、おまえはまさにそれだよ。
実際PHP界隈はそういうのが多数派で、それが問題視されることはないのだろうけど、それ自体が問題だよ。
それでは生産性がまるで上がらない。まあこれも理解出来ないのだろうけどさ。
2021/08/05(木) 11:04:37.37ID:/R94gyIjd
>>590
あたしは575の提案をして、環境依存に難色を示されたので、代替提案をしただけなのに、おかしいだろとか、ダメだとか、あっちのほうがマシだとか、なんでそんなに上からなんですか笑

既にbody出力済みという前提も無かったし。

なるほど、でもできればリダイレクトはしたくないです。とだけ返事すればいいものを。

リダイレクトNGなら、更に別の提案もあるんだけど、萎えましたです。
2021/08/05(木) 11:05:12.89ID:jTl1oJKL0
俺、PHPがすげぇなんて一言も書いてないけどw
だからこそ「PHPなんて良くも悪くも適当に書けば適当に動いてくれる言語」だと書いたし
ラスマスのインタービュー記事を紹介したのだが、このガイオヤジはドヤ顔で何を勘違いしてるのだろうw

例えば>>579
> 見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい

なーんて書いちゃってるから…ね
「&」ついてるのに、これのどこか同期コマンドなんだというツッコミw

質問は解決してるんだからもう用はないだろ?
あとはチラシの裏にでも書いとけw
2021/08/05(木) 11:07:21.49ID:jTl1oJKL0
>>601
このガイオヤジ、1人で勘違いして「信者」なんて言っちゃってるしね
この手のヤバい奴は昔から居たから、PHP長くやってると慣れるよねw
2021/08/05(木) 11:09:50.52ID:F8+XC2Dv0
>>601
非同期知ってる俺カッケー、か。
俺がやりたいのは非同期ではないんだよ。

ここら辺なんだよ、PHPerは、(JSerもだからWeb系全般だと思うが)
本人が実力を過大評価しすぎてていちいちウザイ。

今回は同期の fclose(/dev/stdout) がベストで、この単純なことが出来ないのは奇妙だと思って聞いてる。
他の言語/実行環境なら最初に用意される物であって、存在しないのはほぼありえない。
だから俺の勘違いか見落としだと思って聞いてるわけだ。
そしてこんな基本的な物がないのに非同期とかfiberとか、整備の順番を完全に間違ってるんだよ。


とはいえlaravelはどうやら俺の想定していたものとは違うので、そこにあることには期待している。
2021/08/05(木) 11:14:45.50ID:F8+XC2Dv0
>>603
> 既にbody出力済みという前提も無かったし。
いやそれは普通に読めば分かるだろ。
むしろ、接続を切ろうとしてるのに、なんでその後に何か出せると思ったの?

もしかして、本処理ではheaderだけしか出力してないと思った?
それはレアケース(常に403とか?)であって、その仮定の方が無理あるだろ。
2021/08/05(木) 11:18:11.81ID:kPeKr//s0
簡単な非同期処理で解決するのになに言ってるのこの人
顔真っ赤すぎて全レスし始めたし今日1日で何レスするのか見ものだな
PHPに親でも殺されたのかしら?
2021/08/05(木) 11:23:41.31ID:xD0lMLd30
スレが伸びてると思ったら大物が登場してるな
面白いから魚拓取って他にも晒しとくわ
2021/08/05(木) 11:25:02.26ID:F8+XC2Dv0
>>604
exec自体は同期コマンドなんだよ。
そしてその書き方自体も他言語が出来るプログラマにとっては気に入らない。

exec("cmd"); // 同期
exec("cmd > /dev/null &"); // PHPではこれで非同期、しかし書き方がイマイチ
exec("cmd") > /dev/null; // これならまだマシ
exec_async("cmd"); // 本来はこうあるべき

まあここら辺もPHPが嫌われる理由だよ。他言語と揃ってないからいちいち文法で躓く。
だから他言語で慣らした連中に取っては無駄に参入障壁となっていて、
結果的にPHPはPHP育ちの初心者パラダイスになってる。
そりゃ居心地はいいんだろうけど、良いコードに遭遇出来ないのは上達の妨げにしかならないことに本人達も気づけない。
なんだかね。
実際お前ら、上の4つ、何が問題か分からないだろ。
2021/08/05(木) 11:26:44.63ID:F8+XC2Dv0
>>608-609
> 簡単な非同期処理で解決するのになに言ってるのこの人
そう思えちゃうところがPHPerだよ。
まあ他のプログラミングが出来る連中にも聞いてみるんだね。
2021/08/05(木) 11:31:07.06ID:xWv0yV5l0
自分も、そこまでLinuxには詳しくないが、
今時、2〜3台もパソコンがあれば、社内Lanで繋ぎませんか?
2021/08/05(木) 11:34:43.32ID:Lk6xwBBud
>>607
いや、あなたの常識なんて知らないわよ笑
普通にアクセスされただけで(またはgetパラメーター付きとか)処理が走って、本処理が終わるまで何も出力しないように書き直して工夫することだってできる可能性もあるわけだし。
(もうここは掘り下げなくていいです)

てか、あなたが返事すべきはそこじゃないんだけど〜
2021/08/05(木) 11:43:44.22ID:F8+XC2Dv0
>>612
開発環境の再構築に乗り気ではないのは、それは手段が目的化する恐れがあるから。

いろいろ分かってない状況(=今の俺)の場合は、環境構築こそが最大のネックで、
コード自体は書けば書けるものでしかないんだよ。
そして既にXAMPP+NetBeansでブレークポイントも当たるし、xhprofだっけ?も導入してるからそれでやってる。
(ただし環境を構築したのは4年前だから、君らからするとこれは古すぎかもしれないが)
新しい開発環境も、作ってしまえば結果的には楽勝なのかもしれないが、あっさり出来る自信がないんだ。


ただまあ、今回の話は、環境構築すればいいって物ではないのだけどね。
それって、例えば鯖を変えたり、あるいはGitHubで公開した後に「○○ですけど動きません」ってのに
いちいち対応するのか?って話になるだろ。

そもそも環境依存のコードを書くべきではない

ってのが大正義なのに、それを認めずあれこれ無駄に言ってくるからおかしな事になる。
お前らは何をすべきなのか本質を理解するべきだよ。
2021/08/05(木) 11:44:41.71ID:kPeKr//s0
>>610
なるほど
Linux系のOSでコマンドの後に&を付けるとバックで動くって事を知らなかったのね
それを必死に誤魔化してるだけかw
2021/08/05(木) 11:46:58.60ID:F8+XC2Dv0
>>613
> 本処理が終わるまで何も出力しないように書き直して工夫することだってできる可能性もあるわけだし
本処理ではbodyを出力する場合もあるし、403等でheaderだけで終わる場合もある。
本処理終了後は出力はない。だからそこで切りたい。

というわけだがこれでいいか?
いずれにしてLocationでリダイレクトは度頭でやらないといけないから君の間違いだとは思うけど。

> てか、あなたが返事すべきはそこじゃないんだけど〜
どこよ?
2021/08/05(木) 11:48:24.23ID:F8+XC2Dv0
>>615
そう思うのは、君の周りにはその程度の人しか居ないからだね。君も含めて。
2021/08/05(木) 11:49:26.67ID:cuxOZbzu0
朝の6:30から20レスww
2021/08/05(木) 12:00:42.44ID:F8+XC2Dv0
>>613
616訂正。
> Locationでリダイレクトは度頭でやらないといけない
と思ったが、もしかしてリダイレクトが間に合わなかったケースを意図的に利用して接続を切ろうって事か?

それは解としてはだいぶ酷い。そういうコードを書くと数年後には意味不明で読めなくなる。
あとその場合は結局ブラウザ上でパースされた時に転送(=接続終了する)だけであって、
結局今の実装(ブラウザのパースタイミング次第)と同じでしかないし、改善しないと思うが。
2021/08/05(木) 12:07:25.00ID:bqGeTZjz0
YouTube で有名な、雑食系エンジニア・KENTA のサロンの、
バックエンド初心者用コースのポートフォリオでは、

基本情報技術者資格、Ruby on Rails, Linux, Docker Compose, Node.js(Webpack, Babel), Bootstrap
VSCode(Remote Container, WSL2 ならRemote WSL), Heroku, CircleCI、データベース

今までは、Docker Compose までが初心者用コースだったが、
最近は誰でも、Docker出来るから、
AWS Fargate, Terraform, React, Vue.js, TypeScript も

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

これが済んだら、Ruby → Go で、時給1万円を目指す

Node.js, Django は使われていない。
PHP は一生やらなくてよいと言ってる

XAMPP, MAMP は、Linux じゃないから、やる意味がない。
WSL2 Linux とか、Heroku, AWSなどが良い

システムを、言語・アプリレベルで実現しようとするから、ダメ

普通に、AWSのSQS(キュー)。
企業が欲しい人材は、AWS Solution Architect。
AWSでシステムを組める人

だから何百人も、AWSのくろかわこうへいのサロンに入って勉強してる
621デフォルトの名無しさん (ワッチョイ 0e70-pCDs)
垢版 |
2021/08/05(木) 12:14:58.24ID:dqIKXfcM0
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?
2021/08/05(木) 12:18:19.70ID:Sb1zsMiv0
>>621
不正アクセス以外にも法的に問われるケースは存在します
まず法的な問題の解決方法を学ぶと良いです

まぁ、いずれにしても初心者のすることじゃないです
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を守らないと逮捕されるって本当ですか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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