21/07/10 02:46:38.45 gwvQHAgv0.net
Rubyバカが自分を棚にあげて何か言ってる
437:デフォルトの名無しさん
21/07/10 02:53:56.58 etRC44er0.net
>>5ch ではマルチポストは禁止
いつそんなこと決まったんだ?
438:デフォルトの名無しさん
21/07/10 06:01:14.33 BwwaALiC0.net
URLリンク(info.5ch.net)
439:デフォルトの名無しさん
21/07/10 08:21:25.24 l5rpHYDO0.net
>>430
それとはマルチポストの意味が違う
それに禁止されてるわけではない
440:デフォルトの名無しさん
21/07/10 10:30:31.94 BPX48WFJ0.net
同じ質問を至るところでして、回答者がいても返信すらしないというのはよくある事
書き捨てする様な質問には誰も答えないし、迷惑千万
441:デフォルトの名無しさん
21/07/10 12:57:51.58 B4xS3BY90.net
俺はヒールに徹するルビー君が結構好きだったんだけど
常識を語るようになったら終わりだね
442:デフォルトの名無しさん
21/07/10 13:45:53.05 npYW/9LsM.net
>>431
マルチポストの定義すら分からんのか
443:デフォルトの名無しさん
21/07/10 17:15:08.23 xuQr++Bu0.net
>>434
お前がな
444:デフォルトの名無しさん
21/07/10 23:37:27.16 L/F3nxmer.net
原因が少しわかりました
get_posts()は取得した投稿データを配列として返すのに対し、WP_Queryクラスを利用した場合は、データベース検索の条件やその結果がデータとして保持されるため、ループ内での条件分岐など、より高度なサブループの制御が可能です。
昨日書いたコードは$args = array()を2度分けて書いていたこと、
$posts_array = get_posts( $args );で投稿内容の取得をしているのに対し、
$the_query = new WP_Query( $args );でページナビの内容を取得しているので、
ひもずけされておらずページ番号と内容がマッチしておらず2ページ目をクリックしても内容のリロードができてませんでした。
一つ聞きたいのは、
WP_Queryとget_postsの違いは何でしょうか?
投稿内容をページナビ付きで表示する場合WP_Query() get_thumnailとかで投稿画像など取得できるのでしょうか?
445:デフォルトの名無しさん
21/07/11 02:17:32.48 lZiRxAj00.net
WordPress の質問ですか?
WordPressの事なら、Web制作管理板のWordPressのスレに書き込んでください!
5ch はマルチポスト禁止だから、
同じ質問を、複数のスレに書くのは禁止!
このスレではなく、WordPressのスレの方で聞く方がよい
446:デフォルトの名無しさん
21/07/12 01:09:59.12 cRbCoWRWr.net
URLリンク(teratail.com)
何とか作り上げることができました。
頭痛いのでねます。
447:デフォルトの名無しさん
21/07/12 16:45:41.95 ihSDWtOf0.net
Po@「
448:デフォルトの名無しさん
21/07/12 17:49:52.30 ZPBMd6Y/0.net
>>439
コラコラ
449:デフォルトの名無しさん
21/07/12 22:17:47.32 SYagZpGJd.net
アップロードされた画像をconstで定義されてるパス先に移動させたいんですが上手く出来ないので教えてください
move_uploaded_file($upload_file['tmp_name'],DIR_IMG.$new_file_name);
DIR_IMGには相対パスが入ってます('../img/など)
450:デフォルトの名無しさん
21/07/13 13:02:35.06 I15vJP3h0.net
そもそもアップロードされたファイルなのかどうか
is_uploaded_file()でチェック出来る
そうじゃないならrename()使え
その相対パスあってる?
realpath()で確認してみる
相対パスがあってたとして、パーミッションチェックした?
451:デフォルトの名無しさん
21/07/14 19:07:13.52 dWCeWde70.net
$fruits = array(
'banana' => 'yellow',
'apple' => 'red',
);
$coffee = 'cocacolla:geogia';
function morning($fruits,$coffee) {
$fruits['strawberry'] = 'red';
$coffee = 'suntory=boss';
return $fruits;
}
$fruits = morning($fruits,$coffee);
var_dump($morning);
echo '<br>'.$coffee;
?>
すいません。
phpでは、他の言語のように、関数外で定義された変数も
関数内では有効ではないのですね。。
で、関数外で定義された変数は、引数で受け取り、
returnで返すと、有効になることもわかりました。
=という認識であっていますか?
では、更新したい変数が2つあった場合どのようにすればいいでしょうか?
たとえば、上でいうところの$coffeeを更新したいのです。
452:デフォルトの名無しさん
21/07/14 19:09:54.91 dWCeWde70.net
訂正::すいません。
×var_dump($morning);
〇var_dump($fruits);
453:デフォルトの名無しさん
21/07/14 19:40:05.21 b60WN8TB0.net
グローバル変数なら別にスコープ関係無い筈だがそれ前提は設計的にどうかと思うので
以下の方法のどちらかを使う方が良いだろう
参照で渡す
function test(&$a) {
$aへの代入は関数で渡した変数に及ぶ
別にreturnする必要は無い
}
複数の結果をリターンする
function test2()
{
return [1,2];
}
list($a,$b) = test();
$aと$bに結果が入る
454:デフォルトの名無しさん
21/07/14 20:25:55.80 dWCeWde70.net
よくわかりました。
関数外に変数を定義したからといって、
global変数になるわけじゃないんですね。
ありがとございました。
参照渡しか、global変数の定義か、どちらかでやっていきます。
455:デフォルトの名無しさん
21/07/15 00:16:59.54 gFOIdhYR0.net
Ruby も珍しく、厳格な関数スコープ。
関数外の変数を、関数内で参照できない
引数渡しか、クラス・モジュール化して使うなどする
456:デフォルトの名無しさん
21/07/15 14:33:47.08 Hy5PN9MF0.net
>>446
まず「スコープ」という概念について勉強しよう
URLリンク(www.php.net)
それが理解できたら次は「グローバル空間」について
URLリンク(www.php.net)
それが理解できたら次は「名前空間」について
URLリンク(www.php.net)
今は野球のルールを知らないのに野球やってる状態
PHPマニュアルは優秀だから大抵の事は書いてある
最低限のルールは覚えよう
457:デフォルトの名無しさん
21/07/15 14:39:40.15 Hy5PN9MF0.net
>>441
その質問には超能力者しか答えられない
とりあえず、以下を参考にエラーを出力させよう
URLリンク(qiita.com)
次に、そのエラー内容をきちんと読もう
中学レベルの英語力で読めるので
そのエラーを読んでも意味が理解できないなら、エラー内容を転載して質問
俺らはエスパーじゃないw
458:デフォルトの名無しさん
21/07/15 20:53:46.77 jGrj3A7F0.net
>>443
なんとなく設計がよくない気がする
$fruits、$coffeeは、別々の関数で処理させて、returnはそれぞれ1つの方がよいと思う
無理にまとめると関数の独立性を損ねるし、それに参照渡しもlist関数も直感的でなく可読性が落ちる
459:デフォルトの名無しさん
21/07/17 05:15:45.31 YBqRFemK0.net
>>449
妙にしっくりきます。
長年ソフトボールに慣れ親しんで、
野球も似たようなもんだろ。って参加したら
両者の違いにやっと気づいて、苦悶する状態w
460:デフォルトの名無しさん
21/07/17 05:18:10.65 YBqRFemK0.net
>>449ではなくて>>448
すまそ。
461:デフォルトの名無しさん
21/07/17 18:21:09.31 ohkviaGsr.net
指定画像を出力したうえでメニューを作りたい
<php
header('Content-Type: image/jpg');
readfile('uploads/2021/07/7mgpH3K.jpg');
>
で画像の取得はできたのですが、
html文を続けて出力するとエラー
php文を続けても画像しか表示されません。
おそらく器しかなく受け皿のhtmlがないので画像ファイルとして認識されてしまっているのが原因だと思います。
<php
header('Content-Type: image/jpg');
readfile('wp-content/uploads/2021/07/7mgpH3K.jpg');
>
のあとに続けて画像 画像 メニュー 画像とへっだーナビ風に<table>にしたい場合どうすればよいでしょうか?
462:デフォルトの名無しさん
21/07/17 18:25:44.28 ohkviaGsr.net
画像が画面いっぱいに表示されるということは別のファイルに出力するということですかね、
複数表示してcssを付与するのはどうすればよいのでしょうか?
463:蟻人間
21/07/17 18:54:11.12 UtbSZ1Qtd.net
htmlの中にtable出力、その中でimg要素をsrc属性を付けて複数指定する。ブラウザはsrc属性付きのimgのイメージを自動的に読み込む。
464:デフォルトの名無しさん
21/07/17 20:16:21.59 ohkviaGsr.net
>>455
すみません、過去の質問を頼りに画像出力について検索したのですが、URLリンク(detail.chiebukuro.yahoo.co.jp)
PHPで画像データを読み込んで出力する場合は、IMGタグを
<IMG src="ooo.php?img=gazou.png">
PHPは
if($_GET['img']){
print file_get_contents($_GET['img']);
exit();
}
のようにします。
とありますが、<img src="img.php?img=uploads/2021/07/7mgpH3K.jpg">で
img.phpの中のuploads/2021/07/7mgpH3K.jpgを出力するとしても画像が出力できません。
何が原因でしょうか?
465:蟻人間
21/07/17 21:00:58.68 UtbSZ1Qtd.net
>>456
スラッシュをエスケープするにしてもその書き方は任意のパス名を受け入れるから危険だよ。
466:デフォルトの名無しさん
21/07/17 21:34:37.90 OaBiTcJcM.net
>>457
画像を呼び出す場合<img src="/header_image.php">のようにphpスクリプトを呼び出して、そのphpスクリプトが画像データを返すようにすべきです。
と言われたのですがほかに方法はあるのでしょうか?
467:デフォルトの名無しさん
21/07/17 21:38:04.55 xmQE+uIu0.net
<img src="img.php?img=uploads/2021/07/7mgpH3K.jpg">
じゃなくて、
<img src="uploads/2021/07/7mgpH3K.jpg">
じゃないの?
まあでも、ユーザーから送られたものを、チェック無しに、そのまま使うのは危険!
そこに、色々なファイルパス・命令などを入れてくる
468:蟻人間
21/07/17 22:23:28.15 UtbSZ1Qtd.net
パス名じゃなくてもっと制限された情報を渡す。
469:デフォルトの名無しさん
21/07/18 12:58:29.71 VnC3iq6Ar.net
>>459 >>460
ユーザーからおくられたものではなく自身のサイトのサーバーに置いた画像を指定して任意の場所に表示させ、メニューを作りたいんですがその場合
<img src="uploads/2021/07/7mgpH3K.jpg">でいいのでしょうか?
<table>にして画像 画像 メニュー メニュー 画像としたいんですが、phpを使わなければならないと勝手に認識してるんですが
470:デフォルトの名無しさん
21/07/18 13:23:08.70 A0aXocf00.net
HTMLでアクセス可能なPathなら、だが
ハッキングされそうで怖いな
471:デフォルトの名無しさん
21/07/18 14:04:59.57 fBmvBk7Y0.net
そもそもアップロード先フォルダだとしてそれをそのまま公開するのは頭がおかしい
PHP以前の問題
本来ならアップロードした時点でファイルを調べて、それでOKであれば
(例えばちゃんと画像ファイルなのかどうか等)
公開フォルダへコピーするなりするべきじゃね?
472:デフォルトの名無しさん
21/07/18 15:55:22.55 Th1fsKvf0.net
アホばっかりw
473:デフォルトの名無しさん
21/07/18 16:44:58.59 UQ3hWlPAa.net
セキュリティ的に危ないという理由を教えてください
一度サーバーのフォルダにアップしたものを公開するのは危ないのでしょうか?
474:デフォルトの名無しさん
21/07/18 17:23:13.71 ca/UjVuI0.net
>>465
セキュリティはちゃんと体系的な知識を身につけたほうが良いですよ
一応アップロード系の用語がそれなりに出てくる記事をリンクしておきます
URLリンク(qiita.com)
記事中の実装は、今となっては古すぎなので参考になりませんが、用語レベルでは網羅されているかと
入り口の記事として読んでください
外部からアクセスできる場所にアクセス・実行できるファイルを一個置かれただけで、かなりのことができるようになります
475:デフォルトの名無しさん
21/07/18 19:10:00.86 NSPuFPL00.net
RubyガイジとWPガイジはスルー推奨
476:デフォルトの名無しさん
21/07/18 19:37:42.84 gO2R7Orx0.net
>>453
header関数で画像データを指定してるんだからhtmlが出力されるわけない
何のためにわざわざheaderなんか指定してるのか不明
HTTPヘッダについて調べた方がいい
477:デフォルトの名無しさん
21/07/18 21:08:39.36 H/NN8O820.net
セキュリティーは、膨大な種類ある
だから皆、Ruby on Rails などのフレームワークを使う。
素の言語では、一生やっても作れない
Rails では、サーバーへプロフィール画像をアップロードする、機能がよく出てくる。
画像ファイルの縦横幅の制限、容量の制限、
中身にウイルスがうめこまれていないかチェックするなど、
色々なセキュリティー対策をしないといけない
さらにレスポンシブ対応で、様々なサイズに拡大縮小するなど、
OSS のモジュールを使わないと作れない
一々、自分で作っていては、一生掛かる。
Railsなどのフレームワークの勉強をしていない人は、絶対にシステムを作れない
他にも、マスアサインメント・SQL インジェクションとか、
セキュリティーには膨大な種類ある
だから、PHP のサイトばかり攻撃されるのは、
セキュリティーを知らない人が作っているから、情報を取りやすい
478:デフォルトの名無しさん
21/07/18 21:53:44.27 6mAUoTwKM.net
PHPのフレームワーク使うならLaravelだね
479:デフォルトの名無しさん
21/07/18 22:51:51.23 adePGcGm0.net
マルチポストには激おこするルビー君
480:デフォルトの名無しさん
21/07/18 23:11:24.32 g0bWf1Ea0.net
激おこなんていうJK用語をナチュラルに使いこなしているのがすごい
481:デフォルトの名無しさん
21/07/18 23:42:29.55 A0aXocf00.net
JK用語なの?
おじさん、普通に使ってた
482:デフォルトの名無しさん
21/07/20 01:13:58.90 kSAF0CCr0.net
アラフォーだけど、使うって感じじゃなくて…
ジェネレーションギャップかも
483:デフォルトの名無しさん
21/07/20 17:18:42.82 IgegoDKDM.net
以前質問させていただいた画像を直接上げてはいけない原因を調べたところ、
誰からもWebサーバを介してファイルにアクセスできないようにしておいて、ファイルの表示はプログラムを使ってアクセス制御をしながら表示する
つまり通常Webで画像を表示する場合、imgのsrc属性に画像が置いてあるURLを指定するというのが一般的だと思います。
しかし、画像を置いてあるURLを指定するというのは、画像を表示するためにはそのURLにアクセスできるということを表しています。
そこで画像をbase64化
画像をHTMLやCSSに埋め込める(直接記入出来る)ようにする為に、画像をbase64にエンコードします
<php $img = base64_encode(file_get_contents('画像URL')); ?>
<img src="data:image/png;base64,<php echo $img; ?>">
参考URL
URLリンク(www.tmp1024.com)
URLリンク(9-bb.com)
これで大丈夫でしょうか?画像は表示されました。
484:デフォルトの名無しさん
21/07/22 13:17:48.55 pnEPB7fm0.net
質問お願いします。
環境はWindows10でXAMPP7.4.21です。
exec('ipconfig', $message);
上記のPHPに、ブラウザからアクセスした場合、$message[1]が
「Windows IP 構成」と、日本語ですが、
Batファイルで、「c:\xampp\php\php.exe d:\www\test.php」で実行した場合、$message[1]が
「Windows IP Configuration」と、英語です。
PHPが5の時はどちらも日本語だったのですが、XAMPPのアップデートでPHPが7になったらこの現象が起きました。
Batの時にも日本語にするためには、なにをしたら良いでしょうか。
どうぞよろしくお願いいたします。
485:デフォルトの名無しさん
21/07/22 15:43:09.09 b8/cFbDKM.net
>>463
言ってる意味がおおよそ理解できたのですが。
・暗号化
可逆な存在
=複合することができる
=変換方式が決まっているため、だれでも復元(decode)できる。
可逆な存在といえば「Base64」
エンコード(暗号化)も出来るし、デコード(複合化)もできる。
(でもね、厳密には暗号化=エンコードとは言えないんだよ…)
(詳しくはもう少し下で…)
逆に、不可逆な存在といえば「SHA-1」
こっちは複合化することが出来ない。
画像をハッシュ関数化してそれをもとに画像を表示させる方法がわからないんですが、
phpで可能なんでしょうか?
486:デフォルトの名無しさん
21/07/24 10:11:35.97 CXOLw81IM.net
暗号化と符号化の違いがわからなかった時期が俺にもあったなぁ
487:デフォルトの名無しさん
21/07/26 09:39:33.21 nRSOkyaR0.net
質問です。
JSONファイルを読み込もうとしたのですがうまくいきません。
$url = "URLリンク(f.irbank.net)
$json = file_get_contents($url);
$json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN');
$arr = json_decode($json, true);
488:デフォルトの名無しさん
21/07/26 09:43:24.61 UUQ7nGaW0.net
うちはできてる
489:デフォルトの名無しさん
21/07/26 09:51:26.23 nRSOkyaR0.net
うう…マジか
XAMPPのローカル環境だから上手く行かないのだろうか?
490:デフォルトの名無しさん
21/07/26 10:38:53.43 rdRO2HTr0.net
せめてエラーログくらい貼りなよ
491:デフォルトの名無しさん
21/07/26 11:26:45.16 DTdYSzy80.net
全く読めない
このファイルは、UTF-8 ではない?
492:デフォルトの名無しさん
21/07/26 11:43:48.93 rdRO2HTr0.net
>>479
レスポンスがbrotliで圧縮されてる
そのままブラウザに出力したいだけならContent-Encodingを設定しておくだけ
header('Content-Encoding: br');
jsonとして読み込みたいならbrotliのエクステンションをインストールしてからデコードした上でjsonにデコードする
493:デフォルトの名無しさん
21/07/26 20:20:23.98 BzqZLuZJM.net
1つ聞きたいんですが画像ファイルのセキュリティについてです。
自分の調べた聞いて理解した範囲では画像を<img src="画像URL">で表示するのは、
画像を表示するためにそのURLにアクセスできるので危険
↓
画像をbase64にエンコードします
デコード(複合化)もできるので意味がほぼないです
↓
サイズとMIMEチェックをして画像を表示させる前に、画像ファイルである事を確認する
必要ならサイズやビット深度を変更する
URLリンク(teratail.com)で聞くと,
ファイルをアップロードするのは「サイト運営側」だけであれば問題ありません。
URLリンク(detail.chiebukuro.yahoo.co.jp)で聞くと、
mineチェックとサイズ変更しなさい、
できればアップロード時のファイル名を元のものから変更する、自サイトのページ内に配置された画像としてしかアクセスを禁止するなどしなさい
結局どれが正解なんでしょうか?
494:デフォルトの名無しさん
21/07/26 20:26:04.88 B9v6ZV500.net
>>485
どのようなリソースをどのような攻撃から守るかの仕様が提示されない以上正解はありません
セキュリティポリシーやセキュリティ設計から見直してください
実装を決めるのはその後です
495:デフォルトの名無しさん
21/07/26 20:31:09.20 7+uo32oc0.net
>>453
>>485
お前のやりたいことはWordpressの管理画面からアップした画像の表示だろ
そんなもんのセキュリティ気にして変換する奴なんていねーよ
つーかWPスレ池
496:デフォルトの名無しさん
21/07/26 21:10:41.62 B9v6ZV500.net
>>487
アップロードは常に気をはれよ
URLリンク(www.youtube.com)
497:デフォルトの名無しさん
21/07/26 22:18:00.65 7+uo32oc0.net
>>488
俺に気をはれと言われましてもw
498:デフォルトの名無しさん
21/07/26 22:31:24.99 nQwBFtLMr.net
>>487
wordpress以外でも同じでしょ?
それに管理画面からじゃなくフォルダのディレクトリに置いたファイルの話なんで画像限定じゃないですね
phpやcssのファイルでも同様かどうか知りたいです
499:デフォルトの名無しさん
21/07/26 22:44:03.71 nQwBFtLMr.net
画像ファイルのアップロードの時のセキュリティはwordpress関係なく同じでしょ
500:デフォルトの名無しさん
21/07/26 22:56:31.97 7+uo32oc0.net
>>491
WPインストールしたらアップロード周りのソース全部読んでセキュリティホール無いことを確認するの?
WPで画像表示する時は表示用PHP作ってbase64変換かますの?
そして、アップロードする時は常に気をはるの?
501:デフォルトの名無しさん
21/07/27 00:25:56.73 eUxCT57wa.net
>>492
そんなことはしませんが、最低限のセキュリティは同じでしょ?
base64じゃセキュリティにならないからファイルを関数化して複雑なファイル名にする
それプラス最低限のセキュリティ、今回は画像なのでMIMEチェック
もし自分以外のユーザーが画像を上げるなら
自サイトのページ内に配置された画像としてしかアクセスを禁止する
word pressだからセキュリティは要らないっていうのはおかしいでしょ
502:デフォルトの名無しさん
21/07/27 01:30:32.63 7P6684PB0.net
>>493
>>487 を読み返してください
WPが前提、WPのシステムからアップされたメディアファイルの話し
更に言えば、このスレに住み着いてるWPガイジへのレス(アンカー見ればわかるでしょう)で自分で弄ることが前提
そして事の発端は
>>指定画像を出力したうえでメニューを作りたい
だからね?
>そんなことはしませんが
と仰られるように、前のレスの質問にNoと言うことはWPのシステムのセキュリティをある程度信頼してるわけですよね
この件ではそれで十分だろうと言う話ですよ
セキュリティの一般論の話なんてしてませんよ
503:デフォルトの名無しさん
21/07/27 01:51:04.21 sIvc9ZAG0.net
ここはPHPの質問をするスレ
WPの質問なら移動してください
504:デフォルトの名無しさん
21/07/27 04:39:04.62 x4yitIm80.net
Word Press の質問は、web制作管理板のスレの方へ移動してください!
Laravel のスレも、この板に立てている香具師がいる。
Laravelの質問は、WEBプログラミング板の方へ!
505:デフォルトの名無しさん
21/07/27 06:50:44.81 L674X5NC0.net
>>496
お前が言うな
Rubyバカ
506:デフォルトの名無しさん
21/07/27 07:09:26.40 CFpUohJoM.net
WPスレにいる者だが絶対こっち来るなよ
ガイジ過ぎて手に負えんわ
507:デフォルトの名無しさん
21/07/27 08:14:32.01 SyBbAbx40.net
質問は>>485であってwordpress関係ないだろ
>>487が勝手にwordpressだって決めつけてる
質問も意味不明だけどね、何を聞きたいのか簡潔にしてほしい
> つーかWPスレ池
お前がいけよw
508:デフォルトの名無しさん
21/07/27 09:02:44.68 opDlelu60.net
るびースレに行ってもらえば万事解決するんじゃないかな
509:デフォルトの名無しさん
21/07/27 09:30:06.62 7P6684PB0.net
>>458 の質問者は少し前のWPのページネーションの奴だし、そいつは更に前のRSSの奴でもある
ってことでこのスレに住み着いてるWPガイジであることは確定なんですわw
何が気に食わないのか知らんけど残念だったねwww
URLリンク(teratail.com)
510:デフォルトの名無しさん
21/07/27 10:01:53.85 DZV4D5nN0.net
>>493
セキュリティと権限をごっちゃにしてそう
511:デフォルトの名無しさん
21/07/27 15:53:11.92 Dog97BpdF.net
>>495
ほんそれ
512:デフォルトの名無しさん
21/07/28 10:44:10.50 5Wbud5da0.net
>>485
関連レスをザッとだけ読んだけど、スレ回答者の中にもおかしな事を言ってるやつはわりといる
いちいち指摘してたらキリないから割愛するが、スレ回答者の皆が実務経験豊富なプロってわけじゃないからなぁ…
でもお前さんも、自分が「思い込みが激しくて頭が固いタイプ」だって事は自覚しよう
rssの質問のときも、print_r($rss); とするだけで理解できる筈の事を理解できず、質問を繰り返してたでしょ?
だからスレが荒れるんだよ? 分かる?
513:デフォルトの名無しさん
21/07/28 10:44:53.11 5Wbud5da0.net
>>485
で、元の質問は>>453でしょ?
画像を出力するコードの中にHTMLを出力すれば、意図した結果にならないのは当たり前
普通は「画像出力専用のPHP」を用意してこうやる
<img src="output_image.php?id=12345">
そして「HTMLを出力するPHP」の中で下記のようにすればいいだけ
<html>
<body>
<img src="output_image.php?id=12345">
</body>
こういう発想ができないのは、頭が固い証拠
どうしても1つのPHPファイルの中で、画像の出力とHTMLの出力とを同時に行いたい場合はこうする
echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('img/abc/123.jpg')) . '">';
要するに、画像(バイナリデータ)をbase64でエンコードし「文字列(テキストデータ)として出力」すればいい(インラインイメージと呼ぶ)
これに「セキュリティ的な意味はほぼない」ので、勘違いしないよう
インラインイメージで画像を出すかどうか?ってだけ
まぁこんな事をやってもメリットなんか無いから、普通は「画像出力専用のPHP」を用意する
514:デフォルトの名無しさん
21/07/28 10:46:52.30 5Wbud5da0.net
>>485
>>505に書いたoutput_image.phpの仕様がもし
output_image.php?path=img/abc/123.jpg
のように、画像のパスを渡したらその内容をそのまま表示するとなっていた場合、「パストラバーサル」と呼ばれる脆弱性が発生する危険性がある
例えば、pathの値が「img/../../../secret.txt」だった場合、意図せずsecret.txtの中身が第三者に読まれてしまうって事ね
だから、そうならないようpathの値をしっかりチェックしないといけないのだけど、一連の質問を見ている感じ、あなたにそれを自前でやるのは無理だと思う
なので、「ファイルパスを渡す」のではなく、最初の例のように「画像を識別できるIDを渡す」ようにすればいい
※?path= で値を受け取るPHPをインターネット上に公開し、ログを取ってみるといい
※笑うぐらい攻撃があちこちから飛んでくるのが確認できるから
515:デフォルトの名無しさん
21/07/28 10:50:19.40 5Wbud5da0.net
>>485
最後に
アップロード処理が管理者にしかできない = 第三者に変なファイルをアップされる心配がないのであれば、
<img src="img/abc/123.jpg">
で別にええのよw
img/abc/123.jpg というファイルパスを第三者に知られたくないなら、>>505の例のように「間にPHPをかまして出力」すれば良いってだけ
逆に、第三者に変なファイルをアップされる心配があるのであれば、「アップロード処理の際に(出力の時ではなく)」厳密なチェック処理をしないとダメ
それについては、>>466さんも紹介してくれている
URLリンク(qiita.com)
を読めばいい
・第三者が自由にファイルがアップロードできる
・アップロード処理の際に上記のようなチェック処理ができてない
・アップロードされたファイルへ第三者がアクセスできる
3つの条件を満たしているとセキュリティ的にヤバいよねってだけ
例えば、「任意のファイルを自由に読み書きできるPHPファイル」をアップロードしそれがそのまま実行できたらヤバいでしょ?
分かる?
516:デフォルトの名無しさん
21/07/28 12:52:23.66 9bJDIHUz0.net
釣り質問にマジレスすんなよアホ
517:デフォルトの名無しさん
21/07/28 12:58:32.36 pYNLf1nF0.net
釣りレスですしw
518:デフォルトの名無しさん
21/07/28 16:52:40.91 5Wbud5da0.net
>>476
ゴミレスに埋もれて気づかなかったw
PHPの記述を
exec('ipconfig', $message);
↓
exec('chcp 932 | ipconfig', $message);
に変えたら上手くいくと思う
932はCP932(SJIS)の事ね
519:デフォルトの名無しさん
21/07/28 16:54:11.72 5Wbud5da0.net
520: class="reply_link">>>479 error_reporting(E_ALL); ini_set('display_errors', 1); $url = "https://f.irbank.net/files/8700/fy-profit-and-loss.json"; $json = file_get_contents($url); var_dump($json); ってやったらどうなる? string(1676) "{"meta":{"type":"\u696d\u7e3e","item":{"\u5e74\u5ea6":["\u58f2\u4e0a\u9ad8",… みたいなレスポンスが返ってこない? とりあえず↓の行は要らんでしょ $json = mb_convert_encoding($json, 'UTF8', 'ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN'); >>481 関係ない PHPのバージョンぐらいは書いた方がいいが
521:デフォルトの名無しさん
21/07/28 20:23:13.38 jpPdNADXr.net
>>507
それをあわせてファイルをチェックするのが
MIMEチェックをして画像を表示させる前に、画像ファイルである事を確認するってことですよね?
画像をecho '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('img/abc/123.jpg')) . '">';で表示して
MIMEチェックするのがそんなに難しいことなんですか?
522:デフォルトの名無しさん
21/07/28 21:08:58.35 IWCDcnnv0.net
>>510
どうもありがとうございます!
とても助かりました
523:デフォルトの名無しさん
21/07/28 22:44:28.91 5Wbud5da0.net
>>512
MIMEのチェックが必要なのは、「第三者が」画像の「アップロードをするとき」の話ね
画像を表示させる前にそんなものは要らない
> MIMEチェックするのがそんなに難しいことなんですか?
PHPでアップロード処理した際、MIMEタイプは $_FILES['hoge']['mime'] に入るんだけど、
それは偽装できる
だからその値は信用せず mime_content_type() などで別途チェックしようってこと
当たり前だが、自分しかアップロードしないならそんなチェックはしなくていい
つかさ、「自分(管理者)しか画像をアップロードしない」のか
それとも「第三者も画像をアップロードする」のか、
まずはそこをハッキリさせるべき
だから回答もめちゃくちゃになる
524:デフォルトの名無しさん
21/07/29 05:06:26.04 Bm0Z0U0B0.net
画像データの中に、ウイルスなどを入れてくるかも知れない
だから、本当に画像形式なのか、全バイト調べる必要がある
525:デフォルトの名無しさん
21/07/29 05:43:31.56 4AVEtKuA0.net
>>514
> 当たり前だが、自分しかアップロードしないならそんなチェックはしなくていい
これ、管理画面からしか画像アップロードを許さないって状況を言ってるんだと思うけど、その場合もちゃんとチェックすべき
他の脆弱性と合わせて管理者権限でアップロードする手口があるので、このへんで手は抜かないほうがいい
526:デフォルトの名無しさん
21/07/29 09:05:26.98 rmmFdFBh0.net
自分で変なファイル置いちゃうかもしれんしな
527:デフォルトの名無しさん
21/07/29 09:20:26.22 zpf7CT600.net
え?お前らSFTPで画像アップロードする時なんかもMIMEタイプのチェックやってるの?
管理者権限奪取されるような状況でMIMEタイプのチェックなんか意味ないだろw
528:デフォルトの名無しさん
21/07/29 09:39:40.25 rmmFdFBh0.net
自分WPしらんから適当言ってる
529:デフォルトの名無しさん
21/07/29 11:01:03.28 CBbl/boe0.net
>>516
>>453に "wp-content/uploads/2021/07/7mgpH3K.jpg"
ってパスがあるからWordPressだよね
WordPressの管理画面からアップロードされたファイルは、
デフォのディレクトリ構成なら最終的には wp-content/uploads/ 以下の「公開ディレクトリ」に置かれる
なのでWordPressへその画像が表示される際も
<img src="URLリンク(example.com)○○.jpg">
という形になる
だったら>>453も単に
<img src="URLリンク(example.com)○○.jpg">
とすれば終わりの話だよw
でも、何がしたいのかよく分からんが、>>453ではわざわざ readfile() とか使ってるw
まぁでも、WordPress管理画面から自分がアップロードし公開ディレクトリに置かれたものなのだから、
readfile() でそれをそのまま出力しても問題はないさ
530:デフォルトの名無しさん
21/07/29 11:02:30.36 CBbl/boe0.net
>>520の話は俺より先に
ID:7+uo32oc0
さんが指摘してるし、>>494さんもそれをフォローしてる
そこへゴチャゴチャ言うのがいるから話がこじれる
453は「HTMLとPHPの役割分担すら理解できてないヤベー人」なわけで、
そんな人へゴチャゴチャ言っても理解できるわけがないのにさ
WPスレへ行けといくら書こうが無駄なのだし、
さっさと問題を解決しスレから居なくなってもらうのがベターかと
531:デフォルトの名無しさん
21/07/29 11:13:22.62 WLwj6dDv0.net
当人は自分宛レスに書かれた内容の三割も理解出来ていなさそう
532:デフォルトの名無しさん
21/07/29 11:17:31.59 HtmB+4p50.net
セキュリティの一般論なんか持ち出すのがいけない
533:デフォルトの名無しさん
21/07/29 12:43:26.88 Bm0Z0U0B0.net
>>520
>だったら >>453 も単に
<img src="URLリンク(example.com)○○.jpg">
とすれば終わりの話
公開ディレクトリなのに、URL で書かないといけないの?
相対パスで書けないの?
534:デフォルトの名無しさん
21/07/29 12:51:10.23 ELCmA1Vb0.net
もう当人居なくなってるだろ
535:デフォルトの名無しさん
21/07/29 13:05:58.67 k08R/6yd0.net
>>521
ID:7+uo32oc0 と >>494 はワッチョイ見れば同一人物ってわかるよ
そして私だ!フォローthx!
あとね
ワッチョイ 532c-MYQi
ID:Bm0Z0U0B0
はRubyガイジなんでスルー推奨
536:デフォルトの名無しさん
21/07/29 13:14:38.56 kQQSV7PN0.net
こいつサイトに載せるバナーイラストをお絵描き板で個スレ立てて練習してるやつと同一かな?
pixivを超えるサイトを作るらしいぞ。だから第三者がアップロードする事に拘ってるんだと思うぞ。
537:デフォルトの名無しさん
21/07/29 15:46:28.70 1U+sby820.net
>>524
WPではアップした画像がWPを通して表示される時は絶対URLで記載される
538:デフォルトの名無しさん
21/07/29 18:37:55.60 CBbl/boe0.net
>>526
たしかに同一人物だ あまりにも口調が違うから気づかなかったw
Rubyガイジの件もサンクス これも気づいてなかった
>>528
だね
フィルタ使って 'attachment_link' や ''wp_get_attachment_url'
に対し絶対URLを相対パスへ変換するフィルタを適用すれば
相対パスに変える事もできるけどね
526が教えてくれたけど、524はRubyガイジみたいだから相手にしなくていいよ
539:デフォルトの名無しさん
21/07/29 18:43:11.67 CBbl/boe0.net
Rubyガイジのレベルは>>483見ればお察しやねw
WordPressスレ見てみたけど、そっちにもRubyガイジが顔出してるしスレがまともに機能してなかった
そりゃこっちに来るわ
540:デフォルトの名無しさん
21/07/30 15:35:03.64 B9OLCwSG0.net
2005年前後にに発行されたPHPの本がたくさんあります
バージョン4や5辺りです
以前はこれらの本を見ながら簡単なことをやったりしていましたがもう完全に忘れています
今、小さな店のweb予約システムをPHPで作りたいと思っています
今はPHPのバージョン7か8でしょうか
新規に本を揃えた方がいいですよね?
おすすめの本、勉強方法などあったら教えてください
スレチであれば誘導お願いします
541:デフォルトの名無しさん
21/07/30 15:41:02.56 c+ndNg5Q0.net
バージョン7.3以上がいいよ
残念ながら4や5はもう完全に化石
542:デフォルトの名無しさん
21/07/30 16:28:29.52 7i2immr80.net
PHPの本は半分くらい攻撃対策がページを占めてる印象
543:デフォルトの名無しさん
21/07/30 17:00:35.86 UtQvC7c20.net
>>531
本が必要なら買い換えるべき(最低限PHP7…できれば7.3~対応のものを )
作りたいものがはっきり決まってるのはとても良い事
とにもかくにも、まずはローカルにまともな開発環境を作ろう
スレの質問を見てると、開発環境を作れていないであろう人の質問は色んな意味でヤバいw
開発環境を作るのははじめは面倒だと思うけど急がば回れ
※533はRubyガイジなので注意
544:デフォルトの名無しさん
21/07/30 19:29:14.24 B9OLCwSG0.net
どうせなら新しい8を勉強した方が効率いいかなと思ったんですけど、今使っているレンタルサーバがまだ8に対応してませんでした
7.3以上ですね、わかりやすそうな本を店頭で探してみます
予約システムの作り方とか似たようなものがないかも探してみよう
ローカルの環境開発、どの本にも書いてあったので昔入れてました
懐かしい
これも入れておきます
いつ完成するかわかりませんが久しぶりで楽しみです
アドバイスありがとうございした
545:デフォルトの名無しさん
21/07/30 19:29:28.58 r27NHL07r.net
img.phpを用意して<img src="output_image.php?id=12123">
header.phpのbodyに<img src="output_image.php?id=12123">と追加したのですが表示されないようです。
output_image.php?idで画像を表示できるのでしょうか?
546:蟻人間
21/07/30 19:34:30.43 GDRR8sIEd.net
確認します。
img.phpというファイルはありますか?
output_image.phpというファイルはありますか?
output_image.php?id=...
に直接アクセスして画像は表示されますか?
547:デフォルトの名無しさん
21/07/30 19:40:25.38 r27NHL07r.net
画像パスがupload.php?item=12123となっているのに対し
<img src="upload.php?id=12123">では取得できない気がするのですが、idから取得できるんでしょうか?
548:デフォルトの名無しさん
21/07/30 19:46:25.67 r27NHL07r.net
output_image.phpというファイルを作って中に<img src="upload.php?id=12123">
header.phpのbodyに<img src="upload.php?id=12123">と記載しても表示されません
直接output_image.php?id=12123にアクセスしても表示されないようです
549:デフォルトの名無しさん
21/07/30 19:58:25.74 r27NHL07r.net
wordpressの場合特殊なのか、idから画像をリサイズして表示するときに<php echo wp_get_attachment_link( 12123 ); ?>で表示されました。
テンプレートタグ/wp get attachment link - WordPress Codex 日本語版
550:デフォルトの名無しさん
21/07/30 19:58:58.68 ScATWV4k0.net
そらそうだろ
551:デフォルトの名無しさん
21/07/30 20:00:25.98 r27NHL07r.net
いずれはwordpressではなくデータベース軸でサイトを立ててみたいので、output_image.php?id=...で
なぜ表示できないのかも知りたいんですが…
552:デフォルトの名無しさん
21/07/30 20:09:34.89 r27NHL07r.net
<php echo '<img src="data:image/jpeg;base64,' . base64_encode(file_get_contents('wp-content/uploads/2021/07/7mgpH3K.jpg')) . '">';?>
だと同じように表示されました。教えていただきありがとうございます。
第三者がアップロードするかどうかでセキュリティを考えるんですね、コメントしかりページナビしかりマイページ機能しかり。
553:蟻人間
21/07/30 20:34:44.87 GDRR8sIEd.net
WordPressはWPの作法に従わないと動かないことがあるよ。裏でCSSやら.htaccessやらJavaScriptやらが動いていて、実際の処理は隠蔽されてるから。
554:デフォルトの名無しさん
21/07/30 21:45:55.50 r27NHL07r.net
>>544
ありがとうございます
555:デフォルトの名無しさん
21/07/30 21:52:20.21 r27NHL07r.net
> 「不正な画像をアップロード」できるのも内部犯に限られることになる
XSS を利用して不正アップロードする手口が徳丸さんのとこで紹介されていました。
URLリンク(www.youtube.com)
WordPress なら外部から似たような攻撃でアップロードされる可能性があるので、プログラムレベルでも適切にアップロード対策をしておくべきだと思います。
このような回答が追加されていたのですが外部からも勝手にアップロードされる危険性はあるのでしょうか?
556:デフォルトの名無しさん
21/07/30 23:36:35.91 1geFHcN20.net
ありますよ。実際に自分はアップローダーからマルウェア仕込まれて
VPSサーバーを総入れ替え舌経験があります。
WordPress宛の攻撃は毎日あるし、できる対策は全てしたほうが良いでしょうね
557:デフォルトの名無しさん
21/07/31 01:52:34.20 v7hkUDSma.net
この動画を見たところ検索フォーム?のXSS対策コードの記載漏れから不正コードを入力されて管理画面に侵入されたみたいですが
要するに第3者が侵入出来るような検索フォームやお問い合わせフォームやコメントフォームやマイページの対策を怠らない事で防げるということですよね?
自分のみがアップロードする場合は該当しないのでしょうか?
558:蟻人間
21/07/31 03:18:27.24 ZYWMYotdd.net
脆弱性は様々な枯れてない技術から発見されている。あのWPだってあちこちからゼロデイ攻撃が見つかっている。WP のテーマやプラグインにも脆弱性がある。度重なる更新や脆弱性に対応できないならWPを使うのをやめた方がいい。
パスワードセキュリティにも危険性がある。パスワードはセキュリティの基本であり、5文字程度の単純なパスワードはパスワードクラッカーで短い時間で突破されてしまう。攻撃者は性能の高い計算能力を持ち、世界中のどこからでも攻撃できる。パスワードは単純なのはダメ、短いのはダメ、憶測できるのはダメ。
あるいはソーシャルハッキングや電波漏れなどの未知のハッキング手法からも攻撃が成立することがある。
こうすれば絶対にハッキングされないという方法はないが、危険性が高いものを避けることは可能。
559:デフォルトの名無しさん
21/07/31 10:31:19.92 fqpnvpaJ0.net
>>548
WordPressの場合、自分は管理画面のURL変えてIP制限入れてますよ。
自分のみがアップロードなら、自分しか使えないIPアドレス制限した方がいいし、
ホスト名とか環境変数とか、そこまでチェックした方が確実だと思います。
ま、一番良いのはWordPress使わないことですけどね
560:デフォルトの名無しさん
21/07/31 10:46:33.80 z/SvtBD30.net
>>550
動画見ろよ
IPの制限無関係に投稿する仕組みの紹介だぞ
561:デフォルトの名無しさん
21/07/31 11:04:47.11 JJoM48pY0.net
わざとセキュリティホール作って、ほらね?危ないでしょ?ってアホかよw
まずWPに同じセキュリティホールあるかの議論が先だろw
無いけどw
562:デフォルトの名無しさん
21/07/31 11:34:42.98 z/SvtBD30.net
>>552
ユーザ投稿のプレビュー箇所とアップロード機能を持つ管理画面って,WordPressで頻繁に見るんだが?
それぞれに問題箇所があるとwebshell置かれて終了!の可能性を指摘する動画だけど、理解できてる?
563:デフォルトの名無しさん
21/07/31 11:37:50.11 BUpo1U8M0.net
プログラムで例えば4×4のマップがあった場合、4という数字は私は格子点数と呼んでいますが、皆さんは何と呼びますか?
564:デフォルトの名無しさん
21/07/31 18:56:05.10 JJoM48pY0.net
>>553
一連の流れでセキュリティの指摘をしたわけではなく、ただ動画を宣伝したかっただけなんですね!
理解できましたw
565:デフォルトの名無しさん
21/08/02 10:21:18.11 JwyUb7gK0.net
>>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
みたいに直接パスを渡すような設計にしてると、あなたのレベルでは危ないよってだけ
566:デフォルトの名無しさん
21/08/02 10:45:18.84 JwyUb7gK0.net
>>546
> 外部からも勝手にアップロードされる危険性はあるのでしょうか?
そりゃ「可能性」はあるよw
人間が作るものにバグ(脆弱性)がないものなんてない
で、>>546にはその動画の意味は理解できる?
理解できてないよね
理解できてないのに、何をどうやって「対策」するの?w
その動画に指摘されている脆弱性は、「プラグインのXSS脆弱性を悪用した攻撃」なので、
対策といったところで、あなたのレベルでできるのは「WP本体やプラグインは常に最新版を使う」事ぐらいだよ?
※その動画の攻撃例は管理画面にIP制限なんかしても無駄ですw
結局、「画像は546本人しかアップロードしない」んだよね?
だったら、「アップロードした画像には問題ない」事を前提に話を進めようよ
546は、「HTMLやPHPの基礎がないままWordPressから始めた」のがいけない
基礎がガタガタなの
そんな人が細かい事を気にしたところで、話は前に進まんよ
567:デフォルトの名無しさん
21/08/02 10:50:01.92 JwyUb7gK0.net
>>552
>>555
546の動画の例は、WordPressでECサイトを構築する際の「超定番」プラグインEC-CUBEのXSS脆弱性を悪用したもので、
「実際に悪用事例も出た」ものだけどね…
そんな事すら理解できないなら、横からしゃしゃり出てこずに黙っておけw
568:デフォルトの名無しさん
21/08/02 10:59:23.86 JwyUb7gK0.net
>>546
>>557に補足しとくと、WordPress本体・プラグイン・テーマファイルの致命的な脆弱性を悪用され、
WordPress権限から自由にファイルのアップロード・編集が可能になった場合、
サーバー内の画像をPHP経由で出力する際のセキュリティ(笑)なんか、いくら考えても無駄ですw
その点については>>518さんが指摘している通り
例えるなら、「ヘルメットを被っていたら快速電車にダイブしても大丈夫だよね?」って聞いてるみたいもんw
だから、自分しかアップロードしない画像ファイルは安全であるという前提で、話を進めようよ…いや頼むからそうしてくれw
てかRSSの時もそうだけど、たったこんだけの事にどんだけ時間かけてるのよw
569:デフォルトの名無しさん
21/08/02 11:36:09.87 CDsmjzwf0.net
いいから構うやつもまとめてWPスレ行って帰ってくるなよ
570:デフォルトの名無しさん
21/08/02 11:55:16.38 jY8DN4600.net
自演ですし
571:デフォルトの名無しさん
21/08/02 14:06:37.03 LY8fDkppd.net
最初から自分しかアップロードしない前提なのにどんだけレスしたら気が済むの、このセキュリティガイジ
572:デフォルトの名無しさん
21/08/02 14:39:06.84 nA0UljqA0.net
セキュリティガイジは別人だろ
ガイジなのは質問者、それに対しセキュリティ全波の話を持ち出してる人、煽るしか能のない人
573:蟻人間
21/08/02 14:51:48.05 LkFRX9kvd.net
>>554
普通にサイズでよくね?
574:デフォルトの名無しさん
21/08/04 15:31:27.53 QhYrANy70.net
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,...)で上書きされてしまいました。
575:デフォルトの名無しさん
21/08/04 15:33:03.22 QhYrANy70.net
$s=Array(a2,b2,c2,d2,...); です。
576:デフォルトの名無しさん
21/08/04 15:44:34.90 QhYrANy70.net
foreach とか for とか使うしかないでしょうか?
577:565-567
21/08/04 16:12:58.96 QhYrANy70.net
foreach とか for で、解決しました。
578:デフォルトの名無しさん
21/08/04 16:36:34.91 BE8GLseK0.net
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]
579:デフォルトの名無しさん
21/08/04 19:56:28.27 JeeF5Fq/0.net
ゴミのような流れに草w
580:デフォルトの名無しさん
21/08/04 20:48:03.21 nRiwNpi/0.net
相変わらずRubyガイジがPHPのスレを荒らしに来るw
581:デフォルトの名無しさん
21/08/05 00:28:51.82 F8+XC2Dv0.net
PHPで接続を明示的に切る方法ってある?
本処理後、後処理としてDBの整理を行うのだが、
本処理と後処理が同程度の重さになるので、可能であればTCP接続を明示的に切りたい。
そうすればブラウザが確実に処理を始めるので、クライアント側の体感速度が上がることを期待している。
とりあえずfush()はした。出力バッファは使ってないので、ob_xxxxはやってない。
他に何かある?
582:デフォルトの名無しさん
21/08/05 00:42:12.36 N2Iw/qnR0.net
意味不明
583:デフォルトの名無しさん
21/08/05 00:45:52.55 JVVnzoun0.net
DBがクローズされているなら、PHPへのアクセスは関係ないんじゃ?
というか、設計がおかしくない?
584:デフォルトの名無しさん
21/08/05 01:01:42.06 F8+XC2Dv0.net
ああすまん、書き方が悪かった。
こちらはPHPの初心者なので、そちらが想定しているような高度なことはしていない。
「TCP接続」をDBとの接続だと想定したのだと思うが、こちらはSQLiteだ。
クライアント(ブラウザ)からのアクセスで、SQLiteを操作してhttp出力を行う。
その後、ユーザーに対しての追加の出力はないので、ここでユーザーとのTCP接続(=http接続)を切りたい。
(確かGoかNodeだとこれが出来た)
さらにその後、後処理を行うのだが、これが本処理と同じ程度に重い。
そしてexitで終了する。
ブラウザがexitにてTCP接続が切れてからパースを開始すると、体感2倍重くなってしまう。
flushでデータを全部送りきることは出来るが、
ブラウザはパースしないと全部来たことが分からないので、fulsh後にすぐ動くことは期待出来ない。
http接続が切れれば、それ以上のデータはないと確定するので、パースを確実に開始する。
だからこれを早めたい。
何か明示的に出来る方法ってある?
585:デフォルトの名無しさん
21/08/05 01:28:56.20 qQkilq/Na.net
404のっとファウンドなどのエラーページを自作しる
586:デフォルトの名無しさん
21/08/05 01:43:30.62 JVVnzoun0.net
>>575
クライアントに応答を返すPHPは、応答を返したら、
後処理を行うPHPを起動し、自身はその終了を待たずexitする
587:デフォルトの名無しさん
21/08/05 03:48:16.16 9Ap3lZssd.net
>>575
~ここまで本処理
// 結果を待たずに次の行へ進む非同期コマンド
exec('php 後処理.php > /dev/null &');
exit;
もし後処理.phpに何かパラメーターを渡したい場合は
exec('php 後処理.php パラ1 パラ2 パラ3 > /dev/null &');
受け取る側の「後処理.php」の中で$argvに配列として格納されてる
588:デフォルトの名無しさん
21/08/05 06:36:47.33 F8+XC2Dv0.net
>>577-578
なるほど、マルチプロセスだから根本的に考え方が違うんだな。ありがとう。
(だとすると、途中で明示的に接続を切れたのはNodeか?)
マニュアルページが完全にstackoverflow並のtips集になっていることにも驚いた。
URLリンク(www.php.net)
(やたらWindowsについての言及が多いが、意外にIIS上で動かされてるのか?)
見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい。
そしていきなり環境依存コードを注入するというのはプログラマとしては頂けない。
ここら辺のノリがPHPの嫌いなところだ。
プログラマ向けに作ってないから、プログラマの常識でやってると変に嵌ったり、見落としたりする。
とはいえ、便利なのは事実だし、所詮スクリプトだと割り切るのも必要なのだろうけど。
とりあえずの問題は、開発環境がローカルホストのXAMPP(つまりwindows)で、
実行環境がレンタルサーバー(つまりLinux)ってところだが。
まあ、いずれにしてもありがとう。
この質問には確かにexecが正解のように見える。
589:デフォルトの名無しさん
21/08/05 06:50:31.72 Sb1zsMiv0.net
>>579
ローカルコマンド叩くのに環境依存がない言語なんてあるわけ無いだろ
嫌いになるのは勝手だけど、アホな理由で嫌いになるなよ
590:デフォルトの名無しさん
21/08/05 07:24:02.52 F8+XC2Dv0.net
>>580
だから発想が『プログラマとしては』おかしいんだよ。
少なくともNodeでもGoでも、環境依存無しのコードを記述出来る。
PHPでは出来ないのに、それでも良しとされてる。
そういうところが嫌いなんだよ。
覚えだが、上記の通り、明示的に切れたのは多分Nodeだ。
これはそもそもシングルスレッドだから、PHPのようにスクリプト終了=接続終了とは出来ないから当たり前だが。
そしてGoなら内部プロセス(goroutine)で、となる。もちろん環境とは依存しない。
PHPでも、session_write_closeと同様に、例えば write_close() というコマンドを作り、
そこで接続終了、それ以降の出力は全部捨てられます、とすれば、全く問題なく環境依存無しに出来る。
だからプログラマが主導して開発をしていればとっくにそうなってるはずなのに、
現実としてそうなってないから、色々無駄に戸惑う。だから好きにはなれない。
何だかんだで意外とNodeが蔓延っているのは、ここら辺の理由もある。
今回の使途ならJSのsetTimeoutでの実装の方がプログラムとしては断然美しくフィットする。
PHPで書くと、こんなコードにしかならないのかよ、と本当に愕然としてしまう。
腕が良くてもまともなコードを書けないんだよ。
それは上記の通り、PHPの開発の方向性が間違ってるからだ。
(とはいえ例の三項演算子についてはPHP8で修正されてるようだが)
まあとにかくだ、プログラマとしては禁忌に近い「環境依存コードの注入」を普通にやらせるのは異常だし、
そんな状況が放置されてること自体も異常なんだよ。
だからプログラマがPHPを好きになることはないと思うよ。
PHPを好きな奴は、他言語をまともに使えない奴だけだと思う。
591:デフォルトの名無しさん
21/08/05 07:52:13.16 Sb1zsMiv0.net
>>581
んなアホなことやりたいなら、phpでWebサーバ書けばいい
メジャーなのはないけど、ふつうにGitHubにも転がってる
そもそもフィトするもんが別にあるんだったらそっち使うのがエンジニアだぞ
592:デフォルトの名無しさん
21/08/05 08:23:37.05 F8+XC2Dv0.net
>>582
だからその発想がおかしいんだよ。フィットしてるなんて到底言えない。
PHPは「できればいい」「動けばいい」で済ませる初心者~中級者の感覚に合ってる。
だからその層には絶大な支持を受けるが、上級者には支持されない。
実際、PHPが「プログラミング言語として」素晴らしいなんて言ってる上級者は世界中でも誰一人もいないだろ。
connection_closeとかを用意すればいいだけなのに、
外部コマンドで自己ファイルをバックグラウンドプロセスとして起動する、なんて解は、頭がおかしいレベルだ。
自宅から歩いて3秒の場所に自動車で行く、に近い。
以前は「XAMPPなんて捨てろ。どうせ本番環境では動かないし、XAMPPで開発する意味はない」とか言ってる奴も居たが、
実際はこの辺の、それが環境依存コードだと理解出来ないレベルの初心者が勝手にやらかしまくってるだけだと思うよ。
そしてその意味も分からず、「XAMPPなんて捨てろ」だけ真に受けた初心者が、
例えば>>394みたいに、右も左も分からないのにリモート環境で開発する、みたいな、余計におかしな事をやらかす要因となってる。
そしてその根元は、PHP自体に落とし穴がありまくるからだ。
なんでそこで環境依存コードを注入するしか解がないの?というね。
が、まあ、parallelとかphtとかはここら辺の対策用なのかな?
それにしても connection_close とかの単純な解の方が断然いいが。
593:デフォルトの名無しさん
21/08/05 08:42:00.19 Sb1zsMiv0.net
>>583
使ってる方からするとWebサーバレベルのハンドリングを意識しなくて良いレベルで抽象化されていることが使いやすいし、不足箇所は最近だとフレームワークが補完してくれている
ところで、支持してない上級者って何?
サーバサイド言語として、phpが必要ないって言っている人がいる?
普通に用途が合えばphp選択するのがエンジニアだと思うけど?
594:デフォルトの名無しさん
21/08/05 08:50:37.83 F8+XC2Dv0.net
というか、思うにこれはPHPだと「出力用」と「DB整理用」のphpを別にして、
「DB整理用」は別にcronで叩く、というのが一般解なのかな?
これ自体も外部依存しているのでよい解ではないが、
ここまで蔓延っているPHPがこの辺の「普通にやる処理」を上手く記述出来ないのもあり得ない。
だとすると、現実的にはこの解なのだろう。
とはいえ、最安のレンタルサーバーだとcronは使えないし、
纏めて整理する時に命中したらその時だけ奇妙に遅くなるわけで、
出来ればマメに整理しておきたいのだが。
595:デフォルトの名無しさん
21/08/05 08:55:46.01 yR6UN7xmd.net
>>583
~ここまで本処理
//接続が切れてもスクリプトを実行させる
ignore_user_abort(true);
// メッセージ表示ページへ飛ばす
header('Location: 本処理完了しました.html');
flush();
ここから後処理~
環境依存使わないなら、こんなんでどうですか?
596:デフォルトの名無しさん
21/08/05 09:02:59.57 e8dh7hYU0.net
>>583
ソースもないのに誰一人いないとか断言しちゃうから、だらだら長いだけで説得力のない空っぽな主張に見えちゃうんだぞ
お前さんの主張を支持する上級者は誰一人いないw
597:デフォルトの名無しさん
21/08/05 09:24:21.23 F8+XC2Dv0.net
>>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でも書く羽目にはなりそうなのだが。
599:デフォルトの名無しさん
21/08/05 09:27:08.25 Sb1zsMiv0.net
>>588
お前のやりたいことは、Jobのキュー登録だろ
普通にあるわ
なんで、connection_close なり write_close にこだわらないといけないんだ?
600:デフォルトの名無しさん
21/08/05 09:33:30.26 F8+XC2Dv0.net
>>586
それは動かないだろ。
本処理で既にheaderとbodyは出力してる。
だからその後に header('Location')はアウトだ。
そして仮に動いたとしても、いちいちLocationで飛ばすってのも余計におかしい。
今現在の、結果的にブラウザが反応しないかも、その場合は通常より倍の時間がかかります、の方がまだマシだ。
ここらへんの、ちゃんとした解がないから余計なことで遠回りにやる、ってのもPHP界隈が嫌いな理由だ。
そういうのは初心者から中級者にクラスアップしてきた連中が俺ツエー的にやりたがるのだけど、
そういうのが多すぎて、PHP界隈はウザイ。
ただ逆に言えば、そういうことをしたいレベルの奴にとっては「俺カッケー」が出来るから、大受けする。
だからPHPを嫌いな人は多いが、廃れることもないだろうね。新規参入者はいくらでもいるから。
ある意味初心者ホイホイな面はある。
(ただしプログラマになる為の教育としてはかなり最悪だが)
601:デフォルトの名無しさん
21/08/05 09:37:34.01 F8+XC2Dv0.net
>>589
あるならそれを教えてくれ。PHP.net上のurlだけでいいから。
jobで出てくるのは The GearmanClient class だけだが、さらっと見た限りなんか違うっぽいし。
というかね、PHP.netは本当に出来がいい。
あれだけは他言語も見習うべきだよ。
602:デフォルトの名無しさん
21/08/05 09:41:54.34 Sb1zsMiv0.net
>>591
ぐぐればLaravelが出てくるだろ
素のphpでやりたきゃ
スレリンク(php板)
なら別海が出てくるかもな
603:デフォルトの名無しさん
21/08/05 10:14:26.57 F8+XC2Dv0.net
>>592
LaravelはPHPで書かれてるのだから、素のPHPで出来ないことが出来るはずがないだろ。
と思ってるのだが、この認識が間違ってるのか?
まあ、導入する予定はないが、見てみるよ。
Webプログラミング板のスレはさらっと読んでみたが、ぶっちゃけここと大差ないような。
まあ、ここで一通り終了したら向こうでも聞いてみるかも。
なお、俺はプログラミングの初心者ではないが、PHPに関しては初心者だ。
一通りも知らないからPHP.netをいちいち引きながら書いてる。
それでいちいち、「他言語ならこうだけど、PHPならどう書くの?」になるわけ。
604:デフォルトの名無しさん
21/08/05 10:15:03.38 jTl1oJKL0.net
要は「非同期処理すればいいだけ」の話なのだが、ID:F8+XC2Dv0 はLinuxができない人?
だってさ、Linuxではコマンドの最後に「&」をつけるとバックグランドジョブになるのだから、
「言語を問わず」 "コマンド > /dev/null &" ってすればいいかな?って発想になるもん
で、開発環境はDockerやVagrantで作ればいい
PHPなんて良くも悪くも適当に書けば適当に動いてくれる言語なのだから、別にそれでいいじゃんw
PHPがどういう思想から生まれた言語なのかは以下のインタービュー記事を読むといい
URLリンク(gihyo.jp)
例えばNode.jsはシングルスレッド・シングルプロセスなのだから、入出力関連の処理を非同期で行ったりと設計思想からPHPとはまるで違う
1つの言語に固執せず適材適所で言語を使い分けるのがプログラマのなのだから、お前みたいな書き方をしてたら「だったらPHP以外の言語でやれば?」って思われるだけだw
ちなみにPHP8.1以降では「Fibers」が実装されて、非同期処理を綺麗に書けるようにもなるんだけどね
URLリンク(php.watch)
PHPってここら辺がすごい柔軟 良いと思った仕様はどんどん取り入れる
とにかく、グダグダグダグダとうるせぇんだよお前はw
自分の頭が固いだけなのに仕事ができると「
605:勘違いしている自称上級プログラマ様(笑)」ってのが、現場で一番タチが悪い人間なのは間違いない 固くするのはチンコだけにしておこうな?
606:デフォルトの名無しさん
21/08/05 10:21:45.83 F8+XC2Dv0.net
>>592
あ、すまん。訂正。
laravelをさらっと見たが、dockerで導入してるところからして、俺
が想定していたJS的なフレームワークとは違い、これは実行環境形のフレームワークだな。
Job管理もあるのだろう。これはこれから読む。(とはいえ時間はかかるが)
607:デフォルトの名無しさん
21/08/05 10:24:19.91 jTl1oJKL0.net
Rubyガイジといい、なんでガイジ(正確にはガイオヤジかw)ばかり湧くんだろうなぁ
夏だからかw
608:デフォルトの名無しさん
21/08/05 10:24:44.74 F8+XC2Dv0.net
>>594
> 「言語を問わず」 "コマンド > /dev/null &" ってすればいいかな?って発想になるもん
理解してないのお前だ。俺は「言語を問わず」ではなく、「実行環境依存」なのを問題視してる。
まあお前レベルの奴がグダグダ言ってくるところがPHP界隈の嫌いなところだよマジで。
609:デフォルトの名無しさん
21/08/05 10:33:36.93 5AKWeG2e0.net
このガイジLaravelスレでバカにされているガイジだろw
無能で仕事もしたことが無いレベルw
610:デフォルトの名無しさん
21/08/05 10:49:57.76 jTl1oJKL0.net
>>597
だから「開発環境はDockerやVagrantで作ればいい」と書いた
とにかく質問は解決しただろ?
だったらPHPスレに居座る必要もない
WPガイジ(こいつも相当頭が固いw)といい、俺はサッサと質問を解決しガイジにお帰り頂きたいだけだ
繰り返すが固いのはチンコだけにしとけw それといももうチンコも勃たない歳か?w
611:デフォルトの名無しさん
21/08/05 10:51:05.04 F8+XC2Dv0.net
>>594
ラスマスの記事を読んだ。まあ想定どおり。
これはWeb上のオープンソース開発、つまりJSやRustも同じ事。
それらに比べてPHPはポンコツ過ぎ。
ちなみにfiberが欲しいわけではない。それも「歩いて3秒の場所に自転車で行く」に近い。
俺がやりたいのは、 fclose(/dev/stdout) だよ。
ただまあ、PHPがラスマスの言うとおり勝手に開発された機能の団子なのなら、
俺が勝手にCのコード書いて送れば採用されるのかな?
精々10行程度で実装出来るから送ってみてもいいんだけどさ。
あとそれ、「PHPは柔軟でスゴイ!」ってのも、
最近よくいる「俺が使ってる言語スゲー=俺スゲー」系の馬鹿だから止めとけ。
他言語で既に使えてる便利機能が今更採用されたところでスゲーと思えるのは明らかに信者でしかない。
第三者なら「ようやくかよ」でしかない。
612:デフォルトの名無しさん
21/08/05 10:57:59.07 kPeKr//s0.net
ID:F8+XC2Dv0
質問に非同期って単語が出てない時点でお察しですな
PHPへの噛みつき方もテンプレ過ぎて10年前にタイムスリップしたかと思ったよ
加齢臭のするオッサンだろうな
613:デフォルトの名無しさん
21/08/05 11:01:32.69 F8+XC2Dv0.net
>>599
> だから「開発環境はDockerやVagrantで作ればいい」と書いた
だからその解も本来は間違ってるんだよ。それは、
実行環境依存のコードしか書けないから、それぞれの実行環境を毎回用意してそこで開発しろ
なわけだろ。それはJavaが目指した「Write once, run anywhere」でも全然無いだろ。
まあ実際はともかく、そもそもプログラミング言語はOS上のレイヤだけで動いているのなら、こうあるべきなんだよ。
そしてJSとか他言語はそうなってる。
PHPはその努力もしてないから駄目なんだよ。
その、「間違った解を正解として誇らしげにドヤる」のも、
典型的な「初心者から中級者にアップしたての馬鹿」がやることで、おまえはまさにそれだよ。
実際PHP界隈はそういうのが多数派で、それが問題視されることはないのだろうけど、それ自体が問題だよ。
それでは生産性がまるで上がらない。まあこれも理解出来ないのだろうけどさ。
614:デフォルトの名無しさん
21/08/05 11:04:37.37 /R94gyIjd.net
>>590
あたしは575の提案をして、環境依存に難色を示されたので、代替提案をしただけなのに、おかしいだろ�
615:ニか、ダメだとか、あっちのほうがマシだとか、なんでそんなに上からなんですか笑 既にbody出力済みという前提も無かったし。 なるほど、でもできればリダイレクトはしたくないです。とだけ返事すればいいものを。 リダイレクトNGなら、更に別の提案もあるんだけど、萎えましたです。
616:デフォルトの名無しさん
21/08/05 11:05:12.89 jTl1oJKL0.net
俺、PHPがすげぇなんて一言も書いてないけどw
だからこそ「PHPなんて良くも悪くも適当に書けば適当に動いてくれる言語」だと書いたし
ラスマスのインタービュー記事を紹介したのだが、このガイオヤジはドヤ顔で何を勘違いしてるのだろうw
例えば>>579で
> 見た目同期コマンドだが、出力を捨てれば確かにバックグランウンドで動くらしい
なーんて書いちゃってるから…ね
「&」ついてるのに、これのどこか同期コマンドなんだというツッコミw
質問は解決してるんだからもう用はないだろ?
あとはチラシの裏にでも書いとけw
617:デフォルトの名無しさん
21/08/05 11:07:21.49 jTl1oJKL0.net
>>601
このガイオヤジ、1人で勘違いして「信者」なんて言っちゃってるしね
この手のヤバい奴は昔から居たから、PHP長くやってると慣れるよねw
618:デフォルトの名無しさん
21/08/05 11:09:50.52 F8+XC2Dv0.net
>>601
非同期知ってる俺カッケー、か。
俺がやりたいのは非同期ではないんだよ。
ここら辺なんだよ、PHPerは、(JSerもだからWeb系全般だと思うが)
本人が実力を過大評価しすぎてていちいちウザイ。
今回は同期の fclose(/dev/stdout) がベストで、この単純なことが出来ないのは奇妙だと思って聞いてる。
他の言語/実行環境なら最初に用意される物であって、存在しないのはほぼありえない。
だから俺の勘違いか見落としだと思って聞いてるわけだ。
そしてこんな基本的な物がないのに非同期とかfiberとか、整備の順番を完全に間違ってるんだよ。
とはいえlaravelはどうやら俺の想定していたものとは違うので、そこにあることには期待している。
619:デフォルトの名無しさん
21/08/05 11:14:45.50 F8+XC2Dv0.net
>>603
> 既にbody出力済みという前提も無かったし。
いやそれは普通に読めば分かるだろ。
むしろ、接続を切ろうとしてるのに、なんでその後に何か出せると思ったの?
もしかして、本処理ではheaderだけしか出力してないと思った?
それはレアケース(常に403とか?)であって、その仮定の方が無理あるだろ。
620:デフォルトの名無しさん
21/08/05 11:18:11.81 kPeKr//s0.net
簡単な非同期処理で解決するのになに言ってるのこの人
顔真っ赤すぎて全レスし始めたし今日1日で何レスするのか見ものだな
PHPに親でも殺されたのかしら?
621:デフォルトの名無しさん
21/08/05 11:23:41.31 xD0lMLd30.net
スレが伸びてると思ったら大物が登場してるな
面白いから魚拓取って他にも晒しとくわ
622:デフォルトの名無しさん
21/08/05 11:25:02.26 F8+XC2Dv0.net
>>604
exec自体は同期コマンドなんだよ。
そしてその書き方自体も他言語が出来るプログラマにとっては気に入らない。
exec("cmd"); // 同期
exec("cmd > /dev/null &"); // PHPではこれで非同期、しかし書き方がイマイチ
exec("cmd") > /dev/null; // これならまだマシ
exec_async("cmd"); // 本来はこうあるべき
まあここら辺もPHPが嫌われる理由だよ。他言語と揃ってないからいちいち文法で躓く。
だから他言語で慣らした連中に取っては無駄に参入障壁となっていて、
結果的にPHPはPHP育ちの初心者パラダイスになってる。
そりゃ居心地はいいんだろうけど、良いコードに遭遇出来ないのは上達の妨げにしかならないことに本人達も気づけない。
なんだかね。
実際お前ら、上の4つ、何が問題か分からないだろ。
623:デフォルトの名無しさん
21/08/05 11:26:44.63 F8+XC2Dv0.net
>>608-609
> 簡単な非同期処理で解決するのになに言ってるのこの人
そう思えちゃうところがPHPerだよ。
まあ他のプログラミングが出来る連中にも聞いてみるんだね。
624:デフォルトの名無しさん
21/08/05 11:31:07.06 xWv0yV5l0.net
自分も、そこまでLinuxには詳しくないが、
今時、2〜3台もパソコンがあれば、社内Lanで繋ぎませんか?
625:デフォルトの名無しさん
21/08/05 11:34:43.32 Lk6xwBBud.net
>>607
いや、あなたの常識なんて知らないわよ笑
普通にアクセスされただけで(またはgetパラメーター付きとか)処理が走って、本処理が終わるまで何も出力しないように書き直して工夫することだってできる可能性もあるわけだし。
(もうここは掘り下げなくていいです)
てか、あなたが返事すべきはそこじゃないんだけど~
626:デフォルトの名無しさん
21/08/05 11:43:44.22 F8+XC2Dv0.net
>>612
開発環境の再構築に乗り気ではないのは、それは手段が目的化する恐れがあるから。
いろいろ分かってない状況(=今の俺)の場合は、環境構築こそが最大のネックで、
コード自体は書けば書けるものでしかないんだよ。
そして既にXAMPP+NetBeansでブレークポイントも当たるし、xhprofだっけ?も導入してるからそれでやってる。
(ただし環境を構築したのは4年前だから、君らからするとこれは古すぎかもしれないが)
新しい開発環境も、作ってしまえば結果的には楽勝なのかもしれないが、あっさり出来る自信がないんだ。
ただまあ、今回の話は、環境構築すればいいって物ではないのだけどね。
それって、例えば鯖を変えたり、あるいはGitHubで公開した後に「○○ですけど動きません」ってのに
いちいち対応するのか?って話になるだろ。
そもそも環境依存のコードを書くべきではない
ってのが大正義なのに、それを認めずあれこれ無駄に言ってくるからおかしな事になる。
お前らは何をすべきなのか本質を理解するべきだよ。
627:デフォルトの名無しさん
21/08/05 11:44:41.71 kPeKr//s0.net
>>610
なるほど
Linux系のOSでコマンドの後に&を付けるとバックで動くって事を知らなかったのね
それを必死に誤魔化してるだけかw
628:デフォルトの名無しさん
21/08/05 11:46:58.60 F8+XC2Dv0.net
>>613
> 本処理が終わるまで何も出力しないように書き直して工夫することだってできる可能性もあるわけだし
本処理ではbodyを出力する場合もあるし、403等でheaderだけで終わる場合もある。
本処理終了後は出力はない。だからそこで切りたい。
というわけだがこれでいいか?
いずれにしてLocationでリダイレクトは度頭でやらないといけないから君の間違いだとは思うけど。
> てか、あなたが返事すべきはそこじゃないんだけど~
どこよ?
629:デフォルトの名無しさん
21/08/05 11:48:24.23 F8+XC2Dv0.net
>>615
そう思うのは、君の周りにはその程度の人しか居ないからだね。君も含めて。
630:デフォルトの名無しさん
21/08/05 11:49:26.67 cuxOZbzu0.net
朝の6:30から20レスww
631:デフォルトの名無しさん
21/08/05 12:00:42.44 F8+XC2Dv0.net
>>613
616訂正。
> Locationでリダイレクトは度頭でやらないといけない
と思ったが、もしかしてリダイレクトが間に合わなかったケースを意図的に利用して接続を切ろうって事か?
それは解としてはだいぶ酷い。そういうコードを書くと数年後には意味不明で読めなくなる。
あとその場合は結局ブラウザ上でパースされた時に転送(=接続終了する)だけであって、
結局今の実装(ブラウザのパースタイミング次第)と同じでしかないし、改善しないと思うが。
632:デフォルトの名無しさん
21/08/05 12:07:25.00 bqGeTZjz0.net
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のくろかわこうへいのサロンに入って勉強してる
633:デフォルトの名無しさん
21/08/05 12:14:58.24 dqIKXfcM0.net
スクレイピングしたいんですけど何を勉強すればいいですか
不正アクセスに問われたりしないでしょうか?
セキュリティ対策はどのようなことに注意すればよいでしょうか?
634:デフォルトの名無しさん
21/08/05 12:18:19.70 Sb1zsMiv0.net
>>621
不正アクセス以外にも法的に問われるケースは存在します
まず法的な問題の解決方法を学ぶと良いです
まぁ、いずれにしても初心者のすることじゃないです
635:デフォルトの名無しさん
21/08/05 12:19:31.36 jTl1oJKL0.net
まだやってて草w
で、この朝6時から20レス以上してるガイオヤジは、なんでPHPにこだわってるの?
> マルチプロセスだから根本的に考え方が違うんだな
> 質問には確かにexecが正解のように見える
と自分で書きながらもPHPではどうしても納得いかないんでしょ?
だったらPHP以外でやればいい
質問はこれで綺麗サッパリ解決したし、あとはチラシの裏へどうぞ
ちなみに>>610については、例えばPythonでsubprocess.run()を使っても一緒の話なわけで、
「PHPだから」という話ではない
それを非同期で実行したいならPythonならsubprocess.Popen()を使うし
PHPならpopen()やproc_open()を使う
636:620
21/08/05 12:19:59.18 bqGeTZjz0.net
PHP はレンタルサーバー用言語
Ruby on Rails は、プロ用フレームワーク。
WSL2 Linux, Heroku, AWS
だから、PHPでは転職できないから、KENTA のサロンでは勧めない
Node.js, Django も、Railsのシェアを崩せなかった。
募集がなく転職できないから、サロンでは勧めない
唯一の時給1万円コースの道筋は、Ruby → Go だけ
企業が欲しい人材は、AWS Solution Architect。
AWS でシステム構築運用できる人
637:デフォルトの名無しさん
21/08/05 12:28:51.37 6TA++zayd.net
>>616
> 本処理ではbodyを出力する場合もあるし、403等でheaderだけで終わる場合もある。
だから、今の仕様はそうなのかも知れませんけど、その本処理はユーザーがアクセスしただけで処理が出来るなら本処理が終わるまで何も出力しないように書き換えればいいんだし、何かユーザーの入力に応じて処理するのなら、postで再アクセスさせて本処理が終わるまでなにも出力しないように書けないんですか?
まあいずれにせよ、リダイレクトはそもそも論外のようなので不毛な話しではありますが。
638:620
21/08/05 12:28:59.36 bqGeTZjz0.net
食べチョクみたいな若い女の子が、Ruby on Rails で1人で始めたサイトでも、
求人募集は、AWS に詳しい人
システム構築運用できる人
コロナで取引量が30倍になった。
こういうのは言語・アプリで解決できる問題じゃない
だから、むしろプログラマーよりも、LinuC などのLinux の資格保持者とか、
AWS Solution Architect が必要
今は、プログラミング言語よりも先に、
Linux コマンド・シェルスクリプト、Docker Compose, VSCode などが来る
639:デフォルトの名無しさん
21/08/05 12:30:20.75 F8+XC2Dv0.net
>>623
まあforkしたいわけでもないんだけどね。それも事を大きくしすぎ。
Pythonを選択しないのは、俺が知らないからだね。
ただしレンタルサーバーでも使えるから、選択肢としてはありなんだろうけど、
言っちゃ悪いがPython使う理由なんてPHP以上にないでしょ。
640:デフォルトの名無しさん
21/08/05 12:35:56.18 F8+XC2Dv0.net
>>625
一応聞くが、headerはbodyの後には出力出来ないってのを知ってるか?
ちなみに本処理はgetであって、postではない。
そして304ならheaderのみ、200ならheader+bodyの、至極普通のget処理だ。
その200、つまりheader+bodyを送信後に再びLocation"header"を出すのは不可能だが、それは理解してるか?
641:デフォルトの名無しさん
21/08/05 12:37:33.28 jTl1oJKL0.net
>>627
Python使えなんて一言も書いてないんだがw
PHPのexec()の例は別の言語でも一緒って例を示しただけ
ほんと頭が固いというか思い込みが激しいというか…
現場に居たら陰口叩かれまてるタイプだわお前はw
642:デフォルトの名無しさん
21/08/05 12:44:05.08 F8+XC2Dv0.net
>>629
なら、PythonもPHPと同程度に文法が糞だ、というだけだろ。
実際、Pythonを「プログラミング言語として」褒めてる奴も少ないだろ。
みんなが使ってるから使う、というのが大半であって。
643:デフォルトの名無しさん
21/08/05 12:44:10.37 jTl1oJKL0.net
ちなみに、ものすごく低レベルな方法だがこんなやり方もある
> SQLiteを操作してhttp出力
の中に
<img src="重い処理をするPHP" width="1" height="1">
と書くだけw
これならcronが使えない環境でも簡単にできる
これで解決したら笑う
644:デフォルトの名無しさん
21/08/05 12:48:28.04 F8+XC2Dv0.net
>>631
それは面白い発想だが、べき論で言えば反則だろうよ。
ただし、確かに技術的には解決する。
645:デフォルトの名無しさん
21/08/05 12:58:15.10 F8+XC2Dv0.net
>>631
いや待て、今回はhtmlではなかったので駄目だった。
主にjsonとxmlだ。
まあしかし、発想自体は面白いよ。
ただ、なんか余計なアクセスが出てるように見えるからそれで実装することはないが。
今現在の実装だと、「運が悪く、ブラウザも怠慢していれば、倍かかる時があります」であって、
そんなに問題な実装でもないし、実際htmlを出すのは最初だけ(SPA)にしようとしてるので、それでは解決出来ない。
646:デフォルトの名無しさん
21/08/05 13:00:46.26 jTl1oJKL0.net
>>632
こんなもんは、例えば何かしらのトラッキングや、メルマガで配信するHTMLメールで開封率を調べる時等で
当たり前に使われてる方法だけどねぇ…
でも、元の質問は>>575だろ?
これ>>631で解決するよな?w
でもどうせ気に食わないんだろ? だったらPHPなんかやめてサッサと他の言語でやればいい
なんでこのスレに居るわけ? サッサと出ていけよw
647:デフォルトの名無しさん
21/08/05 13:06:35.62 jTl1oJKL0.net
>>633
また後付でなんか出てきたw
>>575はとにかく、重たい後処理をするPHPを非同期で起動させればいいだけ
それがexec()だろうがproc_open()だろうが<img>タグだろうが同じだ
それが我慢ならんのなら、それ以上PHPにこだわる必要性は何もない
まぁお前みたいな「面倒くさい人」はどこにでもいるよw
もうええでしょ
648:デフォルトの名無しさん
21/08/05 13:08:11.92 F8+XC2Dv0.net
>>634
ああ、Webビーコンと大昔に呼ばれてて、その結果htmlメールは悪だとされた奴だな。
今でも普通に使ってるのか?それはそれで問題だとは思うが。
少なくとも、俺は>>631で出来る状況であってもそれは使わない。今現在の実装の方がマシ。
649:デフォルトの名無しさん
21/08/05 13:08:51.75 xWv0yV5l0.net
pythonというのは、
等加速度直線運動の3公式で、多くの問題を解決するようなもので、
これをできれば、スピードアップするらしいが。
高度なことをできる部品はある。
650:デフォルトの名無しさん
21/08/05 13:26:51.61 F8+XC2Dv0.net
>>635
ちなみに
> 重たい後処理をするPHPを非同期で起動させればいいだけ
これが間違い。
単に、出力を閉じる connection_close みたいな関数を呼んでユーザーとの接続を終了させ、
そのあとそのプロセスが引き続き後処理をすれば良いだけだし、これが一番軽い実装だ。
そして他言語だとこれは出来るのに、何故この基本的な操作ができないのだ?という話。
非同期=軽いとか思ってる馬鹿も特にJSには多いんだが、非同期が軽いわけではないんだよ。
むしろキューイングしてやる分だけ重くなる。
651:620
21/08/05 13:41:39.90 bqGeTZjz0.net
>>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年やっただけの人にも勝てない
652:デフォルトの名無しさん
21/08/05 13:44:24.19 /9S9EoKc0.net
robots.txtを守らないと逮捕されるって本当ですか?
653:デフォルトの名無しさん
21/08/05 13:47:42.25 jTl1oJKL0.net
>>638
だからさー…あのなぁ…俺は「>>575みたい低レベルな話なら」それで解決するだろ?と言ってる
しかもレンタルサーバでやるような低レベルなもんだろ?
ここは質問スレだ
俺は「その低レベルな質問に対して方法を提示した」だけ
言語仕様が我慢できないなら他の言語を使え 何度も同じ事を言わせるな
つかお前、なんかの病気じゃね?w