1 名前:デフォルトの名無しさん [2022/09/20(火) 16:46:23.39 ID:Sb2Kpzh+0.net] !extend::vvvvv:1000:512 !extend::vvvvv:1000:512 ★スレ立て時 ↑ が3行以上になるようコピペ PHPに関する質問スレです 前スレ 【PHP】下らねぇ質問はここに書き込みやがれ 13 https://mevius.5ch.net/test/read.cgi/tech/1631147923/ 次スレは>>980 以降 VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
461 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 20:06:17.69 ID:uHiybqGX0.net] む。 お話変わりますが。 実行後に全て消えるということは、 $pdo = new PDO($dsn, $username, $password, $driver_options); のハンドラ$pdoも削除されますね。 $pdo = null; も不要ですか?
462 名前:デフォルトの名無しさん mailto:sage [2023/02/11(土) 22:26:33.03 ID:v8sAV+Uv0.net] >>461 そもそも nullを入れること自体が元から不要 古のJavaじゃあるまいしどっからそんな悪癖が湧いてくるんだ
463 名前:デフォルトの名無しさん [2023/02/11(土) 22:59:28.99 ID:VU40DDuL0.net] >>462 おまえPDO使ったことないだろ? https://www.php.net/manual/ja/pdo.connections.php
464 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 00:20:56.68 ID:kdLrjrT/0.net] >>462 知ったかぶりする悪癖は治そうなw
465 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 01:29:41.79 ID:Jy8zTObO0.net] たまにClose cursorしないといけない時があるよね
466 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 10:52:00.85 ID:d/88ECv40.net] HTTPはステートレス
467 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 13:40:33.70 ID:2oU17ty6a.net] >>444 Ruby では、URL を扱うモジュールがあるので、正規表現などは使わない require 'uri' url = "そのyoutube のURL" p ary = URI.split( url ) #=> ["https", nil, "www.youtube.com", nil, nil, "/watch", nil, "v=fNapOJYpz18", nil] uri = URI( url ) p uri.query #=> "v=fNapOJYpz18" 含む項目 scheme userinfo host port registry path opaque query fragment
468 名前:465 mailto:sage [2023/02/12(日) 16:22:39.83 ID:fJXtAG7P0.net] >>466 それぐらいは知っとる
469 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 17:51:22.67 ID:disuH4ke0.net] aタグのクリックで指定フォームのpostをしようとしています。 以下コードを記述したところどうやら文字列の「-」がJavaScriptにて 認識されていない様です。 「-」はJSで認識されないのでしょうか? もしくは私の書き方がどこか間違っていますか? <コード> <a href="javascript:name_form_delete_kNjQxl-K7.submit()">Remove</a> <form class="" name="name_form_delete_kNjQxl-K7" method="post" action="addhoge.php"> <input type="hidden" name="name_t1" value="1"> <input type="hidden" name="name_t2" value="2"> </form> <エラー> Uncaught ReferenceError: name_form_delete_kNjQxl is not defined
470 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 18:08:34.40 ID:Jy8zTObO0.net] kNjQxl-K7がなんかで生成してる文字列なら変数に入れてテンプレートリテラル使うとか
471 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 18:23:53.22 ID:19IYgGC60.net] >>469 ハイフンはマイナス記号と同じだから関数名や変数名(要は識別子)に使える言語の方が少ないよ 素直にname_form_delete_kNjQxl_K7とかにすべし
472 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 18:29:58.02 ID:n7060JSN0.net] >>469 document.forms['name_form_delete_kNjQxl-K7'].submit() idやnameがwindowインターフェイスに自動生成されるショートハンドは元からある名前と被った時に困るから使わない方がいいよ
473 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 20:31:31.32 ID:bFc1YPr30.net] aタグでもonclickで書けば良くね? Vueで書くときはhrefすら書いてないわ
474 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 21:35:07.83 ID:fJXtAG7P0.net] これはフロントエンドの話ですか。。 <a>タグのhref属性は、リンク先を記述するのであって イベントのターゲットを記述するのではないです。 javaScriptでイベント駆動を記述するのであれば、 addEventListener()で、イベントオブジェクトを利用するのが 一般です。 JavaScriptスレに訊いた方が良い回答があると思います。
475 名前:デフォルトの名無しさん mailto:sage [2023/02/12(日) 22:36:32.24 ID:disuH4ke0.net] >>470 元のデータに「-」が入っていてそのまま使いたかったのです。 >>471 そうだったのですね。極力使わない様にします。 >>472 ありがとうございます!出来ました! その様な書き方もあるのですね!!
476 名前:デフォルトの名無しさん [2023/02/13(月) 15:51:52.79 ID:PTUH+xs80.net] unko() or die("chinko"); という書き方はよくあると思いますが、die()の代わりにreturnを使いたいです。 でもreturnは使えません! そこで、returnの代わりになる関数ってなんかないですか?
477 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 16:14:41.21 ID:SJQ1XhAi0.net] ない
478 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 16:36:48.27 ID:3Y+V2LMTd.net] throwでも使っとけ というかいまどきor dieなんて使ってるソースはクソゴミだから脱出を検討しろ
479 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 23:44:40.57 ID:UX0KmCtq0.net] Eclipse⇒VS Codeに乗り換え中 使い辛いなー
480 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 23:48:06.11 ID:v/vixYv70.net] それならnetbeansにしてみたら? 俺はPHPはnetbeansでやってる
481 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 00:22:03.18 ID:F+rfJu9X0.net] >>480 eclipseが一番使い易く無い? 慣れのせいかもしれないけど・・・
482 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 01:56:02.60 ID:DAv1op2d0.net] PhpStormが一番良いと思います
483 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 03:06:09.76 ID:F+rfJu9X0.net] VS codeでサーバに接続しようとしています。 すると「リモートを開いています」のまま フリーズします。 VS Codeに設定したユーザ名、パスワードは正しいです。 WinSCPからだと同じ情報で接続できます。 何の設定が間違っているのでしょうか?
484 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 04:09:47.12 ID:+hscb0Qf0.net] そうでしょうね
485 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 12:02:50.23 ID:F+rfJu9X0.net] VS CodeでRmote Developmentをインストールし 接続情報を設定しました。 そして、パスワードを入力しEnterを押したところ 「リモートを開いています...」と画面左下に表示されています。 しかし、 エクスプローラー 開いているフォルダーがありません リモートに接続しました。 フォルダーを開く という表示です。リモート接続は出来ている様なのですがサーバ上の ファイル一覧が表示されません。。。 共有サーバだと出来ないのでしょうか?
486 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 13:43:42.54 ID:F+rfJu9X0.net] Eclipseの方がよっぽど使い易いじゃねーかよ。 VS Code進めてたヤツはアホか?
487 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 18:19:18.79 ID:9fQYo556d.net] なれの問題を人のせいにするのは愚かだよ
488 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 18:59:35.83 ID:F+rfJu9X0.net] VS Codeで出来る事ほぼすべてEclipseで使えるじゃねーか。 いちいち拡張機能を入れてF1⇒実行 糞面倒臭い。
489 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 19:23:03.28 ID:JNIzMgrA0.net] EclipseってVScodeより軽いの?
490 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 10:31:40.86 ID:WfU34a1O0.net] 軽い
491 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 15:54:51.90 ID:ficf9YEj0.net] pycharm vscodeより、かるい
492 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 19:54:45.75 ID:4xfiC8CV0.net] vscodeよりさらに 本家?visualstudioなんてマゾいし、 vscodeとvsで全然ショートカットも違うから笑えてくる
493 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 22:24:26.83 ID:ficf9YEj0.net] php javascript,css,html,データベース いろいろ、絡んでくるから、初心者には、ほんと難しいとおもう webプログラミング、がね
494 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 13:41:24.91 ID:U29SVQBb0.net] phpMyAdminで使える、定数のCURRENT_DATE をbindValue()を通して送りたい野だけど失敗します。 データベースの定数をクエリ文に埋め込みPHPで送信することは難しいでしょうか? ----------- $name ="cola"; $update_date = CURRENT_DATE; $insert = "INSERT INTO item(name,update_date) VALUES (:name,:update_date);"; } $statement = $db->prepare($insert); $statement->bindValue(':name', $name); $statement->bindValue(':update_date', $update_date, PDO::PARAM_STR_NATL); うまくいかない!! --------- ↓理想の変形 INSERT INTO item(name,update_date) VALUES ("cola",CURRENT_DATE);
495 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 14:34:50.94 ID:wXxzWMIn0.net] >>494 CURRENT_DATEはphp側ではなくsql側の日付関数なのでbindできない INSERT INTO item(name,update_date) VALUES(:name,CURRENT_DATE);
496 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 16:20:52.89 ID:ZhDpu7bI0.net] IDEはEclipseで十分
497 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 17:17:33.60 ID:U29SVQBb0.net] >>495 ありがとうございます。
498 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 00:53:37.37 ID:VY6wNZlY0.net] PHPのシンタックスハイライトぐらいしか出来ないエディタで 5MBほどの社内用プログラムをかきあげたことがあるぞ(゚A゚;)
499 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 01:00:09.42 ID:O/H37gNs0.net] メモ帳野郎が湧くぞ
500 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 16:21:45.50 ID:wTUF9m4P0.net] cd ~/.ssh の ~ ってどういう意味なのでしょうか? cd .ssh だと確かにこのディレクトリに入れません。決まり文句と覚えておけばよいでしょうか?
501 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 17:00:32.72 ID:zhx+QJQI0.net] >>500 スレチ
502 名前:デフォルトの名無しさん mailto:sage [2023/02/25(土) 19:20:55.02 ID:L/ecqLAZ0.net] >>496 ホームディレクトリの略だよ
503 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 23:08:14.21 ID:yz/O0wFra.net] requireとextendsはどう違うの? requireはclassだけ呼ぶのかと思ったらプロパティも呼ぶし混乱する この2つ重なってない?
504 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 00:20:33.97 ID:sow/rINj0.net] includeとrequireを混同するのは微笑ましいあるあるだけど extendsは初めて見るパターンで困惑する
505 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 01:15:02.38 ID:BPjGYXVma.net] 無能なんだな俺 でも分かった requireは親のクラスを使ってインスタンスが作れる。だから呼び出し元でclass Hoge { しなくていい requireは更に親のphpファイルで作った変数が使える requireは更に親のphpファイルで作ったコンストラクタを使える つまりclass内が使える 一方のextendsはclass Hoge { の外にあるメソッドとかを継承する ↑この理解はどうかな?
506 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 01:24:44.70 ID:BPjGYXVma.net] メソッドもclass Hoge {の中にあるのか。やっぱ被ってるように思うけど
507 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 04:20:55.93 ID:ocW3Jac80.net] requireはあくまでも外部のPHPファイルを読み込んでるだけ そこに記載されたクラスを継承して新たにクラスを作ることとは何の関連もない ポリモーフィズムの概念やらオブジェクト指向がなんたるかを勉強してきたほうがいい
508 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 04:22:36.00 ID:ocW3Jac80.net] ちなみにネコがワンと鳴くみたいな説明してるとこは見ない方がいい
509 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 04:37:15.50 ID:iRiTYulC0.net] 俺はPHPだけじゃなくて、Windowsアプリ開発もできる
510 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 08:40:23.44 ID:TElJ4lxXa.net] >>507 You Tubeいくつか見てみるよ
511 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 13:52:10.05 ID:OQAydld20.net] 初心者なんだけど他人のコード見てたら if(true){ ・・・ } if(false){ ・・・ } とかあるんだが、これはどういう条件式なの? ifの中に変数名が入っていたりしたら入ってるかどうかぐらいなのはわかるんだけど、 不思議な書き方なのでよくわからんです
512 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 13:59:57.21 ID:sow/rINj0.net] >>511 ・もともとはif文の中に条件判定が入ってたが、削除したときに横着した ・実験でコメントアウトしたり戻したりを頻繁にしてたときのなごり雪 ふざけすぎたコーディングの跡で
513 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 01:30:55.97 ID:YvnM6/8va.net] やっぱrequireよく分からんな とあるwebページ作ってて、管理しやすくするためにphpファイルをiedex.php、data.php、hoge.php、hogehoge.phpみたいに分ける data.phpにインスタンスまとめる。この場合data.phpは各クラスをrequireする index.phpはHTMLとして表示される。この場合ここはdata.phpをrequireする hoge.phpとhogehoge.phpはclassだけど、他のクラスから継承しないならrequireしたりしない extendsは分かったかも とあるクラスからインスタンスを作る。このインスタンスをタイプは同じだけど性質によって分けたいならextendsする 例 アニマルクラスを作る。プロパティは 種族 年齢 吠える そのクラスから犬クラスと猫クラスに分けてからインスタンス作りたい場合、extendsでアニマルクラスを継承する(プロパティは共通だから) これでどうかな。requireせずにextendsだけする事あるのだろうか?必ずrequireやincludeとかのファイル読み込みをセットで使う? それと皆は本当にハッキリとrequireするかしないか分かるの?
514 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 01:34:20.21 ID:YvnM6/8va.net] それと、クラスメソッドやクラスプロパティ使う時も皆は明白に判断つくの? インスタンス作成回数とかid作成はクラスメソッドとかみたいのは分かるけど俺はハッキリと判断つかないな
515 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 01:50:28.85 ID:YvnM6/8va.net] HTMLに変換されるindex.php上で他のphpファイル上で定義されたメソッドを実行する場合、requireしなくてもいいのはなぜ? requireはインスタンス作成時にのみ行うのかと思わせて他のケースもあるみたいで分からなくなる
516 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 02:32:15.26 ID:RiJyC4pT0.net] requireで読み込むファイルはクラスや関数が書かれたライブラリだったり 定数や共通の設定事項を記載したファイルだったり 単にhtmlを出力してるだけのファイルならその内容が読み込んだ側で出力されるし用途は様々 C言語で書かれたPHPコアライブラリに含まれてる関数群やPDOなんかのクラスは 使用するにあたってrequireなんて書いたりしないけど PHPで作られてるものはrequireしないと使えない インスタンスだの継承だのそんな次元の話じゃない
517 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 07:09:43.47 ID:3WmX3+jc0.net] 基礎的なところからすれ違ってんだから体系的に学習できる本でも読めよ phpは基礎が学べればあとはマニュアルでなんとかなるくらいマニュアルが優秀だけど、そもそもの基礎がズレてたらマニュアルも読めん
518 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 08:28:11.46 ID:xmhsjsFza.net] 基礎がおかしいか。Progateで勉強したけどrequireするしないの差が曖昧だった 何で勉強しようと思ったかというと、今使ってるブログサービスで不具合あって、そこがWordPressだから直せないかなと思った である程度勉強してブログ設定見たらユーザーが触れる部分はHTMLで勉強の意味無かった 意味無かったけど途中までやったから全部終わらせた PHPかなり難しかったよ。でもCやってたら楽々なんだろうな
519 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 09:06:04.41 ID:3WmX3+jc0.net] WordPressはphpとはまた別物 多分、両方エキスパートって人はいないと思う そもそも一般的なphp開発だと、requireとかほぼ使わなくなってる composerのautoloadがメジャーだよ WordPressがやりたいんだったら、一般的なphpじゃなくてそれ用の本読んだほうがいいかなぁ
520 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 09:19:48.98 ID:95tx/KzW0.net] >>513 まず言語仕様として1ファイル1クラスじゃなくてもいい。1ファイルに複数クラス定義を書いてもいい。 (ただし作法としては1ファイル1クラスにするのが望ましい) そしてrequireは別のファイルからコードを挿入してくるだけの機能 例えばecho文が書かれたPHPファイルをrequireしたらその時に実行される。
521 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 12:09:34.54 ID:K5lzl+NyF.net] ファイルには関数やクラスの定義だけしておくパターンが多いかな
522 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 16:54:00.06 ID:E6p/DZkf0.net] そんなに違いが気になるなら、Ruby の逆引き本を読んだ方が早い Ruby on Rails が良い
523 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 18:14:11.17 ID:qVVLPrT9r.net] Rubyって読みづらくね? 波括弧ないしif~endとかダサい
524 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 01:33:59.12 ID:UTDLtYqT0.net] >>523 そういうのをかっこいいと思ってる人たちが使っているんです
525 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 03:49:41.82 ID:QN9phVrM0.net] file_put_contentsでjsonにデータを書き込みたいんだけど、jsonに [ ] を予め用意しておいて その中にデータ書き込むって出来ないかなあ?
526 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 08:43:06.85 ID:UTDLtYqT0.net] >>525 オブジェクトに[ ]を用意してその中にデータを書き込んで 最後にjsonにしてfile_put_contentsで書き込むと良いよ
527 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 10:36:45.89 ID:QN9phVrM0.net] >>526 データ入れる場所指定できるんですね 試してみます!
528 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 10:37:24.79 ID:QN9phVrM0.net] ちがうか、先に違うオブジェクトにしておくのか
529 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 11:19:20.74 ID:90jK5EfG0.net] 何で出来ない奴はこうも説明が下手なんだ・・・ 何を言っているか分からんよw
530 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 17:28:10.18 ID:XGVF9QRc0.net] >>525 動的に書き込みたい部分以外はJSONのテンプレートとして事前に用意しておきたいってことだろうか そう仮定すると考えるのはこの3通りくらい 1) テンプレートを一度jsonオブジェクトとして読み込んで、目的の階層にデータを代入して、まとめて書き出す 2) テンプレート側にデータとして存在しえない文字列を用意しておいて、文字列として読み込んだjsonから文字列置換する 3) JSONを読み取る側を改修して、固定部分と動的部分を別ファイルから読み取るようにする
531 名前:デフォルトの名無しさん mailto:sage [2023/03/01(水) 20:41:59.79 ID:QN9phVrM0.net] >>530 ああ、一旦オブジェクトなり配列にして、未登録のデータだった時にオブジェクト一個追加してJSON全部上書きしちゃうのは自分でもできそう データの数も3桁行かない程度だし、データ読み出して書くのもそんな重くならないか 後は動的にデータおる部分の見直しですね
532 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 11:24:39.77 ID:QdgOL0Oo0.net] どちらが適正ですか? try { //ファイルを保存先ディレクトリに移動させる if (move_uploaded_file($_FILES['upload_image']['tmp_name'], $save)) { echo 'アップロード成功しました。'; } else { echo 'アップロード失敗しました。'; } } catch (Exception $e) { echo 'アップロードエラー: ' . $e->getMessage(); } try { //ファイルを保存先ディレクトリに移動させる move_uploaded_file($_FILES['upload_image']['tmp_name'], $save); } catch (Exception $e) { echo 'アップロードエラー: ' . $e->getMessage(); }
533 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 12:02:39.82 ID:A2ppgH2U0.net] >>532 上
534 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 13:31:58.17 ID:QdgOL0Oo0.net] >>533 ありがとうございます。
535 名前:デフォルトの名無しさん [2023/03/05(日) 15:15:03.70 ID:QdgOL0Oo0.net] phpの実行を3つに区分したとして、 「データベースのmysqli接続」 「POST送信データバリデーションチェック」 「クエリ実行」 try-catch文、トランザクション処理を記述する場所 って以下であっていますか? try{ //データベース接続処理 ... //入力バリデーションチェック ... //トランザクション開始 $mysqli->begin_transaction(); //クエリ実行 ... // トランザクション処理 if (!$mysqli->commit()) { throw new Exception("トランザクションが失敗しました。"); } }catch (Exception $e) { echo $e->getMessage(); $mysqli->rollback(); }
536 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 17:02:00.95 ID:pluyAGbia.net] commit部分のthrowは要らないのでは?
537 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 17:44:49.95 ID:M62PQQGq0.net] commitしようとしたら、ファイルが壊れました、とか
538 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 18:28:19.70 ID:pluyAGbia.net] DB壊れたらシステム止まって別のトランザクションも動かないだろうから 全てのトランザクションに書かなくて良いと思う
539 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 21:45:08.47 ID:GipSGO790.net] PDOで例外投げるよう設定して catchすべきなのはPDOExceptionじゃね
540 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 10:18:27.62 ID:8oxT6MrcM.net] こういうのもchatgptさんに PHPでDB接続する例文書いて。例外おきたときの対処もよろ。 と言うだけでだいたい書いてくれる。 でもさ、 もしも全員がchatgptさんだけ使って ブログ記事などが一切なくなった場合は どこからサンプルソース解析してくるんだろう? 公式リファレンスしか存在しなくても たくさんサンプルあみだせるんかな?
541 名前:デフォルトの名無しさん mailto:sage [2023/03/06(月) 13:06:49.25 ID:UVP5G7/Er.net] chatgptかなりいい加減だぞ こっちが詳しく聞いてもありえないコードと解説もよくするし
542 名前:デフォルトの名無しさん mailto:sage [2023/03/12(日) 10:28:41.64 ID:/WQQIT0F0.net] PDOStatement::columnCountって PDOStatement::fetchができる回数を示しているものであってますか? int(0)を想定したクエリ出しても どんなクエリでも常にint(n)になってしまってお手上げです PDOStatement::rowCountはSQLiteのため常に0を返すとのことで使えません ものすごい古いNAS上に構築された環境なのでそれの影響もあるかもしれませんが ループ上でfetchがbool返すまでやるしかないでしょうか?
543 名前:547 mailto:sage [2023/03/12(日) 10:29:40.64 ID:/WQQIT0F0.net] どんなクエリでも常にint(n)になってしまってお手上げです ↓ どんなクエリでも常にint(n)になってしまってお手上げです (n>0) です
544 名前:デフォルトの名無しさん mailto:sage [2023/03/12(日) 10:33:06.48 ID:yWzg52lT0.net] > PDOStatement::fetchができる回数を示しているものであってますか? 間違ってます。
545 名前:デフォルトの名無しさん mailto:sage [2023/03/12(日) 11:14:32.05 ID:/WQQIT0F0.net] そうですねすみません よく読んだら全然違った 久々にPHPいじってるのでこんなこともわからなくなってるとは・・・ *が最大数で1以上になるのは当たり前ですね
546 名前:デフォルトの名無しさん (ワッチョイ 6610-3g29) mailto:sage [2023/04/24(月) 10:58:21.24 ID:JH1evJvp0.net] みなさんはIF地獄になったときどうしてますか? 最適化するまで試行錯誤しますか? それとも「できる・動く」を優先して進めますか?
547 名前:デフォルトの名無しさん (ワッチョイ 6663-RykB) mailto:sage [2023/04/24(月) 11:03:45.16 ID:CIhFKz1G0.net] 動けば良いってものじゃない
548 名前:デフォルトの名無しさん (ワッチョイ 9ee7-RykB) [2023/04/24(月) 11:05:33.74 ID:xRkzUvA90.net] >>546 メソッドか関数にして追い出しておく あとでリファクタする際にその関数だけでテストできるように下準備だけしておく 未来の自分・他人がやりやすいようにして今は目をつぶる、がコーディングの鉄則 最適化は最初の仕事かつ最後の仕事だが、途中でやるのだけはNG
549 名前:デフォルトの名無しさん (ワッチョイ 6610-3g29) mailto:sage [2023/04/24(月) 16:04:38.35 ID:JH1evJvp0.net] >>548 メソッドに追い出してもIFが続きますね。 どちらにしろ「Aがある場合~Aがない場合~」みたいな処理が必要ですし。 綺麗なコードとわかりやすいコードって違うと思うんですよね。 1ファイルにダラーっとコードが記述されると汚いですが、 上から下まで読めば何がしたいかは大体わかります。 しかし、クラスなりメソッドなりに分けると、複数ファイルにまたがって複雑です。 適切な名前を付けてファイルを参照しやすくすれば手間は軽減されますが、 今度は適切な名前を考えるのに時間を消費し、開発に遅れが生じてしまいます。
550 名前:デフォルトの名無しさん (ワッチョイ c5e6-ASru) mailto:sage [2023/04/24(月) 19:55:07.81 ID:CirHdNf40.net] 綺麗でもわかりにくいコードはあるが、汚いのにわかりやすいコードというのは無いな
551 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 07:41:04.47 ID:ubLXos3L0.net] >>549 一度適当なフレームワークでシステム作ってみるといいよ 感想がぜんぜん変わるから > 今度は適切な名前を考えるのに時間を消費し、開発に遅れが生じてしまいます。 copilotさんとか使うといい
552 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 08:12:37.51 ID:CC33Xm/N0.net] >>551 一応、CakePHP→Laravelと通ってます。 単純なシステムなら綺麗でわかりやすいコードになりますが、 複雑な要件になると、力技の部分がどうしてもでてきます。
553 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 13:06:17.18 ID:ubLXos3L0.net] >>552 フレームワーク使用したことがあるのに「クラスなりメソッドなりに分けると、複数ファイルにまたがって複雑です。」とか言っちゃうのはかなりまずい気がするけど、複雑な要件の実装時に十分に責任分解できてないんじゃないかなぁ… https://github.com/alexeymezenin/laravel-best-practices/blob/master/japanese.md#%E5%8D%98%E4%B8%80%E8%B2%AC%E4%BB%BB%E3%81%AE%E5%8E%9F%E5%89%87 これのGoodがGoodに感じられないってことだよね?
554 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 13:27:47.02 ID:gJ92KJGfa.net] コミュニティーの議論や歴史を調べること Ruby on Rails では、コントローラーの肥大化を防ぐために、 Skinny Controller, Fat Model を推奨した。 その結果、モデルが肥大化した そこで今度は、モデルの処理を減らすために、 Form Object, Service Object へ処理を分けた また表示処理は、Presenter へ分けた。 それで、Form Presenter, Model Presenter が出来た
555 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 13:27:53.51 ID:A07qb0io0.net] こういうのは2つ実際に書いてみて、両者を見比べて良い方を採用する 理屈よりも、自分の目で見て判断するのが良い
556 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 15:25:51.23 ID:CC33Xm/N0.net] >>553 いえ、これはGoodです。理想です。 しかし、システムの規模が大きくなると処理が増えるんです。 複数のメソッドを役割ごとに用意し、コントローラから指示を与えなければいけません。 >>555 今の自分はそうしてますね。 PHPに限らず、Javascriptなんかも最初はそのまま書いて、 後からjQueryにしたり、Vueに変更したりします。 結果、倍時間がかかって効率が悪くなります。 同じことをしているとモチベが下がり、開発意欲は失われます。
557 名前:デフォルトの名無しさん mailto:sage [2023/04/25(火) 15:27:54.01 ID:dvdIAVRA0.net] 古いPHPのシステムを保守するならDockerにぶち込むのが一番?
558 名前:デフォルトの名無しさん (スッップ Sd0a-T9f9) mailto:sage [2023/04/26(水) 13:32:18.14 ID:oPAFNUffd.net] 結局ifは減らないんだよね ファイルを分けても分けなくても、オブジェクト指向でもそうでなくとも Strategy/StateパターンとTemplateパターンの併用にして スイッチっぽく分岐をわかりやすするのが一番かな
559 名前:デフォルトの名無しさん (ワッチョイ aa7c-RykB) mailto:sage [2023/04/26(水) 13:45:21.48 ID:DHcVafSS0.net] ifを無理に減らす必要は無いのでは? 必要なら書かなきゃいけないし ただ処理が集約出来るとかなら外に追い出したらいいし パターンが多い場合はswitch()の方が良い場合も確かにあるし ケースバイケースかと elseifが並ぶのは個人的に嫌いだがw
560 名前:デフォルトの名無しさん (スップ Sdea-rwG/) mailto:sage [2023/04/26(水) 13:47:42.93 ID:poJ+ClSWd.net] elseif嫌いわかる elseの中にif書きたい パターン3つ以上になるならswitchにするな
561 名前:デフォルトの名無しさん (ワッチョイ 5e5f-RykB) mailto:sage [2023/04/26(水) 13:57:33.29 ID:w+qfVGMw0.net] else if は嫌いというか、あとで取捨選択が面倒なので if文単独で成り立つようにしておくことが多いな
562 名前:デフォルトの名無しさん mailto:sage [2023/04/28(金) 14:22:47.60 ID:woDvEBlt0.net] 訊きたいことありましたが自決しました
563 名前:デフォルトの名無しさん (ブーイモ MMc9-EW+4) [2023/04/28(金) 14:52:55.46 ID:L2hGySASM.net] おお死んでしまうとはなにごとだ
564 名前:デフォルトの名無しさん (ワッチョイ 7502-rwG/) mailto:sage [2023/04/28(金) 15:31:57.97 ID:4N/b4mKa0.net] 盆には帰ってこいよ
565 名前:デフォルトの名無しさん (ワッチョイ b77c-6bRy) [2023/04/30(日) 00:40:31.69 ID:z7x3mWoF0.net] PHP7.2.24をインストールしました。Composerもインストールしました。 次のようなExtensionも使えるようにしたいのですが、つまっています。 ext-bcmath,ext-ctype,ext-curl,・・・ ネット上でみたところ、PHPの用語でモジュールとExtension、ライブラリとあるようですが、 それぞれ違うものなのですか?
566 名前:デフォルトの名無しさん (ワッチョイ 9f7c-fitb) mailto:sage [2023/04/30(日) 01:15:52.37 ID:vhG6z0vz0.net] PHPの拡張ならそれを入れないと使えないのでは・・・ composerはあくまで自分の作るプログラムで使うライブラリを導入するもの
567 名前:デフォルトの名無しさん (ワッチョイ efae-KeI6) mailto:sage [2023/05/12(金) 22:24:38.02 ID:sJueD97p0.net] サーバーのバックエンドの*.phpはpost送信などで任意で呼び出して実行されますが このバックエンドの*.phpで自発的に一定時間ごとにプログラムを駆動させることはできますか? 例えば1時間おきとか1日おきとかに規定プログラムを実行なんていうのは
568 名前:デフォルトの名無しさん (ワッチョイ 527c-KeI6) mailto:sage [2023/05/12(金) 22:30:23.15 ID:+3Auf0UC0.net] cronに登録すればいいだけでは? PHPをデーモンとして常駐させてその中で定期的に動かす方法もあるだろうけど
569 名前:デフォルトの名無しさん mailto:sage [2023/05/12(金) 23:50:55.10 ID:A3+wmcch0.net] 無限ループとsleep使ったスクリプトを起動させときゃいいけど 自分でコントロール出来ないサーバだと勝手にkillされるかもな
570 名前:デフォルトの名無しさん (ワッチョイ 1349-ELkX) mailto:sage [2023/05/13(土) 09:35:12.10 ID:vNstIXFZ0.net] 例えばWindowsならコマンドプロンプトで 「php.exe <そのファイル>」 と打てば実行できる(環境変数に入ってる前提で) そういうことじゃないの? あとはWindowsならタスクスケジューラとかLinuxならcronとかで、同じように実行すればいい
571 名前:デフォルトの名無しさん (ワッチョイ 835f-+6/9) mailto:sage [2023/05/18(木) 11:36:31.84 ID:cerdIEN00.net] フロントエンドはJS、バックエンドはPHPってできるだけ切り離したい バックエンドとしてDBからデータ受け取るためだけにPHP使うってありなのかな? あと現状スクラッチ開発しかしたことがないからバックエンド向けのフレームワークも試してみたい
572 名前:デフォルトの名無しさん (ワッチョイ cfbb-ScEU) mailto:sage [2023/05/18(木) 11:39:20.88 ID:yxJWp9Lm0.net] すればいいじゃん がんばれ
573 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 12:33:14.63 ID:l6GHSnlrr.net] 言語はなんでもいいならphpなんて選ばない 普通はrubyかJavaかpythonだぞ phpはやめとけ
574 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 12:43:42.00 ID:4rcvRPf10.net] Pythonは完全に対応しているサーバーが少ないみたい Pythonとdjangoでバックエンド書く方法が自分にはまだわからない
575 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 15:55:36.70 ID:nTE2uard0.net] >>571 バックエンドには通常PHPを使用するのでアリ フレームワークはFuelPHPが良いね フロントエンドのフレームワークはjQueryを使う
576 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 16:38:05.22 ID:BkqgSu2K0.net] >>573 その3つの方が選ばないわw PHPが一番楽だろw それにPHPのスレでその返答はないわ ゴミは消えろ
577 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 16:43:12.95 ID:psogGPWLr.net] まあラクなのはphpやろなあ ケースによって最適は異なるから、便利な言葉「場合による」
578 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 17:32:55.73 ID:7XjO1SKk0.net] なんでも使える自社サーバーなのか、 レンタルサーバーのつもりかで選択肢かわるもんな phpはだいたい使えるから仕方ない
579 名前:デフォルトの名無しさん mailto:sage [2023/05/18(木) 19:26:52.18 ID:iyBRbBgp0.net] VPSなら何だって使える
580 名前:デフォルトの名無しさん mailto:sage [2023/05/19(金) 01:52:10.66 ID:TiXR4GEz0.net] >>578 会社のサーバーがさくらのレンサバだから何でもかんでもPHPなんだよね ごく小規模だからスクラッチ開発が基本だし レベル低くて仕事で精一杯だしで何か独学するって余裕もないから、まずPHPの手軽さからわざと離れてJSでDOM操作は分けてみようかなぁと
581 名前:デフォルトの名無しさん mailto:sage [2023/05/22(月) 01:29:49.15 ID:6n6FPMUf0.net] 別に言語はなんでもいいけど クライアントJSから直接サーバのDBにはアクセスできないし 非同期でやる場合、だいたい>>571 のようになるんじゃね
582 名前:デフォルトの名無しさん mailto:sage [2023/06/10(土) 20:37:19.56 ID:TSaFGI4o0.net] WSL2(ubuntu)にLaravelインスコしてみたけど メモリ8G程度だときっついですね docker desktopとかwindowsターミナル入れろとかこの辺は aptでdocker入れたりubuntu直接起動したりすればおkな感じですか? とりあえずやってみてその方法でもいけたはいけたんですが(メモリも1Gぐらい減った) ビルドしてるときの表示がバグったりちょっと不安要素がありました
583 名前:デフォルトの名無しさん mailto:sage [2023/06/11(日) 08:50:59.31 ID:nugYPewD0.net] メモリも問題だけど、たぶん最大の問題はファイルを配置した場所だと思うよ ・ソースコードをWSL2ディストリビューション領域内に配置する で大幅に改善すると思う
584 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 08:08:55.93 ID:VNkMF7gVM.net] httpリクエストで動的なサイトからデータ取得するのってやっぱり無理なんですかね?javascriptでhtmlが生成されるよなページんんだけど
585 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 10:00:10.61 ID:AjUdrP5R0.net] 無理ではない curlやDOM操作のライブラリ自体は揃ってるんだから、後はあなたが頑張ってそのJavaScriptの動作を真似るだけ
586 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 10:25:34.03 ID:mHRjcInk0.net] おれなら生成はブラウザにやらせるかな 出来た頃合いを見計らってデータを盗む
587 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 10:27:10.81 ID:wQ6JiRj1M.net] 例を示していただけませんか
588 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 10:29:59.61 ID:wQ6JiRj1M.net] javascriptは通常ブラウザが実行します。しかしhttpリクエストではブラウザを介さないためjavascript は実行されません。ヘッドレスブラウザなどを使えば動的なコンテンツを取得できますが、わたしの課題はhttpリクエストで動的ページからデータを取得することです
589 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 10:34:38.95 ID:wQ6JiRj1M.net] レスポンスを取得してからjavascriptを一回実行すればいいのかな?そんなことできるのかな
590 名前:デフォルトの名無しさん (ワッチョイ 7b5f-2rqm) mailto:sage [2023/06/12(月) 10:41:43.85 ID:mHRjcInk0.net] 大変だね ブラウザ禁止縛りプレイならまあ自分で頑張るしかないね ていうかphantomjsって開発停止してんだな 知らんかった
591 名前:デフォルトの名無しさん (テテンテンテン MMeb-+QT+) mailto:sage [2023/06/12(月) 21:30:39.08 ID:DY0b1d5xM.net] httpリクエストで動的なサイトからデータ取得するのってやっぱり無理なんですかね?javascriptでhtmlが生成されるよなページんんだけど
592 名前:デフォルトの名無しさん (ワッチョイ 8bbb-hEWj) mailto:sage [2023/06/12(月) 21:39:47.58 ID:sQEwwMG40.net] おまえLaravelスレのアラシだろ うざいよ
593 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 22:12:16.13 ID:mHRjcInk0.net] >>591 puppeteerがいいんじゃない? おれは使ったことないけど、phantomjsのメンテナが 「puppeteerあるならもうphantomjsなんかいらんわ」 って言いだして開発終了したらしいし、確かみてみろ
594 名前:デフォルトの名無しさん mailto:sage [2023/06/12(月) 22:24:27.56 ID:kqdcKHtBM.net] puppetterというものはヘッドレスブラウザを使えるようにしたライブラリであり、わたしはスクレイピングをしたいわけではありません。わたしの課題はhttpリクエストで動的なサイトからデータを取得することであり、ヘッドレスブラウザを使用してスクレイピングをしたいわけではありません
595 名前:デフォルトの名無しさん (テテンテンテン MMeb-+QT+) mailto:sage [2023/06/12(月) 22:37:29.16 ID:kqdcKHtBM.net] わたしがヘッドレスブラウザを使わない理由はデータの取得時間がかかるからです。またわたしはデータベースを使用しないことを前提としているので、取得したデータを保持することはありません。つまり度々データを取得することになる場合に都度ヘッドレスブラウザーを走らせる設計は現実的ではありません
596 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 11:41:46.36 ID:zJMyBjWC0.net] >>595 これが各行ごとに良くわからないな >データの取得時間がかかるからです 何が原因で取得時間がかかるようになるのか 実測してそんなに差異が出たってコト? >データベースを使用しないことを前提としているので DBなんか使わなきゃいいんじゃない? >度々データを取得することになる 同一データを扱うならキャッシュすればいいんじゃない? PHPでだってアホに作れば度々データ取得しに行っちゃうと思うよ >現実的でありません 面倒くささ的にも自前でDOM構築する方が非現実的だよね
597 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 16:08:55.26 ID:Oj3crCHea.net] async awaitとfetch使ってデータ取得すれば良いじゃん
598 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 18:49:37.74 ID:r31gUBK2M.net] httpリクエストとスクレイピングでデータ取得の速度を比較する場合一般的にはhttpリクエストのほうが高速です。またわたしの想定では同一データではなく毎回違うクエリでリクエストすることが予想されます。
599 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 18:50:18.43 ID:r31gUBK2M.net] >>597 具体的にはどのような手順でそれらを使用しますか?
600 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 22:21:10.72 ID:LrQ+wv81M.net] 単純で簡単なjavascriptでレンダリングされているならいけたかもしれませんがフレームワークを使われていたら解析が困難ですね。やはり無理か
601 名前:デフォルトの名無しさん mailto:sage [2023/06/13(火) 22:21:52.68 ID:LrQ+wv81M.net] そしてnodejsが使えないのでヘッドレスブラウザも無理と。
602 名前:デフォルトの名無しさん (アウアウアー Sa8b-Seme) mailto:sage [2023/06/13(火) 23:39:40.44 ID:Oj3crCHea.net] >>599 取得したいサイトのURLとその出力htmlの欲しい部分教えて
603 名前:デフォルトの名無しさん (テテンテンテン MMeb-mVGR) [2023/06/14(水) 02:57:47.74 ID:sJAdEXJGM.net] >>602 取得したいサイトは複数ありますがECナビになります。 https://ecnavi.jp/search/?word=%E6%88%91%E3%81%8C%E5%A4%A9%E4%B8%8B htmlの欲しい部分は表示される案件の部分です。 しかしフレームワークがhtmlをレンダリングされている可能性があり、おそらく解析は困難です。 ajaxからデータを取得するサイトもありましたがcros制限がかかっているため不可です。 ヘッドレスブラウザは環境が構築できないので選択肢には含みません。 わたしはhttpリクエストで動的なサイトのデータを取得するのは無理と判断しました。
604 名前:デフォルトの名無しさん (ワッチョイ 8bbb-hEWj) mailto:sage [2023/06/14(水) 04:20:42.50 ID:Jx0dk3g+0.net] 普通に利用規約違反じゃねぇかw
605 名前:デフォルトの名無しさん (アウアウウー Sadd-APG/) mailto:sage [2023/06/14(水) 05:35:16.83 ID:VFw5jfyla.net] >>582 WSL2, Ubuntu 20/22, VSCode, Windows Terminal, Docker Desktop VSCodeの拡張機能・Remote Development に、 3つの拡張機能・Remote Container/WSL/SSH が含まれている 日本人が作った、多言語バージョンマネージャーのanyenv。 同様のツールに、asdf もある Renv, crenv, denv, erlenv, exenv goenv, hsenv, jenv, jlenv, luaenv nodenv, phpenv, plenv, pyenv, rbenv sbtenv, scalaenv, swiftenv, tfenv 漏れは、Ruby on Rails をやっているけど、メモリは32〜64GB ほしい
606 名前:デフォルトの名無しさん (アウアウアー Sa8b-Seme) mailto:sage [2023/06/14(水) 06:54:43.13 ID:4pmBicBja.net] >>603 案件って「ポイントアップチャレンジ」の部分?
607 名前:デフォルトの名無しさん (テテンテンテン MMeb-+QT+) mailto:sage [2023/06/14(水) 07:38:40.54 ID:dOe183t+M.net] >>606 案件の部分はPCで閲覧していると表示されません。ゲームアプリ案件の場合はユーザーエージェントがモバイルOSである必要があります。
608 名前:デフォルトの名無しさん (ワッチョイ d1a7-Cr01) mailto:sage [2023/06/15(木) 15:12:03.05 ID:pNWnTG3Z0.net] たかだかバックエンドのWeb開発するだけなのに メモリ32GBとか要求される異常な時代w
609 名前:デフォルトの名無しさん (スッップ Sd33-wNjT) mailto:sage [2023/06/15(木) 17:34:34.40 ID:oe0OZOrwd.net] WSL2で2GB Chromeで2GB その他諸々で10GB
610 名前:デフォルトの名無しさん (ワッチョイ 8b63-2rqm) mailto:sage [2023/06/15(木) 17:37:28.87 ID:KtHE2I/00.net] 脳みそのメモリーが書き込み不可のエラーになってますし
611 名前:デフォルトの名無しさん (ワッチョイ d1a7-Cr01) mailto:sage [2023/06/15(木) 17:51:10.48 ID:pNWnTG3Z0.net] 各々アプリが肥大化しすぎてしまって… minimal構成のも用意してくれればいいんだけどね XPとか32bitOSが主流だった時代は4GBで十分足りただろうに まあ今メモリ32GBで1万円ぐらいだから文句いうことでもないんだけど
612 名前:デフォルトの名無しさん (ワッチョイ 135c-2rqm) mailto:sage [2023/06/15(木) 18:17:52.09 ID:jjmsD4tb0.net] 32Gも要求されるって何開発してんの?
613 名前:デフォルトの名無しさん (ワッチョイ 8bbb-hEWj) mailto:sage [2023/06/15(木) 18:28:28.13 ID:W3FATu2P0.net] 616 じゃないけど、docker とブラウザ立ち上げてたら 16 GBをちょいちょい超えるから 32 GBに増設した 快適だぞ
614 名前:デフォルトの名無しさん (ワッチョイ 135c-2rqm) mailto:sage [2023/06/15(木) 20:46:52.21 ID:jjmsD4tb0.net] 快適な環境作りに必要って訳ね
615 名前:610 (アウアウウー Sadd-APG/) mailto:sage [2023/06/16(金) 00:02:25.90 ID:0+O5qEwBa.net] Windows/Linux(WSL2), ブラウザ、VSCode, Docker さらに、Ruby on Rails では、複数データベースで並列テストもできるし
616 名前:デフォルトの名無しさん (ワッチョイ 8b63-2rqm) mailto:sage [2023/06/16(金) 00:06:26.73 ID:siRuxcGs0.net] Ruby厨は呼んでない、巣に帰れ
617 名前:デフォルトの名無しさん (ワッチョイ 8b10-JQtP) [2023/06/16(金) 13:32:48.84 ID:Y1bNR4pi0.net] TwitterOAuthに詳しい人がいたら教えてください。 DeveloperPortalでアプリ作成済み、 composer require abraham/twitteroauth でインストール済みとします。 $connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret); $content = $connection->get("account/verify_credentials"); ではTwitterアカウントの情報が取得できるのですが、 (※app_keyの部分は省いています) Twitter API v2に対応するために $connection->setApiVersion('2'); を追加すると取得できません。$contentがNULLになります。 これってTwitterアプリが v2に対応していないからでしょうか?
618 名前:デフォルトの名無しさん (ワッチョイ 8bbb-hEWj) mailto:sage [2023/06/16(金) 17:45:17.56 ID:TyNt7O690.net] >>617 API使うならドキュメントぐらい見ろよ エンドポイントがないだけだろ
619 名前:デフォルトの名無しさん (テテンテンテン MM96-DFMs) mailto:sage [2023/06/17(土) 09:44:22.27 ID:C4ey1Sw3M.net] addactionがfunctions.phpでは動作するのにカスタムテンプレートでは動作しない理由はなんですか?
620 名前:デフォルトの名無しさん (ワッチョイ 5e10-l8k0) mailto:sage [2023/06/18(日) 18:12:02.78 ID:h4u0ciKA0.net] >>618 $content = $connection->get("account/verify_credentials"); ここの指定に問題があるということが掴めました。 ご指摘ありがとうございました。
621 名前:デフォルトの名無しさん (ワッチョイ 23a9-gN4b) mailto:sage [2023/06/25(日) 18:20:15.50 ID:gM/PAKCH0.net] php初めてみたもののメンターとか先輩とかいないぼっちなんで無償版のchatGPT使うと pdoを使ったDBの接続を含めたコードとか、SQLインジェクションの対応とか一瞬で出してくれてありがたい限り 有償版のGPT4ならコード生成は何かGPT3.5と変わるの?
622 名前:デフォルトの名無しさん (ワッチョイ 4b63-F8yx) mailto:sage [2023/06/25(日) 18:24:11.05 ID:PAO3/SeJ0.net] 寝ている間に君の仕事やってくれる
623 名前:デフォルトの名無しさん (ワッチョイ 23a9-gN4b) mailto:sage [2023/06/25(日) 18:40:58.90 ID:gM/PAKCH0.net] それが本当なら指示のプロンプトがすごいことになりそう 実際のところ、ファイルを分けたCRUDなんて1回のプロンプトで生成とかできるんだろうか どこまでならできるとか、ここはさすがにできないとか情報があるサイトがあれば教えていただければ嬉しいです
624 名前:デフォルトの名無しさん (ワッチョイ 955f-WUpn) mailto:sage [2023/06/25(日) 19:17:12.98 ID:XgY7oRFd0.net] 次のコードをクラスみたいに書いて? →コンストラクタとメソッドに書き換えてくれる ありがてぇ、関数群も提示するとそれに合わせてチューニングしてくれる
625 名前:デフォルトの名無しさん (ワッチョイ 4bf8-cPIU) mailto:sage [2023/06/25(日) 19:21:55.03 ID:i7rMe9Iv0.net] 知ってるコードで書いて これをphpに移植したいというだけでほぼできる
626 名前:デフォルトの名無しさん (ワッチョイ 4bbb-wJdI) mailto:sage [2023/06/25(日) 22:54:48.63 ID:lataiSU20.net] 君は今非常に危険なところにいます phpのpdoは非常に厄介なんですが、それを理解してません 「SQLインジェクションの対応とか一瞬で」と言ってるけど、それは本当? たとえば、 $pdo = new PDO('mysql:dbname=test;host=localhost'); なんて提示されて採用した場合、脆弱な箇所ができる可能性があるの理解してる? ChatGPTの提示するコードは自分の理解できている範囲以外は危険だと思って検証しないと危ないよ
627 名前:デフォルトの名無しさん (ワッチョイ 23a9-gN4b) mailto:sage [2023/06/26(月) 02:27:13.68 ID:0+rAUtlj0.net] >>626 $pdo = new PDO('mysql:dbname=test;host=localhost'); クエリではなく、この時点で見た感じとしては正直わからんです chatGPTは $pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_username, $db_password); binValueなども使ったものを提示していて、実際に動作しているのね。 pdoの引数に各変数があるぐらいで何かしらセキュリティに問題があるとは思わなかったんだけど、この例ではまずい点はあるの?
628 名前:デフォルトの名無しさん (ワッチョイ 4bbb-wJdI) mailto:sage [2023/06/26(月) 05:54:16.49 ID:xls0AJJa0.net] PDO を使用する際、アプリケーションとしての文字コードを指定できる箇所は new PDO() 内のみです ここで正しくアプリケーションの文字列を指定していない場合、アプリケーションとDBの間で文字コードに差異が出る可能性が高く、それ起因の脆弱性が発生する可能性があります よく知られた例としては 5c 問題があり、例えば上記と "SET NAMES sjis"、動的プレースホルダのセットで、プレースホルダをすり抜ける脆弱性が発生します
629 名前:デフォルトの名無しさん (ワッチョイ 23a9-gN4b) mailto:sage [2023/06/26(月) 06:12:00.13 ID:0+rAUtlj0.net] >>628 ありがとう、そういうことがあるのね。 自分がchatGPTに依頼した10回に1回ぐらいの割合で $dsn = "mysql:host=$host;dbname=$db;charset=utf8mb4"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]; try { $pdo = new PDO($dsn, $user, $password, $options); があったので、これからはcharsetを明示するか意識しておきます。 知らないことを伝えられて動いたら全面的に信頼してしまうのも良く無いので、完全では無いことを意識しておきます
630 名前:デフォルトの名無しさん (ワッチョイ b502-1El8) mailto:sage [2023/06/26(月) 10:06:12.93 ID:kBW+dErx0.net] どうしてそんなにChatGPTにこだわるんだ
631 名前:デフォルトの名無しさん (ワッチョイ 1be7-F8yx) mailto:sage [2023/06/26(月) 14:10:10.33 ID:RpzhtkjJ0.net] 流行りだからね
632 名前:デフォルトの名無しさん (ワッチョイ 955f-WUpn) mailto:sage [2023/06/27(火) 01:40:25.23 ID:BUGmgo620.net] RHELの件でこのスレ的に問題になりそうなことはありますか? https://www.redhat.com/en/blog/furthering-evolution-centos-stream?sc_cid=701f2000000tyBjAAI > CentOS Stream will now be the sole repository for public RHEL-related source code releases.
633 名前:デフォルトの名無しさん (ワッチョイ 8da7-0Dh1) mailto:sage [2023/06/29(木) 01:16:30.55 ID:IOgTB2mJ0.net] コミュニティ無視したことやって分裂すると その系譜はもう長らくは信用されないので CentOSが死んだ時点で大方はUbuntuに移ったのでは このスレ的に必要なのは長期サポートだしね
634 名前:デフォルトの名無しさん (ワッチョイ d3db-fXPZ) mailto:sage [2023/07/01(土) 23:56:45.93 ID:qg8w7WVg0.net] PHPを始めたばかりのものなのですが
635 名前:デフォルトの名無しさん (ワッチョイ d3db-fXPZ) mailto:sage [2023/07/01(土) 23:58:14.54 ID:qg8w7WVg0.net] 間違えて書ききる前に投稿してしまいました PHPが無料サービスの範疇で動かせれるレンタルサーバーってあるのでしょうか? HTMLは過去に使った事があったレベルでHTML自体久しぶりなので今どういうサービスがよいものかもわかっていません
636 名前:デフォルトの名無しさん (ワッチョイ 06f8-1X2b) mailto:sage [2023/07/02(日) 19:31:28.47 ID:gdoAp3Jw0.net] むしろ殆どphp動くだろ rubyならともかく
637 名前:デフォルトの名無しさん (ワッチョイ 4f5f-+5O0) mailto:sage [2023/07/02(日) 20:33:28.61 ID:QFPeETi70.net] レンタルサーバーは基本的にMySQLとPHP動かせるようにしてるから WordPress入れられるように
638 名前:デフォルトの名無しさん (ブーイモ MM8e-D/Rs) [2023/07/05(水) 12:23:56.04 ID:BSe/7cdeM.net] >>628 15年近く脆弱性関連のバグが放置されてるのは凄いね しかもそのライブラリが未だに広く使われてとかどう考えても頭おかしい
639 名前:デフォルトの名無しさん (ワッチョイ 86bb-p0MK) mailto:sage [2023/07/05(水) 17:36:49.07 ID:FFK7TFKZ0.net] >>638 調べりゃわかるけど、バグじゃない charsetの設定が効かなかったバージョンがあるからそれはバグとみなしても良いかもしれないけど、PHP5.3.7以下とか随分前の話 文字列の連結使って SQL 文作っちゃダメとかと同じ知ってないとダメなセキュリティ知識だよ
640 名前:デフォルトの名無しさん (ブーイモ MM5b-D/Rs) [2023/07/05(水) 18:51:56.66 ID:VuPZbF0BM.net] >>639 デフォルトでなんちゃってprepared statementが使われる時点でセキュリティ的にはバグなんだよね PDO特有の問題を一般的なセキュリティ知識と同列に語ったらダメだよ 文字列連結だって適切にエスケープ出来れば問題はないわけだけどデフォルトでそんな脆弱な処理をするライブラリがあったら頭おかしいと思うでしょ
641 名前:デフォルトの名無しさん (ワッチョイ 86bb-p0MK) mailto:sage [2023/07/05(水) 19:39:41.44 ID:FFK7TFKZ0.net] >>640 なんか、無茶苦茶だねぇ まず、 > 15年近く脆弱性関連のバグが放置されてるのは凄いね これが全く認識違いだったってことは理解できた? 現在のphpではcharsetをPDOコンストラクタ内のDSNで設定してあげることで、アプリとDBの間の文字コードにずれが発生することがなくなり、意図した通りの動作をさせることができる > デフォルトでなんちゃってprepared statementが使われる時点でセキュリティ的にはバグなんだよね 全然話が変わってるけど、なんでこんな話が出てきたの? 動的プレースホルダをデフォルトとして採用することをバグと呼ぶ人は見たこと無いけど、たしかにセキュリティ屋から見ると好ましくはない ただ、ネットワークレイテンシを考えると非常に合理的なので、それほど悪い選択ではないと思う 顕在化した脆弱性があるわけでもないし現在においてはアプリとDBをutf-8で統一することも容易なので、正しくアプリケーションの性格に合わせて選択すればよいだけの話だよ
642 名前:デフォルトの名無しさん (ワッチョイ 0ee7-hRAP) mailto:sage [2023/07/06(木) 11:41:34.33 ID:us421T2z0.net] 面倒な人が絡んできてるね・・・ 仕様バグだろうとバグはバグよ
643 名前:デフォルトの名無しさん (ワッチョイ 0663-hRAP) mailto:sage [2023/07/06(木) 11:46:42.56 ID:5cWvOTk60.net] 脆弱性は、設計上のバグ 知ってないとダメというのは、バグ回避のテクニック
644 名前:デフォルトの名無しさん (ワッチョイ 86bb-p0MK) mailto:sage [2023/07/06(木) 12:43:03.10 ID:KqeQuq1k0.net] >>642-643 charsetの設定に未だバグが有るって言いたいの? それともデフォルトが動的プレースホルダになったことをバグと言いたいの? 何を脆弱性/バグって言いたいのかわからん
645 名前:デフォルトの名無しさん (スップ Sd22-+5O0) mailto:sage [2023/07/06(木) 18:00:41.52 ID:hqQEAg+3d.net] 個人的にはメール送信関係でヘッダー7ビット文字に変えるのがなんかもやもやする 昔のソフトだと7ビットじゃないとダメってのはわかるんだけどUTF-8でもいいじゃねーかってなる
646 名前:デフォルトの名無しさん (ワッチョイ 7f7b-gGH9) mailto:sage [2023/07/06(木) 22:27:39.58 ID:CUYn8xPf0.net] >>642 勘違いしているのはお前で、一般的にはそれはバグとは言わない。 同様の件なら踏切や横断歩道もバグになる。勿論高架や歩道橋にするべきではあるが。 昨年の観光バス横転事故(フェード現象らしい)もバグではなくブレーキの仕様だ。仕様バグでもない。 ホームドアもそれなりに普及して、 あらゆる物がある程度デタラメな操作(=ホームの端を歩く)しても安全になっては来ているが、 素人がどんなデタラメをやっても安全とはなってないし、ならない。 プログラミングに関しては今後とも「正しい操作をした場合に正しく動く」でしかないだろうよ。 不親切なのはその通りだし、改善はしていくだろうけども。 >>645 公式見る限りPHPからは気にする必要なさそうだが違うのか? なおutf-8も8bit使ってるから駄目だと思うぞ。 今更8bitが通らない環境なんてないし、有ったとしてもそんなところにメール出してないのも事実だが。 IPv6みたいに誰かが音頭取って更新を促さない限り無理だが、今のところ聞いたこと無いね。
647 名前:デフォルトの名無しさん (ワッチョイ 0663-hRAP) mailto:sage [2023/07/06(木) 22:53:42.84 ID:5cWvOTk60.net] 素人が脆弱性を突いてくる説
648 名前:デフォルトの名無しさん (アウアウウー Sabb-JtsX) mailto:sage [2023/07/07(金) 02:29:15.80 ID:u6t7w3p4a.net] Java は、ログ機能にセキュリティーホールがあって、 Edge から、パスワードを抜かれますと報告が来た セキュリティー更新せず、ほったらかしのサイトが山ほどある
649 名前:デフォルトの名無しさん (ワッチョイ 86bb-p0MK) mailto:sage [2023/07/07(金) 07:55:50.16 ID:84NzU0uw0.net] >>643 >>647 結局何を脆弱性って言ってんだよ… 素人が脆弱性って言いたかっただけってこと?
650 名前:デフォルトの名無しさん (ワッチョイ 86bb-p0MK) mailto:sage [2023/07/07(金) 23:44:08.79 ID:84NzU0uw0.net] >>645 なんかちょっと勘違いしてる気がする 昔のブックマークから拾い上げてみたんで読んでみて https://blog.tmtms.net/entry/2014/12/06/postfix-8bit
651 名前:デフォルトの名無しさん (ワッチョイ ce8b-/jfo) [2023/07/17(月) 13:54:48.52 ID:pZjB1XDE0.net] テスト
652 名前:デフォルトの名無しさん (ワッチョイ 9b5f-5LlG) [2023/07/18(火) 14:26:46.55 ID:2j+5uZca0.net] ネットで見つけた掲示板のサンプルがクソでした 更新ボタン押すと同じ書き込みが繰り返されてしまうのです どうすれば解決しますか? ほんとプログラミングはクソ記事多くて困りますね え?クソはおまえだ? ごもっとも
653 名前:デフォルトの名無しさん (アウアウウー Sab5-5LlG) mailto:sage [2023/07/19(水) 05:05:41.80 ID:mXhymdyPa.net] jQuery なら、 <button id="btn_1"> <span class="show-when-enabled">送信</span> <span class="show-when-disabled">送信中...</span> </button> <button id="btn_2">送信ボタンをenable にする</button> <style> button .show-when-enabled { display: initial; } button[disabled] .show-when-enabled { display: none; } button .show-when-disabled { display: none; } button[disabled] .show-when-disabled { display: initial; } </style> <scr@ipt> $( function ( ) { $( '#btn_1' ).on( 'click', function ( event ) { $( this ).prop( 'disabled', true ); // disable にする } ); $( '#btn_2' ).on( 'click', function ( event ) { $( '#btn_1' ).prop( 'disabled', false ); // enable にする } ); } ); </scr@ipt>
654 名前:デフォルトの名無しさん (オッペケ Sr39-4jI1) mailto:sage [2023/07/19(水) 08:14:40.70 ID:sz/H8H6wr.net] Ruby病(その割に技術は中の下レベル)の人は jquery推しでもあるのか Railsとvueやreactを同時に使う例は幾つかあるな phpだとlaravelはvueとの相性抜群だがreactは今一つ CakePHPだとどっちも簡単ではないか CakePHPはJquery使った例が多いなあ Pythonのdjangoはvueもreactも実装例豊富 Javaのtomcatはvueは何とかなるがreactだとやることも限られてる?というレポートがある Goは何と相性いいかな
655 名前:デフォルトの名無しさん (ワッチョイ 9b5f-5LlG) mailto:sage [2023/07/20(木) 13:07:15.80 ID:qnO4Vavr0.net] printとechoの違いがわかりません ぐぐっても説明が下手な文章ばかりで理解できません 理数系の人間は文章の書き方も少しは勉強したほうがいいのではないでしょうか? え?勉強しろはおまえだ? ごもっとも
656 名前:デフォルトの名無しさん (ワッチョイ b6e7-/jfo) [2023/07/20(木) 15:39:21.26 ID:x9stnx4l0.net] >>655 PHPは公式マニュアルが信じられないくらい丁寧でわかりやすくまとまっているから なにをさておいても公式マニュアルを読め わかるわからないを言い出すのはかならずマニュアルを読んだあとにしろ
657 名前:デフォルトの名無しさん (ワッチョイ 7349-9/0y) mailto:sage [2023/07/20(木) 16:19:17.66 ID:hZ7hjedN0.net] もちろん、お手伝いします! PHPにおける`print`と`echo`の違いについて要約して説明しますね。 - `print`: `print`は関数ではなく、言語構造です。値を出力するために使用されます。 値を出力した後、1を返します。また、引数を一つしか受け付けないという制約があります。例:`print "Hello, world!";` - `echo`: `echo`は言語構造または関数として使用できます。値を出力するためにも使用されますが、`print`とは異なり、返り値を持ちません。 カンマを使って複数の引数を受け取ることができます。例:`echo "Hello", " ", "world!";` どちらも基本的には同じように動作しますが、`echo`がやや効率的で多くの引数を出力する場合にわずかに速い場合があります。 理解に役立てば幸いです!もし他に質問があればどうぞお知らせください。
658 名前:デフォルトの名無しさん (ワッチョイ 30a9-hELD) mailto:sage [2023/07/20(木) 16:56:18.77 ID:gjufsyfM0.net] 横だがGPT-4に小学生にでもわかるよう聞いてみた --- それらの違いを小学生にも分かるように説明すると、 「printとechoは友達と話す方法だと考えてみてください。 print君は一度に一つのことしか話せないけど、その後に自分がちゃんと話したかどうか(つまり1という値)を教えてくれます。 一方、echo君は一度にたくさんのことを話すことができますが、自分がちゃんと話したかどうかは教えてくれません。 だから、それぞれの友達(つまり命令)は自分が何をしたいかによって選ぶといいです。」
659 名前:printとechoの違い (ワッチョイ 9b5f-5LlG) mailto:sage [2023/07/20(木) 18:33:40.90 ID:qnO4Vavr0.net] なるほどよくわかりました サイト記事書く人は専門用語ばかり使って、初心者につたわらない文章しか書けないので ここの解説はとてもわかりやすいです ググって検索に出てくる邪魔な解説は消えてなくなれですね え?おまえが消えてなくなれって? ごもっとも
660 名前:デフォルトの名無しさん (スップ Sd94-5Rmv) mailto:sage [2023/07/20(木) 21:59:07.70 ID:WRqu6H4qd.net] printが1を返してくれるとしても、それが役立つ場面がわからない どんな場面で役立つのだろうか
661 名前:デフォルトの名無しさん (ワッチョイ e75f-Nw73) mailto:sage [2023/07/20(木) 23:11:22.17 ID:zS5YoEfg0.net] >>655 アホみたいな文章書いてる暇あったら公式リファレンス読んどけ、多分一番しっかり書かれてるから
662 名前:デフォルトの名無しさん (ワッチョイ 9b5f-5LlG) [2023/07/21(金) 23:03:50.96 ID:hNucA2BH0.net] >>661 読んでも全然わからない 公式が一番わかりにくい
663 名前:デフォルトの名無しさん (ワッチョイ 6cac-tCaK) mailto:sage [2023/07/21(金) 23:58:06.25 ID:GYeyeRXL0.net] 専門のことしてるのに専門用語を理解しようとしないのはどうかと思うぞ 噛み砕いて教えるのは、相手が専門外のお客様(生徒含む)のときくらいだろ
664 名前:デフォルトの名無しさん (ワッチョイ a77b-XNrL) [2023/07/22(土) 00:30:59.57 ID:HIe68VRv0.net] >>662 みんなが分かりやすいと言ってる公式を読んでも分からないのは、お前の知能の問題。 現時点でPHPerの中でも最底辺確定だし、向いてないから止めとけ。
665 名前:デフォルトの名無しさん (アウアウウー Sa2b-/4N/) mailto:sage [2023/07/22(土) 01:45:53.25 ID:fDI/VGosa.net] print は言語構造だとか、こんな訳の分からない言語をやっても無駄。 特に初心者は、情弱ビジネスに引っ掛かった。 素人に、PHPを勧める香具師が一杯いる YouTube で有名な雑食系エンジニア・KENTA は、 PHP, Scala をオワコン認定して、 初心者のキャリアパスは、Rails → Go だけと言ってる ガーシーのサロンで使っていたMastodon は、 PHPから、Ruby on Rails 6 に変わった 米国年収でもRubyは、Go/Rust/Elixir の3大言語を超えた。 PHP, Dart は生活保護レベル Ruby, Elixir : 9.3 万ドル Go : 8.9 Rust : 8.7 多くの言語 : 6.5〜7 PHP : 5 Dart : 4.4 100人の言う事よりも、KENTAの言う事の方が、間違いなく正しい! なぜかというと、100人よりも研究しているから
666 名前:デフォルトの名無しさん (ワッチョイ e7a7-rRCM) mailto:sage [2023/07/22(土) 02:11:03.31 ID:tE4RMivO0.net] Rubyistが金持ちだかなんだか知らないけど こんなとこでキチガイみたいなレス続けてるお前の年収なんかたかがしれてんだから 人の心配なんてしないで自分の心配しとけな
667 名前:デフォルトの名無しさん (ワッチョイ bf5f-onGn) [2023/07/22(土) 15:06:33.58 ID:UxG3EoFv0.net] >>662 本当に「読んだ」のか? お前はただ「見た」「眺めた」だけじゃあないのか? わからないならわかるまで読め。 わからない単語はすべて検索しろ。 100回読め 中学高校で嫌になるほど勉強の仕方を勉強してきてるんだから、そのくらいはやれ
668 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 13:33:47.77 ID:7OoRnNP6d.net] 格納するDBのカラムの型がintの場合に、POSTデータの初期化処理は 次のどちらが良いのでしょうか? $value = isset($_POST['value']) ? $_POST['value'] : '';//空文字 $value = isset($_POST['value']) ? $_POST['value'] : 0;//整数0 前者は、ポストデータは文字列なので空文字で初期化しています 後者は、DBのカラムがintなので整数0で初期化しています どちらもその後にデータチェック及びサニタイズはします
669 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 13:55:32.28 ID:7OoRnNP6d.net] 補足です $_POST['value']には、整数が入力されることを想定しています よろしくお願いします
670 名前:デフォルトの名無しさん (ワッチョイ 0ba7-IjPS) mailto:sage [2023/08/03(木) 15:48:42.48 ID:zTGCMZ+m0.net] 格納するDBのカラムにデフォルト値がセットされていればデフォルト値に合わせるか何も入れない セットされていないなら入力がmustってことなので とりあえず格納が可能になるよう0にしてしまうとかいう発想がおかしいので入力しろとエラーを返すべき
671 名前:デフォルトの名無しさん (ワッチョイ 0ba7-IjPS) mailto:sage [2023/08/03(木) 15:50:08.52 ID:zTGCMZ+m0.net] not null制約かどうかは書いてなかったね まあそのカラムの性質によるとしか
672 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 16:23:03.22 ID:7OoRnNP6d.net] >>670 ありがとうございます >>デフォルト値に合わせるか「何も入れない」 >>格納が可能になるよう0にしてしまうとかいう発想がおかしいので「入力しろとエラーを返すべき」 この2点を考慮すると、空文字で初期化するのが正しいようですね POSTデータが空なのだから、空文字で初期化して、データチェックで 空の場合をエラーとして弾くのが正解な気がしてきました
673 名前:デフォルトの名無しさん (スップ Sd8a-kJnY) mailto:sage [2023/08/03(木) 19:00:43.99 ID:boco8q6Md.net] POSTの必須チェックはemptyで十分(暴論)
674 名前:デフォルトの名無しさん (スップ Sd8a-VFKZ) mailto:sage [2023/08/03(木) 20:11:24.13 ID:7OoRnNP6d.net] $value = $_POST['value']; これだと値がセットされていない場合にNoticeエラーが出るんですよね それで、emptyやissetが使わていたように思います もっとも最近では、filter_inputが推奨されているようで すでにfilter_inputが主流になっているのでしょうか
675 名前:デフォルトの名無しさん (ワッチョイ be63-1j9t) mailto:sage [2023/08/03(木) 20:29:00.58 ID:K+C7K/360.net] どうやるかは色々流儀があると思うけれど 何故そうするのかを知っておくことは大事だと思う
676 名前:デフォルトの名無しさん (ワッチョイ 2a01-58Wo) mailto:sage [2023/08/03(木) 21:42:47.27 ID:NRjs0yDQ0.net] フォームの項目が動的に変化するタイプとかで そもそもクライアントから送信されてない項目を参照しようとしてるんじゃないの?
677 名前:デフォルトの名無しさん [2023/08/08(火) 08:38:58.74 ID:GtqdAqIbF] タ゛サヰ夕マ県民は住民の生命と財産を破壞する世界最悪の殺人テ囗組織公明党に推薦され、カによる―方的な現状変更によってタ゛サイ夕マまで 数珠つなき゛て゛鉄道の3Ο倍以上もの莫大な温室効果ガスまき散らすクソ航空機を倍増させて気侯変動させて海水温上昇させて、かつてない量の 水蒸気を日本列島に供給させて越谷や川越など、あちこち水没させられながら強盗殺人の首魁齋藤鉄夫と共謀して私利私欲を追求し続ける大野 元裕人殺し知事を落選させてタ゛サイタマの汚名を払拭しよう!熊谷どころかタ゛サヰタマ全域を灼熱地獄にして熱中症で殺害,クソ航空騷音に よって知的産業根絶やしどころか,ストレスやらで救急搬送されたり.耐えられす゛引っ越しを余儀なくさせられた住民まで発生させて、憲法 1з条25条29条と公然と無視して住民の私権を根底から奪い取ることで私腹を肥やし続ける知事を続けさせて殺されないて゛済むと思うなよ 庁舍が住民に破壊される民主主義國フランスに対して日本は絢爛豪華な庁舎で冷房カ゛ンカ゛ン,クソの役にも立たないと゛ころか住民の権利を強奪 して私腹を肥やすこと以外に何ひとつ考えることのないクソ公務員を放置することこそか゛,お前らの生活と国家の存亡の危機だと理解しよう! 創価学會員は.何百萬人も殺傷して損害を与えて私腹を肥やし続けて逮捕者まて゛出てる世界最惡の殺人腐敗組織公明党を 池田センセーか゛口をきけて容認するとか本気で思ってるとしたら侮辱にもほと゛があるそ゛! hTΤΡs://i、imgur,com/hnli1ga.jpeg
678 名前:デフォルトの名無しさん (ワッチョイ aba7-SCbl) mailto:sage [2023/08/07(月) 17:05:23.27 ID:g4YHb1dg0.net] >すでにfilter_inputが主流になっているのでしょうか PHP5.3あたりではまだissetが当たり前だったけど PHP5.4あたりからfilter_inputの記事が多くなった気がしたな PHP7になってからはnull合体演算子(??)もissetの代替であげられるけど filter_inputがよく使われてる気がする 高精度ではないけどそれでいいなら用意されてるフィルタである程度バリデーションできるし なんならコールバックのユーザ定義関数でもフィルタリングできるし あまりごちゃごちゃ書かないですむメリットもある
679 名前:デフォルトの名無しさん (ワッチョイ df10-D1BR) mailto:sage [2023/08/08(火) 16:45:09.01 ID:P3IKMInR0.net] でも、AIに質問するとissetの例を出してくるよ
680 名前:デフォルトの名無しさん (スップ Sdd7-a4kh) mailto:sage [2023/08/08(火) 21:06:35.11 ID:InM7lKihd.net] >>678 ありがとうございます。とても参考になりました 公式サイトをしっかり読めばいいのだけど、個々の文法の解説がメインで 流れのあるチュートリアルとしては弱いんだよね もちろん公式サイトの充実ぶりにはとても感謝しています PHP8に準拠したお手本となるようなPHP本が出るといいなぁ
681 名前:デフォルトの名無しさん (ワッチョイ 915f-OkRc) mailto:sage [2023/08/10(木) 16:13:43.00 ID:+eZjCzx+0.net] それぞれのメリットを教えてくれ AI: filter_inputとissetを使用したバリデーションには、それぞれ異なる目的とメリットがあります。以下にそれぞれの関数の特徴とメリットを挙げてみます。 1. filter_input: 目的: filter_inputは、入力データ(例:POSTやGETからのデータ)をバリデーションおよびサニタイズするための関数です。 メリット: サニタイズ: さまざまなフィルタを使って、データをクリーンにすることができます。例えば、文字列としてのメールアドレスを取得することができます。 バリデーション: 予期しないデータや危険なデータを防ぐための具体的なルールを適用することができます。 セキュリティ: filter_inputは、セキュリティ上の理由から直接的なスーパーグローバル変数($_POSTや$_GET)へのアクセスを回避します。 2. isset: 目的: issetは、変数がセットされているかどうかをチェックするための関数です。変数がセットされており、NULLでない場合にTRUEを返します。 メリット: シンプル: コードの意図が明確で、変数が存在するかどうかを簡単にチェックできます。 パフォーマンス: issetは非常に高速で、ほとんどの場面でのオーバーヘッドがありません。 NULLチェック: 変数がNULLかどうかも同時にチェックします。 結論: issetは変数の存在をチェックする場面で主に使用され、filter_inputは変数の値を検証・サニタイズする場面で使用されます。 セキュリティや入力のバリデーションが関わる場面では、filter_inputの使用が推奨されます。一方、単純に変数の存在を確認したい場合や、パフォーマンスが重要な場面では、issetの使用が適しています。 状況やニーズに応じて、適切な関数や方法を選択することが大切です。
682 名前:デフォルトの名無しさん (ワッチョイ 9aa9-i0IF) mailto:sage [2023/08/18(金) 05:27:16.73 ID:+mar7LqR0.net] チェックボックスでレコードに関するフラグをmariadbに登録する時は php内ではtrue, falseと、1,0で条件分岐どっちがいい? mariadbはtrue, falseのboolで保存できないので、結局取り出すときは1と0の文字列になるけど どういう管理というかルールにしたら良いか迷ってます
683 名前:デフォルトの名無しさん (ワッチョイ 76e7-eQmn) mailto:sage [2023/08/18(金) 11:22:44.15 ID:MbvK7wD/0.net] >>682 0か1の数値にすると良いでしょう。 文字列はやめましょう。
684 名前:デフォルトの名無しさん (スップ Sdba-ORuG) mailto:sage [2023/08/18(金) 19:35:38.53 ID:2Xzv42cCd.net] >>682 0か1の整数型だね INSERTをする前に値をintvalする SELECTをした後に値をintvalする PHPの内部ではint型として扱い、厳密な比較をする ただしPOSTされた時点では文字列なので、バリデーションは文字列として扱う もっともチェックボックスだとチェックがないと、たぶん値が何も来ない
685 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/19(土) 20:10:29.17 ID:28+RhaxH0.net] >>683-684 ありがとうございます。 初学者なのでtrueとかfalseとか憧れてそれで作っていましたが、db周りの出し入れをしているうちに キャストに統一性が無い感じがモヤモヤしていました。 フラグのチェックボックスは filter_input(INPUT_POST, 'hoge', FILTER_VALIDATE_BOOLEAN) を使っていました。 チェックボックスにチェックが無い場合はデータベースに入れる前に三項演算子で isset($_SESSION['hoge']) ? 1 : 0; isset($_SESSION['hoge']) ? 1 : 0; フラグのありなしをつけてinsert, updateしていますが、確かに整数に揃えたほうが良かったですね。
686 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) [2023/08/19(土) 23:28:02.55 ID:2LFpxJcr0.net] >>685 おい、一応言っておくが、>>683-684 は間違ってるぞ。 PHP内はtrue/falseで作るのが正しい。 つかちょっと考えれば分かるだろ。 お前はDBを変更した際に、そのDBがtrue/false使えたら全部書き直すつもりなのか? DB依存事項はDB側に押し込むのが基本。mariaはPDOには無いようだが、 理想的にはそういったDBアクセスラッパに押し込んでしまって、 PHP側はDB依存無し、つまりtrue/falseで書いてしまうのが正しい。 それでラッパ内で自動的にtrueを"1"、falseを"0"に変換させる。 逆に読み出しの場合、"1"をtrueに、"0"をfalseにするわけだが、 型あり言語の場合はこの辺、文字列の"1~"0"とは型で区別出来るが、 PHPの場合に実際どうするのかはよく知らん。 が、ともかく、DBアクセスラッパ内で逆変換してしまうのが正しい。 というかそうしないとDB変えただけで全部書き換えが必要になるだろ。 てなことは今のお前でも考えれば分かるはず。お前らは考えなさすぎ。 つっても俺の意見はプログラミングの一般論であって、 PHPなりのなんか変なノウハウがあって数字の方がいいのかどうかは分からん。
687 名前:デフォルトの名無しさん (ブーイモ MM4b-Wgo7) [2023/08/20(日) 04:33:24.24 ID:fG8Y/bhcM.net] ワイ独学自称中級者 一連のやりとりを見て自信を無くして震える (((( ;゚Д゚)))ガクガクブルブル
688 名前:デフォルトの名無しさん (ワッチョイ 5b5f-hPrW) mailto:sage [2023/08/20(日) 12:55:06.37 ID:4PrSYObq0.net] >>686 >そのDBがtrue/false使えたら全部書き直すつもりなのか? そういうDB依存、言語依存をしないために、そもそもDBに1,0をかきこむんじゃ true/falseなんて多言語で一番共通の無い概念じゃけえの
689 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) mailto:sage [2023/08/20(日) 13:35:51.35 ID:Vn08TQPe0.net] >>688 > 言語依存 > 多言語で いや今はPHPでどうするかの話だろ。 そしてmariaは知らんが686の通りなら文字型しかないDBなんだろ。 そういうDBが有ってもおかしくない。DBではないがJSのlocalStorageとかそうだし。
690 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) mailto:sage [2023/08/20(日) 13:59:49.50 ID:Vn08TQPe0.net] >>682 てか調べてみたらmariaにbooleanあるんですが? https://mariadb.com/kb/ja/data-types/
691 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 14:18:19.62 ID:HzS5SUnX0.net] Synonym for TINYINT(1)と書いてあるだろう
692 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 15:08:55.86 ID:6IMFV5dJd.net] フラグとして変数を定義するとき、ブーリアン型を用いることがほとんどである。 ブーリアン型は「真」(フラグが立っている)および「偽」(フラグが立っていない)のみを値として受けつけ、 都合が良いからである。 https://ja.wikipedia.org/wiki/フラグ_(コンピュータ) 「1|0」でなく「true|false」を使うことに有用性はありますか? https://teratail.com/questions/307035
693 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/20(日) 15:10:00.51 ID:GxzweHHZ0.net] TINYINTには、0と1以外の値も入る
694 名前:デフォルトの名無しさん (スップ Sdf3-CvT1) mailto:sage [2023/08/20(日) 16:20:48.91 ID:ssGBE3vxd.net] MySQLのtinyint(1)って1ビットってことだから0か1になるんじゃ? 登録するまでに型変換だのなんだのするの個人的には嫌だからtrue falseで良いと思うけど
695 名前:686 (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/20(日) 17:51:30.99 ID:fCXPEraA0.net] すいません、間違えていました >mariadbはtrue, falseのboolで保存できないので、結局取り出すときは 誤:1と0の文字列になるけど 正:結局取り出すときは1と0の数値になるけど です。tinyint(1)なので数字の1と0です。 最悪なところ書き間違えていました・・・ phpしか使わないので チェックボックスのvalue=1をintvalにしてdbに入れる 確認画面とかで評価するときは===1で厳密に評価するのが初学者向きなのかな? mariadbに入れるまではtrue,falseがdbに入れられないことに気付かなかったです。
696 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 18:02:22.04 ID:HzS5SUnX0.net] >>694 tinyintは1バイト tinyint(10)としても1バイト >>695 DB側では数値の1と0でもドライバや設定によっては PHP側では文字列の”1”と”0”で取得されたりするので気をつけて PHP特有の落とし穴
697 名前:デフォルトの名無しさん (ブーイモ MMb3-wGig) mailto:sage [2023/08/20(日) 18:07:23.77 ID:5gYLv8ZUM.net] >>696 pdo使え
698 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/20(日) 18:14:41.61 ID:fCXPEraA0.net] >>696 exucuteからforeachで$hoge = intval(row['is_hoge']); のように取り出そうと思います、間違っていたらごめんなさい。 pdoとプレースホルダを使っています。
699 名前:デフォルトの名無しさん (オッペケ Sr0d-eja4) mailto:sage [2023/08/20(日) 21:21:03.15 ID:7sa3oVfBr.net] これだからphpは欠陥言語なんだよな 他の言語じゃ起こり得ないことがphpでは当たり前のように起こる
700 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 21:37:23.85 ID:6IMFV5dJd.net] phpMyAdminだとBOOLEANは、NUMERICのカテゴリで数値扱い 上にもある通りtinyint(1)とされる 型をBOOLEANに設定してデフォルト値をtrueにしても、結局は1と表示される
701 名前:デフォルトの名無しさん (スップ Sdb3-qQSq) mailto:sage [2023/08/20(日) 21:50:07.54 ID:6IMFV5dJd.net] >>682 正統なやり方はこうするのかもね trueかfalseの論理型として扱う INSERTをする前に値をboolvalする SELECTをした後に値をboolvalする PHPの内部ではbool型として扱い、厳密な比較をする
702 名前:デフォルトの名無しさん (ワッチョイ 317b-vj3y) [2023/08/20(日) 22:44:11.23 ID:Vn08TQPe0.net] >>699 PHPがってわけではなく、型無し言語なのが問題なのだが、 PHPerが上達してない原因はこの辺なのか、とは思ったね。 型あり言語だと悩む必要もなく、コードも必要なく、true/falseが使える状況だからね。
703 名前:デフォルトの名無しさん (ワッチョイ 1301-/Wom) mailto:sage [2023/08/20(日) 22:47:18.44 ID:HzS5SUnX0.net] >>697 数値を文字列で返して長らく平気な顔してたのは まさにそのPDOさんなんですけどねw
704 名前:デフォルトの名無しさん (ワッチョイ 93a9-6Nwt) mailto:sage [2023/08/21(月) 00:15:50.88 ID:lueNEGoD0.net] え?pdoってデータベースのカラムを取ったとき、そのカラムの型じゃないの? てっきり入っている型のまま変数に入ってると思ってた
705 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/21(月) 00:21:37.41 ID:EVtKvg8p0.net] データーベースサーバーとのやり取りは文字列の方がやりやすくないか?
706 名前:デフォルトの名無しさん (オッペケ Sr0d-Uf20) mailto:sage [2023/08/21(月) 08:08:10.49 ID:dxSskb/Zr.net] データベースを意識しない場所ならtrue/falseにするね そういう風に出来るから
707 名前:デフォルトの名無しさん (ワッチョイ 59a7-0WDc) mailto:sage [2023/08/21(月) 14:47:43.04 ID:tiKxyOXL0.net] >>702 おんぶにだっこな生ぬるい型あり言語と違って 悩んで正解を見つける能力がPHPerには備わっているはずなんです
708 名前:デフォルトの名無しさん (スップ Sdb3-CvT1) mailto:sage [2023/08/21(月) 16:06:41.44 ID:YnwB8X1pd.net] プログラム言語の歴史としてなぜ型なしが流行っちゃったの?
709 名前:デフォルトの名無しさん (ワッチョイ 7101-QMpP) mailto:sage [2023/08/22(火) 14:21:40.44 ID:TUFRZPBf0.net] 型なしは流行るし、 voidで自動型宣言なるし、 楽になったのか、間違いを増やしたのか わからんなー
710 名前:デフォルトの名無しさん (ワッチョイ 2b63-/QKx) mailto:sage [2023/08/22(火) 14:56:09.51 ID:pwoAZKv30.net] C++だと any なんて型というかクラスがあるんだよな
711 名前:デフォルトの名無しさん (ワッチョイ d95f-lN7b) mailto:sage [2023/08/29(火) 11:57:24.32 ID:MQh5oOBF0.net] オブジェクト指向ってサブルーチンみたいなものでつか?
712 名前:デフォルトの名無しさん (テテンテンテン MMde-QSEj) [2023/08/29(火) 13:22:07.40 ID:vhEPFWr5M.net] 全然違います 車に例えた例で学んでください
713 名前:デフォルトの名無しさん (アウアウウー Sa11-VnR5) mailto:sage [2023/08/29(火) 13:29:22.50 ID:ud/hz0aHa.net] 本気で言ってるとは思わないが 「型無し言語」と言われているものはホントに型が無い訳じゃないからな
714 名前:デフォルトの名無しさん (ワッチョイ a9a7-vHpx) mailto:sage [2023/08/30(水) 00:27:17.06 ID:HAfLNzeH0.net] オブジェクトの持つ振る舞い=メソッドを記述するのにサブルーチン(PHPの場合関数という)を使うが それイコールオブジェクト指向みたいな単純な話じゃないから ここで説明するのは難しい話だし到底理解出来ないと思うから勉強してくれとしか言いようがないね
715 名前:デフォルトの名無しさん (スップ Sdea-KdZ8) mailto:sage [2023/08/30(水) 22:39:46.76 ID:6rYffRE+d.net] オブジェクト指向の習得ならJavaの基礎やってから デザインパターンの学習がおすすめ 回り道だけどPHPにも役立つ
716 名前:デフォルトの名無しさん (アウアウウー Sa11-FmU/) mailto:sage [2023/08/31(木) 06:13:11.51 ID:3AELC/LBa.net] オブジェクト指向は、Ruby さらに、メソッドチェーンで関数型っぽく書ける
717 名前:デフォルトの名無しさん (ワッチョイ caa9-1lN6) mailto:sage [2023/08/31(木) 06:52:40.61 ID:iJCUhZwo0.net] クラスがまだ理解できないわ ユーザ関数をまとめた塊が分身の術を使う感じ? お問い合わせフォームみたいな小さなプログラムでも クラスを使って作ることができるのかな
718 名前:デフォルトの名無しさん (ワッチョイ 4abd-QSEj) [2023/08/31(木) 09:48:57.13 ID:FDRwTnoH0.net] 無理して使わなくても良い 単純なお問い合わせフォームなら不要だね
719 名前:デフォルトの名無しさん (スフッ Sdea-v2/v) [2023/08/31(木) 09:57:25.50 ID:dkvwQp2/d.net] PHPは出生が貧しい
720 名前:デフォルトの名無しさん (ワッチョイ c149-mWiY) mailto:sage [2023/08/31(木) 10:22:39.01 ID:ByL0JcT30.net] Laravelのサンプルでも見てチュートリアルとかこなしてなんか作ってれば、 そのうち分かってるよ
721 名前:デフォルトの名無しさん (ワッチョイ 355f-oH/7) mailto:sage [2023/08/31(木) 12:57:53.71 ID:b45Q9Hkb0.net] 管理や使いまわしがしやすいように作るひな形だからね オブジェクトの変数と関数を定義したひな形
722 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:18:55.37 ID:WloaiZHG0.net] javascript のlocation.href やlocation.replace をPHPで書きたいのですがうkpまく検索できないのでググるときのキーワードだけでも教えて欲しいです
723 名前:デフォルトの名無しさん (ワッチョイ d67c-9TAE) mailto:sage [2023/08/31(木) 22:24:38.53 ID:tdunP8yV0.net] header関数
724 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:30:55.24 ID:WloaiZHG0.net] ありがとうございます😭 出てきました。ちなsmartyだとこうですよね {php} header ('Location: somepage.php'); {/php}
725 名前:デフォルトの名無しさん (ワッチョイ fe5f-TDjq) mailto:sage [2023/08/31(木) 22:32:04.49 ID:FVCzIIes0.net] smartyってまだ使われてるんだね これからも頑張って
726 名前:デフォルトの名無しさん (ワッチョイ 8663-JwXX) [2023/08/31(木) 22:53:46.94 ID:WloaiZHG0.net] ありがとうございます😊
727 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 12:50:01.84 ID:CI/feD+E0.net] ごめんなさい、知恵をお貸しください。php xamppa(v3.3.0)です。 $sql = 'select * from table where ty=1'; foreach ($stmn as $row) { $ir = $row['ir']; $gt = $row['gt']; if ( ($ir == $ro) && ( $st == 0) ) { $gtx = $gt; $st = 1; } } $res = setcookie($gtx , $gtx , time()+10000 ,'/'); 抜粋なのでご了承ください。 DBのtableに tyで選別したデータgt(a1,a2,a4,a8があるとします)から ir(1,2,3,4)があるとします。 $ro(3とします)と一致するデータ 、この場合a4が取れてgtxにはa4が残り a4:a4というクッキーが1つ出来るはずですが、a1、a4という2つのクッキーができてしまいます。 かならずDB最初の値でクッキーが出来るのです setcookieはループもせず、前後にecho をつけても1回分しかecho表示せず でも2種類のクッキーが作成されるということは、ループの外でもループ内を2回は動いているのでしょうか。 それともおま環でしょうか。 なにか解決策があるならご教授お願いしたく思います。 よろしくお願いします。
728 名前:デフォルトの名無しさん (ワッチョイ c149-TDjq) [2023/09/01(金) 14:02:31.58 ID:1IEXqOVA0.net] Bardに訊いといた(ChatGPTがエラー履いて動かない https://bard.google.com/share/d8125bab3ab9
729 名前:デフォルトの名無しさん (ワッチョイ 4abd-QSEj) [2023/09/01(金) 14:11:47.16 ID:BMZCfruh0.net] 答える前に日本語の解読が大変
730 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 14:19:15.56 ID:CI/feD+E0.net] >>728 ありがとう。 本環境では$st初期化はforeachの外にあります。 本来DBの内容から1回しか処理しないハズでしたが、動作がオカシイのであえて$stを組んだのですがそれでもダメでした。 foreach外でsetcookieは1回しか動かないはずが、foreach内のループで得られたであろうデータをなぜか取得しcookieを作るので おま環説も疑ってます。 >>729 ありがとう、上手く説明できなくてごめんなさい。
731 名前:デフォルトの名無しさん (ワッチョイ c149-TDjq) [2023/09/01(金) 15:06:01.85 ID:1IEXqOVA0.net] しらんけど書いてないところがおかしいんやろ こっちはお前と違って各変数の略称や意味もよくわからん stmnってなに?ステートメント?なんでそこからrow? irってなに?gtってなに?greater than?じゃあgtxってなに? stってなに?stmnの一部か何か? 選別って何?selectのことwhereのこと?じゃあgtはカラム?なんでわざわざ別の変数に代入するの こっちはプログラム全部も見れないのに考えてられっかって感じ こういうのは試しに、一行ずつ超細かい数行のメソッドに分割してテストすれば整理されて分かったりするから 後で戻すにせよ、ひとつずつ丁寧に見てけよ それか自分でChatGPTなりにコード全部はって聞いてけ てかリーダブルコード読め
732 名前:デフォルトの名無しさん (ワッチョイ 9d90-NK/z) mailto:sage [2023/09/01(金) 16:08:01.02 ID:CI/feD+E0.net] >>731 ありがとう。 そうですね、全体で見ないと判らないところもありますものね。 その言葉で全体を見直したら、解決しました。 jquary でした。 使わなくなった <script jquary……> が残っていたので、これを削除することで クッキーのダブりは解消されました。 助かりました、ありがとうございました。
733 名前:デフォルトの名無しさん (ワッチョイ b3ad-+GqY) [2023/09/02(土) 12:33:53.90 ID:ww4K2aY50.net] お疲れ様です PHPで trueの場合だけの処理ってやっぱりありませんかね?
734 名前:デフォルトの名無しさん (ワッチョイ b3ad-+GqY) [2023/09/02(土) 12:34:18.26 ID:ww4K2aY50.net] ifなしで三項演算子とかで
735 名前:デフォルトの名無しさん (ブーイモ MMe7-fPXT) mailto:sage [2023/09/02(土) 14:43:30.09 ID:vtSM1xnBM.net] >>734 switch文を使う方法があります。 trueだけの場合、条件式をtrueにして、defaultを使います。
736 名前:デフォルトの名無しさん (ワッチョイ ffa9-djYJ) mailto:sage [2023/09/02(土) 17:09:18.51 ID:py0xcZf30.net] 三項演算子を初めて知ったとき、1行で終わるスマートさに感動したわ
737 名前:デフォルトの名無しさん (ワッチョイ cf63-0HOd) [2023/09/02(土) 22:08:20.07 ID:9i23krRm0.net] 三浦恵理子
738 名前:デフォルトの名無しさん (ワッチョイ 035f-5p+d) mailto:sage [2023/09/03(日) 12:09:52.12 ID:3hgdrBDA0.net] >>736 直感的でわかりやすいしあれはいいもんだ
739 名前:デフォルトの名無しさん (アウアウウー Sae7-fXI3) [2023/09/03(日) 13:21:40.48 ID:jFAGdbdCa.net] >>737 webクロールか
740 名前:デフォルトの名無しさん (ワッチョイ 6f5f-ATpV) [2023/09/03(日) 17:13:18.35 ID:RZsz0MwY0.net] PHPでもif修飾子が使いたいでゴワス
741 名前:デフォルトの名無しさん (ワッチョイ 7301-+GqY) [2023/09/08(金) 01:30:30.68 ID:EHbxHCsV0.net] フリーランスエンジニアになってからの年収推移を公開【現在年収1000万】 【実体験】仕事ができない新卒エンジニアでも月収70万フリーランスになれる理由 フリーランスエンジニアは年収900万円までは余裕!現役フリーランスエンジニアが徹底解説 フリーエンジニアの平均年収!未経験が年収1000万円を超える方法とは? 月額150万円以上も可能?ITフリーランスで高単価を獲得できる理由 在宅で年収1000万稼ぐフリーランスエンジニアの稼ぎ方【再現できる】 フリーランスのエンジニアやるなら45歳までに貯金5000万円作れないと死ぬ説
742 名前:デフォルトの名無しさん (ワッチョイ e7ad-6jLp) [2023/09/14(木) 16:24:24.43 ID:YnYbg3/U0.net] 【救急出動】 初の700万件突破、急病67.4% https://egg.5ch.net/test/read.cgi/119/1693801319/l50 https://o.5ch.net/21xua.png
743 名前:デフォルトの名無しさん (ワッチョイ ffe1-r5J7) mailto:sage [2023/09/22(金) 03:31:40.72 ID:DUfDR45n0.net] テストに動かしてみたコードとか要らなくなったコードってきちんとした削除手順とかあるの? 普通にゴミ箱ぶっこんでええの?なんか蓄積してたり残ったりする?
744 名前:デフォルトの名無しさん (ワッチョイ ff5f-YZsW) mailto:sage [2023/09/22(金) 20:43:58.56 ID:Il2p6KDs0.net] >>743 蓄積したりといったことはありません そのままごみ箱に入れて大丈夫です それよりもごみ箱のごみはひらがなです 今後は気をつけろ
745 名前:デフォルトの名無しさん (ワッチョイ 8e7c-u/s5) mailto:sage [2023/09/23(土) 13:44:37.26 ID:/3FF//Rt0.net] >>744 ありがとうございます!
746 名前:デフォルトの名無しさん (ワッチョイ 0abd-em0E) [2023/09/29(金) 05:54:25.82 ID:JB7cBWOL0.net] この流れはさすがにネタだよね?
747 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/14(土) 18:52:32.66 ID:FXKPsXcG0.net] >>717 >クラスがまだ理解できないわ >ユーザ関数をまとめた塊が分身の術を使う感じ? > >お問い合わせフォームみたいな小さなプログラムでも >クラスを使って作ることができるのかな 全く同じ。ユーザー定義関数との違いが理解出来ていない自分。 よくクラスを、自動車に例えたり会社に例えてる書籍読むけど分からんのよね。うーん
748 名前:sage (ワッチョイ c963-e7li) [2023/10/14(土) 23:13:33.20 ID:uhuB6VoQ0.net] >>747 既に回答されてる通りだよ。 ただの整理術だから、無くても困らないのなら問題ないし、規模が大きくなれば嫌でも実感出来る。 そして(生の)PHPで学ぶのははっきり言って間違い。 Arrayとか、他言語ならarr.indexOf等、最初からクラスになってるので自然と使えるようになる。 最初からlaravel使った場合も同様。 生のPHPで初心者の規模(3000行以下程度)なら自然と学べる事はなく、無理に使おうとしても余計に混乱するだけ。 本が3冊しかないのに本棚買っても整理も糞もない。本立てで十分だし、そのほうが使い勝手もいい。 初心者の規模で学びたければ、他言語(JS/Go/C#/Java/Python/Rubyのどれでもいい)をやるべき。 どうしてもPHPでやりたければ、laravel使うか大型化させるしかない。
749 名前:デフォルトの名無しさん (ワッチョイ c963-e7li) mailto:sage [2023/10/14(土) 23:15:35.87 ID:uhuB6VoQ0.net] > ユーザー定義関数との違いが理解出来ていない自分。 そもそも違いなんて無い。Goの場合は相互に運用出来るし、 C++やC#の場合はコンパイラが暗黙的に指定してくれるだけ。 一般的には「どう考えても対象を指定するしかないだろ」の場合、インスタンスメソッドにする。 例えば、 $key = array_search('green', $array); // $key = 2; array_searchは「配列の中から探す」のであって「配列」を指定しないと話にならない。なら最初から、 $key = $array->search('green'); と書かせろや糞言語ガー、 しかもsearchでは返り値の型が分かりにくい、インデックスが返ってくるのなら、 $key = $array->indexOf('green'); と書かせろや糞言語ガー、他言語は全部こうやで、というだけ。 array_searchとかいう糞長い名前が必要なのは、名前のスコープが広すぎるからであって、 各メソッドにしてクラス毎の小さなスコープにすれば短い名前でも衝突しない。 これが便利なので使われてる。つまり、便利だ、というだけ。
750 名前:デフォルトの名無しさん (ワッチョイ c963-e7li) mailto:sage [2023/10/14(土) 23:16:34.58 ID:uhuB6VoQ0.net] ただしPHPのも「静的メソッド」として実装する方式では合ってるし、 実際にC++の場合は(仮想関数でない場合は)静的メソッドをコンパイラ支援で呼び出してるから、バイナリ的にも同じ。 同様にC#の場合は上記静的メソッドarray_searchを拡張メソッドとして$array->search形式で 見た目簡単に書けるようにしただけで、C++と同様に同じバイナリを呼び出す。 Goの場合はインスタンスメソッドを静的メソッドとして呼びだしたら(逆だったかも?) 第一引数がthis扱いになるだけ、という、C++やC#がコンパイラにやらせてるのをユーザーも書けるようにしただけ。 要するに、普通の関数(静的メソッド)と(仮想関数でない)インスタンスメソッドには違いはない。楽に書けるだけ。 PHPの場合は(今数分見ただけだが)全部仮想関数(virtual、ただしPHPでは別の意味で使われてるが)っぽいので、 array_searchのような静的メソッドの方が呼び出しがデリファレンス1回分速いという違いはあるが、 PHPの実行速度で気にする話でもない。 そしてオーバーライドしなければ上記の(仮想関数ガー)は全部無視していい。 まあ意味不明だろうが、書き方以外の違いはないという事。 ただ再度言うが、小規模の生PHPをやってる限り、この辺が分かるようにはならないよ。
751 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 09:04:25.58 ID:6aIYZQkKa.net] プログラムをクラスとかメソッドに分ける時の考え方の一つに「自動テストの書きやすさ」もあるよ。 作ったプログラムを今後も手を入れて改修して行くなら、一般的に改修箇所以外が正常動作するか回帰テストする。 プログラムを作る時に自動テストも作っておくと改修時の回帰テストが楽になる。 自動テストが無いと手動で全機能動作確認になって改修時に改修箇所以外の不具合が出やすくなる。 手動で全機能動作確認は手間がかかり過ぎて大変だから回帰テスト不足で「改修前に使えてた機能が使えなくなった」となりやすい。 今後改修しないその場限りのプログラムなら自動テストは気にしなくて良いと思う
752 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/15(日) 12:35:11.36 ID:XVcuYs9l0.net] >>748 エスパーか?ってくらい自分の状況透かされてて驚きました。まさに生のPHPしか触った事なくて1ファイルMAXでも3000行くらいしか書かないです。本棚の例えも恐ろしくわかりやすいです。 現状、会員制のサイトを生で書いたPHPで運用してるけどユーザー定義関数は使っていて、それに対してクラスの概念やユーザー定義関数との違いが理解出来ていない学習度です。 ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで各ページで使ってます。これで事足りていてこの方式とクラスの違いが理解出来ていないという。 おっしゃる通り、このまま生のPHPで学習していてもクラスの概念分からないだろうなと痛感しています。 GitHubで他人のコード見てクラスの書き方見てみたりWordPressもコード見たりするけど、やっぱり理解できず。 Laravelとかフレームワーク使って簡単に何か作ってみるのが良いんだろうなぁ…頑張らねば
753 名前:デフォルトの名無しさん (ワッチョイ c92e-ZDOV) mailto:sage [2023/10/15(日) 12:47:11.76 ID:XVcuYs9l0.net] >>751 さんは別の方かな?レス有難うございます😊 こちらもおっしゃる通りで、機能を追加していく際に「メンテナンスが大変になってきたな…」と思う事がチョコチョコ出てきました。 ユーザー定義関数群をまとめたファイルをメンテナンスする事で自分の中ではある程度改修しやすくしているつもりなんですが、今後大規模な機能追加を考えた時に『クラスを使う使わない以前にクラスの概念を理解出来ていない事そのものがメンテナンスや拡張性を考慮する選択肢や手段の範囲・幅を狭めているのでは?』と考えるようになりました。 個人事業主で頑張ってる(ユーザー定義関数だけで頑張ってる)けどこのままだと株式会社を立ち上げて規模を大きくする事が出来ない(クラスを使って大規模開発出来ない)気がしています。 変な例えで恐縮ですし例えの中の個人事業主⇆会社のどちらが良い悪いというか意味ではありません。 ただ、自分が今如実に感じている感覚を言語化するなら先述のような感覚です。
754 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:52:25.37 ID:BnU34f5b0.net] >>752 > ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで各ページで使ってます。これで事足りていてこの方式とクラスの違いが理解出来ていないという。 その方法でも間違いではないし、問題ない。 ただ(勘違いしてる馬鹿が多いが実は)クラスベースのオブジェクト指向と それ以前の(つまり今751がやってる)手法は連続的に繋がっていて、 そのまま進んでいけば自然とクラスベースのオブジェクト指向に辿り着くものなんだよ。 だから(本来は)わざわざ別に学ぶものでもない。 今現在の「クラス」はC++が定義したものであり、 C++の目的は「Cの糞コードを出来るだけ改変せずに何とかする」事だったから、当然なのだが。 そして > ユーザー定義関数群を取りまとめたファイルを都度includeで読み込んで が実はCの手法そのまんまで、大規模になるとこれが問題となったので「クラス」を導入しただけ。 「クラス」の意味を初心者が理解出来ないのは、使用方法が多岐に渡る為だ。 だから実態を掴みにくい。 だから逆に、単純に入ればいい。 大規模化したCで問題になったのは、「階層」がないこと。だからクラスで「階層」を付加した。 PHPの場合でも同様で、includeした関数はどこからでも呼べてしまい、階層がない。 それで、複数のincludeファイルで同じ名前の関数を定義してしまった場合、バグる。 これに対するアナログ的解決が、「接頭辞を付ける」で、実際PHPだとarray_xxxxとなっている。 ただしこれでも種類が増えると接頭辞内にも"_"を使いたくなってくる。 そしてxxxx_yyyy_zzzzでみたいな関数名になると、接頭辞がxxxxなのかxxxx_yyyyまでなのか見た目分からない。 だから接頭辞内に"_"を使うのは絶対禁止というアナログ解決も可能だが、 ここで明示的に階層を宣言し、"::"で区切る、つまり、array_xxxx は全部 array::xxxxにする、 というのが「クラス」を「階層」とした使い方。 これは751でも「次の一手」として理解出来るだろ。
755 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:53:05.15 ID:BnU34f5b0.net] なんだ、接頭辞を付けて、接頭辞内では"_"禁止、或いは接頭辞を台帳で管理すれば、 つまり、きちんと管理すればアナログで解決出来るではないか、というのは事実で、当たり前なのだ。 既にそうやってアナログ管理されて動いているCの糞コードを、そろそろなんとかするのがC++の目的だし、 それで導入されたのが「クラス」なのだから、元々そういう物なんだよ。 だから array_search を array::search と書き直すだけ、階層をアナログで"_"で区切ってたのを"::"にしただけ、 それだけで名前被りの管理の手間が大幅に削減出来ますね、というだけ。 この「次の一手」を同様に繰り返して行けばクラスベースのオブジェクト指向に自然となる。 753の $key = array_search('green', $array); を $key = $array->search('green'); と書かせろというのも、$arrayは絶対に必要だし、逆にこれがないと何も始まらないのだから、 $arrayの一部としてsearchという関数を定義してしまえば、 $arrayとセットでないと呼び出せなくなるし、 $key = array_search($array,'green'); // error みたいに引数順序を間違えてバグる心配もないね、というだけ。 そんなのちゃんと管理すればアナログで回避出来るよね、というのは、上記の通り「クラス」の仕様だ。 だから何であれ「クラス」は無くても出来るが使った方が楽、というだけの話。
756 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 16:55:02.15 ID:BnU34f5b0.net] > Laravelとかフレームワーク使って簡単に何か作ってみるのが良いんだろうなぁ… これは本末転倒だから止めとけ。学ぶ気なら他言語、例えばC#が断然よくて、 C#で簡単なもの作った方が数段まし。 これはPHPの立ち位置がやや微妙だからだ。 既に動いている問題ないコードを破棄しなければならない場合は、 ・アドレス空間の枯渇 ・速度が絶望的に足りない の2つで、前者は64bit化で解決済みだから今現在問題になるのは後者。 PHPは絶望的に速度が遅いし、larabelで表面的に誤魔化せてるとしても相変わらず糞なのは事実で、 .NET等、MSがガチでオブジェクト指向で整備したフレームワークと比べたら所詮はゴミ。(larabelもMSではあるが) larabelはPHPのコード資産が段々と大きくなってきたときに導入するものであって、 最初からlarabel使って大規模なコードをPHPで組むくらいなら、 普通の連中はJSやTSやGoやRust等、他言語使ってるだろ。 実行速度が速い=可読性の高い簡単なコードで済む、という事であって、 動作速度が速いだけで七難隠すんだよ。 だから大規模システムをわざわざPHPで最初から組む馬鹿は誰もいない。 結果的に大規模化した物にlarabel適用してるだけで。 (大規模化=大半をプログラムで処理する=言語がいい方が断然楽) PHPの場合は実行速度を ・物理で殴って誤魔化す 事が出来るから生き延びてるが、これが出来ないCakeとかは完全に死んでるだろ。 PHPはあくまで小回りが利く規模までで、フレームワークを導入してまで使う規模には適してない。 結果的にそうなったのなら致し方ないが、わざわざ導入してまでやるもんじゃない。 どうしてもWebに拘りたいのなら、この機会にJSかTSを試した方がいい。 少なくともPHPでクラスを学ぶよりは断然ましだし、今後の役にも立つだろうよ。
757 名前:デフォルトの名無しさん (ワッチョイ 13a9-olVp) mailto:sage [2023/10/15(日) 20:49:40.47 ID:64Sv/OQW0.net] >>717 書いた者だけど、mc963-e7li氏の言葉はなんとなくわかったような感じ リレーショナル使わないDBのCRUDするぐらいなら無理にクラスは使わなくて良い、ということね。 php初学時にlaravelの本を読んだ時に呪文みたいなものがたくさんあって php無理だわと思ったけど、laravel無しでなんとかログイン付のCRUDぐらいなら作れるようになった。 ・ある程度コードが書けるようになったらlaravelを検討するのか ・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら phpしか選択肢が無いなら熟練者はどっちを勧めるんだろう
758 名前:デフォルトの名無しさん (ワッチョイ 7321-Y0aP) mailto:sage [2023/10/15(日) 21:00:20.67 ID:BAs39Kb+0.net] 個人開発にフレームワークいらないんじゃない? 昔居た会社はLaravelでいうブレードに全部の動作直書きしてたよ
759 名前:デフォルトの名無しさん mailto:sage [2023/10/16(月) 11:26:15.00 ID:oWsG313D0.net] >>754 階層の例えめちゃくちゃ分かりやすいです、なるほどなるほど… >>717 さんと自分は別だけど「クラスの概念が理解出来ない」という点で全く同じだったので書き込んでしまいました。懇切丁寧に教えてくれて本当に感謝です🙏 >>754 さんみたいな方が社内に居たら素晴らしいメンターになるのになぁと思いながらも今日もトライ&エラーで頑張ります!
760 名前:デフォルトの名無しさん mailto:sage [2023/10/16(月) 11:45:53.44 ID:Cp7DR01g0.net] Ruby の米国年収は、Go/Rust/Elixir の3大言語を超えた! 一方、PHP は情報学部へ行ってない高卒とか Ruby, Elixir : 9.3 万ドル Go : 8.9 Rust : 8.7 多くの言語 : 6.5〜7 PHP : 5 Dart : 4.4 Ruby on Rails, AWS Solution Architect は13万ドルとか! YouTube で有名な雑食系エンジニア・KENTA は、 初心者のキャリアパスは、Rails → Go だけと言ってる 一方、Scala, PHPをオワコン認定した。 使っているのは、Twitter, Facebook ぐらい。 日本はZOZO とか、PHPを使う老人が多い。 たぶん、Web系じゃなくてSIer だろうから、Java に近い。 Railsを使う、モダンなスタートアップとは企業文化が異なる ガーシーのサロンで使っていたMastodon も、 PHPから、Rails 6 へ変わった 筑波大学でも使っている、Rails チュートリアル日本語版の古いRails 5 なら、 無料で読めるから、まずこれを読むのが最短
761 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:20:58.48 ID:R59hQw8C0.net] >>757 小規模なら無理にクラスを使う必要はないが、 クラスを使った方が楽だし綺麗に整理出来るので、知ってれば普通は使う。 > php初学時にlaravelの本を読んだ時に呪文みたいなものがたくさんあって クラス周りの用語、具体的にはクラス/コンストラクタ/プロパティ/メソッド/継承/仮想関数、 等が理解出来ないのはさすがに不味い。 C++が再定義したオブジェクト指向は超便利だったので、C以外の全てのメジャー言語には実装された。 実際、あらゆるドキュメントが大体この形式で書かれてるだろ。 言語関係なく共通だし、知らないでは済まされない。脳味噌へのインストールは必須。 理解はしたが、使う意味/意義が分からないというのは初心者〜中級者がよく陥る状態で、 大体は規模が小さすぎて恩恵がほぼ無いから分からないだけ。(アナログ管理で全く困ってないだけ) どうしても実感したければ単純には規模を大きくすればいい。 Cみたいに階層がない状況では、一人のプログラマが取り扱えるコード規模は10,000行程度とされていた。 だから10,000行を超えて頭に入りきらない状況になれば、 「この部分はブラックボックスとして切り出し、動くものとして使いたい」という欲求が出てくる。 API/モジュール/クラス等、切り出し方は色々あるが、 お手軽に同一コード内で切り出すのならクラスが便利なのでみんなそうしてるだけ。 ただPHPならRESTにして鯖を細切れにする事も簡単なので、 こちらを選択して各APIを3,000行程度に抑えれば、オブジェクト指向を一生理解せず無視する事も可能だろう。
762 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:21:42.72 ID:R59hQw8C0.net] ただまあそれ以前にPHPはオブジェクト指向には向いてない。 継承の旨味を引き出すには抽象クラスのメソッドで記述する必要があるのだが、 Web周りはオブジェクト指向前提で整備されてないのでだいたいこれが不可能だ。 ここら辺が最初から全てオブジェクト指向前提で設計されてる.NETとかとは違う。 次にPHPの場合は状態保存が出来ない。 オブジェクト指向は各インスタンスに「状態を分散して配置する」ことになるため、 これらを最終的にDBに書き戻すには余分なコードが必要となってしまう。 ここら辺がサーバーが永続的なJS/Go/Rustとは違ってくる。 だからPHPの場合はDBから読み出してこねくり回して吐き出すだけ、 何かあったらDBを更新するだけ、という非常に単純な構造にしかならないわけだが、 実際はこの方がいいので、この点はPHPのショボさが功を奏してる。 Javaの開発工数とか、同様のWebサービスと比べて10倍以上はかかってるだろ。 あれはそもそもオブジェクト指向の「状態を分散して配置する」事自体が間違いな事に気づいてないんだよ。 Javaの連中はJavaこそが大正義であって他はまるで知らない浦島太郎だからあんな事になる。
763 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:23:34.74 ID:R59hQw8C0.net] > ・ある程度コードが書けるようになったらlaravelを検討するのか > ・まったくの初学者がlaravelから始めてブラックボックスになっている所は気にするな、というなら どっちもありだと思うが、そもそも前提が間違ってる。 フレームワークはステップアップではなく、単純に「楽をする為」に導入するものだ。 よく言われてる、「フレームワークを使わなくても、 フレームワーク内に存在するコードとほぼ同じ物を書くハメになるだけだから、さっさと使え」というのは当たってる。 だからフレームワークのドキュメントをさらっと見て、 自分が使いたい機能が有れば使えばいいし、無ければ使わなければいいだけ。 初心者だから止めとけとか、そういう類の話ではない。 実際、C#やJavaではフレームワークを使わない選択肢はなく、 ハロワで既にフレームワークを使ってるはずだが、特に問題にもなってない。 そして使う場合は基本的にブラックボックス扱いだ。 内部まで確認してたらキリがないので、問題なければ内部コードなんて確認しない。 それは気持ち悪い、というのなら、フレームワーク使わずに自分で組め、でしかない。 (自分で組むよりはフレームワークを内部コード精査後にホワイトボックスとして使うなり、 フレームワーク内のコードを基本パクって改変してオレオレ仕様にしたりする方がバグはないだろうが、 一般的にはこの方式の所はあまり無いのではないかと。 フレームワークのバグを心配するなら、アナログに「枯れた機能だけを使う」で対処した方がいい)
764 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:24:30.33 ID:R59hQw8C0.net] この辺はPHP界隈でたまにいる「DBでなく、ファイルでやりたいんですけど…」が分かりやすいだろう。 この場合本人は既にプログラミングはそこそこ出来て、 欲しい物は今現在の自分で十分実装可能だと分かってる。 そしてDBの知識が十分でなく、勉強するのが面倒か、慣れてない物を使うのは危険だと判断してる。 だから自前でファイルから変数を切り出すルーチンを書くわけだ。その方が自信が持てるから。 ただ当たり前だが、同様のコードはDB内には既に存在してて、そいつが書くよりも100倍品質もいい。 そして何だかんだで仕様は肥大化し、 その都度そいつのオレオレファイルDBモドキにもコードが書き加えられていくわけだが、 最終的に、「で?お前はこれに延べ何時間費やしたわけ?それで出来上がったのがこのウンコなDBモドキ? なら最初からSQL勉強してDB使った方が堅牢で拡張性もあって速度も速いし、工数もかからなかったよね」にしかならない。 (そもそもDB内のコードなんてPHPerは誰も読んでないしブラックボックスだが気にしてないだろ) だから考えるべきは「今」ではなく「最終状態」であって、 仮にお前の思惑通り事が運んだとして、最終的にどこまでやるつもりなのか?なんだよ。 最終的にも数行読めれば十分ならファイルで構わないが、 最終的にはDBが必要になるのなら、最初からDBで組んだ方がいい。 同様に、最終的にフレームワークが必要となるなら、最初からフレームワークを使うべき。 よく言われてるのは「セッション管理を自前でやるとだいたいバグるからフレームワーク使え」で、 逆に言えばセッション管理を厳密にやる必要がなく、特に欲しい機能もなければ、フレームワークを使う必要がない。 繰り返すがこれは「今」ではない。 つまり、「『今は』初心者だから」「『今は』フレームワークに慣れてないから」 「『今は』DBを知らないから」「『今は』クラスの理解が足りてないから」ではなく、 今、知識/技術が有ろうが無かろうが、最終的に必要なら使って慣れるしかないんだよ。
765 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:26:52.67 ID:R59hQw8C0.net] 多分721も751も以下分類では中級者になる。 初心者:欲しい機能の実装にも手こずる。(プログラミング経験0〜3000時間) 中級者:欲しい機能は一通り実装出来る。(プログラミング経験3000〜5000時間≒社畜歴2年) 上級者:仕様から複数の実装を検討し、初手から最適解を目指せる。(プログラミング経験5000時間以上) 状況について詳しく言うなら、 ・動けばいいのなら何であれ実装出来るから今現在の技術/知識で何ら困ってない。 ・果たして自分のコードが美しいのか汚いのかはよく分からんが、 少なくとも自分のコードは読めるので取り立てて困ってない。 ・世の中には他の方法もあるらしいが、勉強する価値があるのかもよく分からん。まあ一応読んではみたが…。 てな所だろう。これは順当な上達過程で、誰しも通る道だ。 そこで道は分かれるわけだが、90年代の場合、 Java(1995):C++が導入したクラススゲー。全部クラスで、ポインタ廃止したら完璧じゃね? Ruby(1995):C++が導入したクラススゲー。全部オブジェクトでいけるんじゃね? C#(2000):C++が導入したクラススゲー。でもC++はちょっと… C++(1983):馬鹿はJava、軟派はC#使ってろ。漢は黙ってC++。 C(1972):いやCで特に不満無いし…。 PHP(1995):クラス?そんなもの無くても出来るでしょ。 同時期以降の別言語が全てクラスを採用する中、ラスマス・ラードフは無視しやがったのがPHPの不幸なところだ。 PHPがArray::xxxやString::yyyとなってれば、「クラスがよく分からない」なんて事になりようもなかった。 が、まあ、これを言っても始まらない。上達の為の次の順当な方策は、JSをやる事だ。 https://プログラマが知るべき97のこと.com/エッセイ/プログラミング言語は複数習得すべき/
766 名前:デフォルトの名無しさん mailto:sage [2023/10/17(火) 01:28:15.91 ID:R59hQw8C0.net] フルスタック(キリッ、の通り、クライアントサイドで何がどこまで出来るかを把握しておく事は全体最適化には必須。 達人である必要はないが、どれくらい手間なのか分からないのは不味い。 クラスは難しいものではなく、使ってないから分からないだけ。 強制的に使うのなら標準がクラスで構成されてる言語がいい。(今のメジャー言語は全部該当するが) PHPの次はJSだろうよ。 なおPHPの場合は節操なく取り込んでるので結果的に「全部入り」に近く、 PHPだけで学ぶのも理論的には可能だが、そもそも知らない奴が正しい方向性を見切るのは無理なので、現実的に無理だ。 PHPでは今まで通りのコードを書きつつ、JSで色々試し、 クラスに慣れたらPHPでもクラスを使って書いていく、というのが多分妥当な道筋。
767 名前:デフォルトの名無しさん (スッップ Sd33-Y0aP) mailto:sage [2023/10/17(火) 11:52:24.20 ID:nEN1t9hTd.net] Laravelでコーディングする時、コーディングする順序は 1、SQL等のDB周り 2、バックエンド動かすコントローラー(api.phpの方) 3、フロント用のコントローラー(web.phpの方) 4、view って順序でイメージあってる?
768 名前:デフォルトの名無しさん (ワッチョイ 0149-HvQf) mailto:sage [2023/10/17(火) 16:33:35.10 ID:wBPhMFC20.net] 好きなとこからやれ 決まってるところからやれ 仕事なら会社の言う通りにしろ
769 名前:デフォルトの名無しさん [2023/10/21(土) 01:03:11.56 ID:dh9vzKli0.net] PHPが遅いってのは分かるが、絶望的に遅いか?って言われたらそうは思わんな スーパーに買い物に行くのにスポーツカーは必要ないし、むしろ使いにくい 小回りのきく軽自動車で十分って状況も多々ある
770 名前:デフォルトの名無しさん mailto:sage [2023/10/21(土) 09:18:37.85 ID:yXW/Zb3m0.net] 既に運用中のサイトにおいてPHP7系から8に移行する際、皆さんどんな苦労されました? 自分は前任者が書いたサイトを引き継ぎしたんだけど、内容はPHP5時代に書かれたコードを扱わなきゃいけなくて… レンタルサーバーが強制的にPHP8に移行するにあたって500ファイルほど目視チェック、動かない原因になる箇所を直していったのが大変だった countとimplodeとかその辺りの関数がFatal error出すのでシコシコ直していったよ
771 名前:デフォルトの名無しさん (ワッチョイ 1ade-cYzw) mailto:sage [2023/10/22(日) 15:40:10.82 ID:lOEqj3QG0.net] ゼロから作り直したほうが早い
772 名前:デフォルトの名無しさん (ワッチョイ 8e5f-ANn9) mailto:sage [2023/10/22(日) 18:07:33.50 ID:xV2fKCwr0.net] >>770 移行しなかったよ Dockerん中に古いまんま閉じ込めた もう未来永劫そのまんまよ
773 名前:デフォルトの名無しさん (ワッチョイ 19f7-NW8N) mailto:sage [2023/10/27(金) 15:17:52.24 ID:O5trZ+em0.net] なるほど、その手があったか エラー無視つけてたわ
774 名前:デフォルトの名無しさん mailto:sage [2023/11/19(日) 11:56:48.15 ID:vcL8dlfS0.net] >>770 前任者どころか、自分で書いたコードですら修正するの大変だわ よほどのセキュリティホールでも無い限り、古いまま運用してもいいと思うよ Javaで古いバージョンが乗っ取りとかってあったけど、 PHPはそういうのないし、ページ毎のセキュリティ対策してたら大丈夫でしょ (違うなら誰か事例を出して指摘してください
775 名前:デフォルトの名無しさん [2023/11/22(水) 14:01:49.19 ID:gEe16+Fw0.net] 初心者なので初歩的な質問になりますm(_ _)m phpのフレームワークlaravelについての質問なんですが Illminate/Foundation/Application.phpのApplicationクラスのbootstrapWithというメソッドの中に$this['events'] -> dispatch( 〜 という記述があるのですがこの$thisはApplicationクラスのインスタンスだと思うのですが なぜ$this['events']のように$thisの後にブラケットが続いてるのでしょうか? dd($this)とやって調べて見ましたがやはり配列ではなくApplicationのインスタンスで dd($this['events'])で調べたらDispatcherというオブジェクトでした なぜブラケット構文でインスタンスにアクセスできるのか分かりません この$thisはなんですか?
776 名前:デフォルトの名無しさん (ワッチョイ 465f-jMfl) mailto:sage [2023/11/23(木) 00:07:02.72 ID:RFVqy5fX0.net] >>775 PHPは連想配列っぽくインスタンスにアクセスできるんだお 初心者らしい初歩的な質問でしたね
777 名前:デフォルトの名無しさん (ワッチョイ 7901-YT2O) mailto:sage [2023/11/23(木) 00:43:06.46 ID:AzseZZHe0.net] 最近はそれくらいの難度なら GPTさんに質問する人が増えたから あまり書き込みにこないんだろうな
778 名前:デフォルトの名無しさん (ワッチョイ 72a2-N5Jg) [2023/11/23(木) 00:46:28.93 ID:op2UpQwL0.net] >>776 オブジェクトを作って試しましたがオブジェクトは配列として使用できないとエラーが出ます どのようにそれを可能にしているのかを教えていただけませんか? 初歩的な質問で申し訳ありませんがググっても出てこないので
779 名前:デフォルトの名無しさん (ワッチョイ e93b-8MWH) mailto:sage [2023/11/23(木) 01:01:05.45 ID:pAGXWPD10.net] オブジェクトに対して配列風にアクセスするといえばこれか https://www.php.net/manual/ja/class.arrayaccess.php
780 名前:デフォルトの名無しさん [2023/11/23(木) 07:25:04.23 ID:op2UpQwL0.net] >>779 スッキリしました。ありがとうございます。 継承元のcontainerクラスで実装されてるのを確認できました。
781 名前:デフォルトの名無しさん [2023/12/09(土) 23:46:53.06 ID:fGdJSgyw0.net] 学習コストが低めのフレームワークでおすすめある? Laravel,CakePHP以外で
782 名前:デフォルトの名無しさん (ワッチョイ 7716-pmcO) mailto:sage [2023/12/10(日) 10:42:24.34 ID:PVGCDu/Y0.net] オレオレフレームワーク
783 名前:デフォルトの名無しさん (ワッチョイ 7f3f-opNu) mailto:sage [2023/12/14(木) 16:59:59.82 ID:t1zoVVGt0.net] WordPressってPHP7.4以上が推奨環境なんだけど、 PHP8.0までセキュリティサポートが切れてる なんで7.4以上なんだろ?
784 名前:デフォルトの名無しさん mailto:sage [2023/12/14(木) 21:46:47.06 ID:SDKVvk710.net] プラグインの対応を考えると7.4まで戻さないといけないんじゃないかな? 8.1まではあまり影響なかったけど8.2からひどかった記憶、最後に仕事して一年以上経ってるから状況変わってるだろうけど
785 名前:デフォルトの名無しさん (スップ Sdbf-6RB4) mailto:sage [2023/12/15(金) 15:26:36.63 ID:UGjdTC/zd.net] このフレームワークはプログラム技術板的にPHPなの?Goなの? 米Laravelは、Go言語で書かれたPHPアプリケーションサーバであるFrankenPHPの最新バージョンとなる「FrankenPHP 1.0」を、12月11日(現地時間)にリリースした。 FrankenPHP 1.0には、Symphony、Laravel、WordPressなどのネイティブサポートが含まれるほか、Caddyを搭載したプロダクショングレードのPHPサーバであり、PHPアプリのスタンドアロンで実行可能なバイナリとしてのパッケージ化が可能となっている。 さらに、PHP-FPMとNgnixを個別に実行する必要がなく、1つのサービスのみでPHPサーバを提供できるようになるとともに、PHP 8.2以降のほとんどのPHP機能拡張、およびすべてのCaddyモジュールと互換性がある。 ほかにも、アプリケーション起動してメモリに保持するワーカーモード、JavaScriptイベントとしてWebブラウザへ送信されるリアルタイムイベント、ZstandardおよびGzip圧縮、構造化されたログ、Prometheusメトリクスを使用したCaddyの監視、HTTPS・HTTP/2・HTTP/3のネイティブサポート、HTTPS証明書の自動生成や更新、ダウンタイムなしでのアプリのデプロイといった、充実した機能を搭載している。
786 名前:デフォルトの名無しさん (ワッチョイ 7ff7-OWs5) mailto:sage [2023/12/15(金) 17:16:53.14 ID:Or7pgbin0.net] フレームワークじゃなくてアプリケーションサーバ Goで書いてる内部実装の話じゃなければPHP
787 名前:デフォルトの名無しさん (ワッチョイ a795-+vxZ) mailto:sage [2023/12/17(日) 12:50:33.31 ID:Ejq9svn00.net] やっぱRubyとは違うな
788 名前:デフォルトの名無しさん mailto:sage [2023/12/18(月) 10:08:31.91 ID:/4mKYZLK0.net] 導入部がどんどんコテコテになっていくな もう新規は洋梨か
789 名前:デフォルトの名無しさん (ワッチョイ 338a-pDLy) [2023/12/28(木) 04:23:04.89 ID:NBXduxv20.net] フラグ管理の効率的な方法を教えて下さい。 作成中の社内向け事務アプリなんですが、判定要素が多くなりすぎて毎回読む度に悩みます。 ユーザーに割り当てられた権限や日時による分岐がめっちゃ多いです。 例えば、シンプルなやつだと下記みたいな感じです。 ※権限には、種類とランクがあります。 ・権限Aを持っているユーザーB〜Eが、日時F〜Gの間に許可した時だけ、 ユーザーH・Iが日時J〜Kの間だけ権限L・Mを付与されて、 その権限を行使して処理NまたはOを合計2回行った時に、その権限を付与したユーザー(B〜E)の権限PをQ〜Rの期間降格する。
790 名前:デフォルトの名無しさん (ワッチョイ 338a-pDLy) mailto:sage [2023/12/28(木) 04:23:58.49 ID:NBXduxv20.net] すみません。 スレ立てるまでもない〜スレに行きます。
791 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 16:15:07.69 ID:PTL/6ftd0.net] PHPのクラスを理解できていない 及び 運用・実装したことない ユーザー定義関数なら扱えるレベル CakephpやLaravel等のフレームワーク扱った事がない 実務は約5年 これで中途採用の場合、月収幾らくらいが妥当ですか🥹
792 名前:デフォルトの名無しさん mailto:sage [2024/01/10(水) 16:53:39.33 ID:dVV8o+q90.net] >>791 おぉ、同じぐらいだわ。 PHPはフレームワークとか知らないし、ユーザ関数ちょっと作れたりするぐらい フォームメールとかマスタデータの登録編集ぐらいできて48万ぐらい貰ってるよ
793 名前:デフォルトの名無しさん (ワッチョイ 7f9a-lSjW) mailto:sage [2024/01/10(水) 20:04:25.62 ID:zlHvcH430.net] コピペプログラムでも30はいけるからな
794 名前:デフォルトの名無しさん (ワッチョイ df0e-tnpw) mailto:sage [2024/01/10(水) 20:16:50.25 ID:PTL/6ftd0.net] >792 >793 ええええー!マジですか😭…羨ましい!! メールフォームはもちろん、サーバー関連もLinux一通りは触れて、データベースも GUIではなくてLinux上から操作出来るくらいのレベル感ではあるんだよね… 求職する時、文字だけだと自分のレベル感と会社が求めてるレベル感が分からなくていつも「クラス実装出来ないし概念理解してないけど大丈夫かな」とか「フレームワーク扱った事ないし…docker?何それ美味しいの?」って感じで二の足踏んでしまうんだよね
795 名前:デフォルトの名無しさん (ワッチョイ ff5f-03E5) mailto:sage [2024/01/12(金) 00:03:02.51 ID:twL7njza0.net] フレームワークを扱えばいいし、dockerも勉強すればいいよ そもそもフレームワークなしでやれてたんなら 何でも独学できるだろ 体系的な学習はとにもかくにもいじり倒した後からだ
796 名前:デフォルトの名無しさん mailto:sage [2024/01/13(土) 14:07:59.64 ID:3NziHgVl0.net] >>792 ちなみにSES?
797 名前:デフォルトの名無しさん (オッペケ Srbd-Ti6e) mailto:sage [2024/01/30(火) 04:09:24.38 ID:geI1NBE8r.net] PHP初級取ろうと思ってますが、取りやすいのはどっちですか? 簡単な方を教えてください。
798 名前:デフォルトの名無しさん (オッペケ Srbd-Ti6e) mailto:sage [2024/01/30(火) 04:10:11.35 ID:geI1NBE8r.net] PHP7 vs PHP8 の比較です
799 名前:デフォルトの名無しさん mailto:sage [2024/01/30(火) 07:13:24.16 ID:xc6jeStg0.net] 上司から取ってこいと言われたのでなければ止めとけとしか 俺はPHPerではないけども
800 名前:デフォルトの名無しさん (オッペケ Srbd-Ti6e) mailto:sage [2024/01/31(水) 13:32:55.85 ID:k++D0k1Yr.net] >>799 俺はデザイナーなので仕事上ではなくてもいい資格なんだが、取りやすそうで見栄えも良さそう資格って事でこれとろうかなと、webクリエイターの資格もってるがゴミ資格なんでゴミ資格でもないやつ取りたい。
801 名前:デフォルトの名無しさん (ワッチョイ b6d0-9w1M) mailto:sage [2024/01/31(水) 14:50:49.67 ID:GiaFK7PQ0.net] >800 少しでもプログラムを書く予定があるなら PHP8が良いよ なぜかと言うと、7→8のアップデートで仕様が大幅に変わったから 7の細かいルールを覚えてしまってから8を触ったら「あれ?動かない…」となる可能性あるので
802 名前:デフォルトの名無しさん (ワッチョイ 1149-Y1Fy) mailto:sage [2024/01/31(水) 15:02:37.76 ID:KXDkvASJ0.net] 資格で語れる業界に行きたいんなら良いんじゃね ITは基本、実績や書き物で語ることが多いと思うけどね
803 名前:デフォルトの名無しさん (ワッチョイ 8a8b-7cac) [2024/01/31(水) 15:18:08.36 ID:Cu19VVGy0.net] 逆にIT系の資格一杯持ってるやつのほうが実務で使えねー
804 名前:デフォルトの名無しさん (ワッチョイ 9ee7-TUA6) mailto:sage [2024/01/31(水) 17:23:01.53 ID:grzeycve0.net] >>803 それよく言われるけど、実際のところは逆だったわ 決まりきったパズルである試験すら通らないやつが まー実務で役に立つわけもないわな
805 名前:デフォルトの名無しさん (ワッチョイ 8a8b-7cac) [2024/01/31(水) 17:28:55.09 ID:Cu19VVGy0.net] >>804 ちゃうちゃう、パズルしか解けんくなって石頭になるねん 自分でアルゴリズムを構築する手段を知らないから、パーツに頼るしかなくなる
806 名前:デフォルトの名無しさん (ワッチョイ 1163-on57) mailto:sage [2024/01/31(水) 17:29:39.20 ID:jcvgDSDi0.net] 銃が使えるからって戦場で役に立つとはならないぞ
807 名前:デフォルトの名無しさん (ワッチョイ eaa9-+O6P) mailto:sage [2024/01/31(水) 17:30:21.84 ID:OojRe9/Q0.net] ワイphp7とphp8の違いがわからずに簡単なコード書いてるし運転免許以外資格も持ってなくても35万給料もらえていることに感謝
808 名前:デフォルトの名無しさん (ワッチョイ 9601-JLAu) mailto:sage [2024/01/31(水) 17:31:41.54 ID:3ULZXNFO0.net] 属してる組織の技術レベルによるんだよね 上に行けば行くほどIT資格一杯持ってるやつのほうが使えねーってなる 下に行けば行くほどIT資格一杯持ってるやつのほうが使えるーってなる
809 名前:デフォルトの名無しさん (ワッチョイ b6d0-9w1M) mailto:sage [2024/01/31(水) 17:40:24.48 ID:GiaFK7PQ0.net] >807 SIerとSESどっちかな? ついでに額面か手取りかも教えてくださいw
810 名前:デフォルトの名無しさん (ワッチョイ eaa9-+O6P) mailto:sage [2024/01/31(水) 17:57:51.74 ID:OojRe9/Q0.net] >>809 ごめん単語が何言ってるかわからない・・・
811 名前:デフォルトの名無しさん mailto:sage [2024/01/31(水) 20:57:41.85 ID:GiaFK7PQ0.net] >810 ざっくり言うと、 「自社開発していて自社出勤の正社員」=SIer 「委託や請負で客先常駐の社員。派遣では無いが実質派遣ぽい動きしてる」=SES ↑かなり乱暴な言い方だけどw https://levtech.jp/partner/guide/article/detail/163/
812 名前:デフォルトの名無しさん (ワッチョイ 7501-8Us2) mailto:sage [2024/01/31(水) 23:14:06.95 ID:j8r5fr530.net] >>811 突っ込みどころ満載すぎ SIerは企業の種類でSESはサービスの種類 SIerの正社員がSESで客先常駐というのも普通にある 自社開発という言葉は自社向けのシステムを開発することを指していて SIerが受託開発等で客先に常駐せず自社に出勤して開発することではない 請負の客先常駐はSESとは呼ばない SESは基本的に準委任契約
813 名前:デフォルトの名無しさん (ワッチョイ 62f4-UXSU) mailto:sage [2024/02/17(土) 15:04:47.81 ID:RQ5FiJGb0.net] 1、クライアント(C++で作ったアプリ)がLaravelで作ったAPIにアクセス 2、APIにアクセスされたらクライアントにファイルダウンロード 3、ダウンロード完了したらサーバー上のデータをbackupディレクトリに移動 ダウンロードの完了をLaravel側(PHP)が知る方法ってないよね?
814 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 15:53:22.94 ID:+ZrZNmrG0.net] クライアントから完了通知を送る 完了通知がないとクライアントがすべて正常に受け取ったかどうかはわからない サーバー側だけでわかるのはデータをネットワークI/Oのレスポンスとして全部書き出したかどうか
815 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 16:09:44.18 ID:RQ5FiJGb0.net] ダウンロード用のスレッド(タスク)終わったらダウンロード完了通知するスレッド始めりゃ良いのか ありがとう
816 名前:デフォルトの名無しさん [2024/02/17(土) 19:05:09.44 ID:4U2VM1d40.net] ファイル送る前に、MD5とかのファイルハッシュを送っておいて、受信完了レスポンスはクライアント側のMD5を送ってもらって、合致したら処理完了 とするとより安全だわな
817 名前:デフォルトの名無しさん mailto:sage [2024/02/17(土) 20:18:28.04 ID:HHGIbwMU0.net] 今の通信品質ってそんなに悪いのか?
818 名前:デフォルトの名無しさん [2024/02/17(土) 23:35:32.81 ID:4U2VM1d40.net] あ、いやさ、バックアップディレクトリに移動ってあったから、何らかのトラブルがあった時に、多分手作業で戻さなくちゃならんくなるじゃん 保険と思って実装しておくのが安心かなとね、俺は低品質回線の国とかとのやりとりがあるから、敏感になってるのもあるけどね だからかUDPよりTCPかつチェックサムなど入れてる
819 名前:デフォルトの名無しさん mailto:sage [2024/02/19(月) 10:13:37.18 ID:sL/5dHSK0.net] MD5が技術と時間的に厳しかったからダウンロードしたファイル名(秒単位までの時間)を送信して対応することにしました ありがとうございました
820 名前:デフォルトの名無しさん [2024/03/10(日) 12:02:36.25 ID:L6LWs13j0.net] 環境ってフレームワークや言語ごとにvmwareでわけたらいいのか、それともdockerがよいのか、 先輩方教えてください
821 名前:デフォルトの名無しさん mailto:sage [2024/03/12(火) 01:50:45.53 ID:TnUWR0Du0.net] 動作しているコードでVSCodeで赤く表示されるところを直そうと思い $row[\"id\"]} とエスケープしようとするとエラーと出ます。 赤く表示されるのはvscodeが何か勘違いしているということでしょうか? https://i.imgur.com/RdSJ8HS.png
822 名前:デフォルトの名無しさん mailto:sage [2024/03/12(火) 02:57:29.14 ID:oTlhluwZ0.net] {$row['id']}にしてみ
823 名前:デフォルトの名無しさん (ワッチョイ 2930-n0E3) mailto:sage [2024/03/12(火) 10:50:36.47 ID:meXeXcdC0.net] >821 >822のように波括弧で括るか、ダブルクォーテーションをシングルクオーテーションにしてみ
824 名前:デフォルトの名無しさん mailto:sage [2024/03/12(火) 17:55:50.35 ID:TnUWR0Du0.net] >>822-823 ぉぉ・・・すごい、うまくいきました。 確かに変数展開する必要が無いならシングルクォートで良いですよね ダブルクォートを使うことしか考えていませんでした
825 名前:デフォルトの名無しさん mailto:sage [2024/03/13(水) 01:02:40.75 ID:GqTsKoAX0.net] >824 実際の開発現場ではコーディングのルール決まってるからシングルクオーテーションやダブルクオーテーションを混ぜて使ったりしては駄目だから気を付けてねー
826 名前:デフォルトの名無しさん mailto:sage [2024/04/01(月) 23:48:30.99 ID:VotzuRBw0.net] postするデータってなんでもかんだもCSRF検証するものですか?
827 名前:デフォルトの名無しさん mailto:sage [2024/04/01(月) 23:53:33.26 ID:VotzuRBw0.net] SPA作ったんですがCSRF検証してません ポストするデータはゲームのステージデータです 仮にCSRF攻撃されたとしてもステージデータが増えるだけなんですがこういうケースでもCSRF検証はすべきでしょうか?
828 名前:デフォルトの名無しさん mailto:sage [2024/04/02(火) 00:37:08.09 ID:Y1y4I8En0.net] 本人の意図しないところでステージデータがポコポコ増えたら困るでしょ?
829 名前:デフォルトの名無しさん mailto:sage [2024/04/02(火) 09:20:13.00 ID:MCcZjXUK0.net] このケースでは検証すべき、こっちではしなくて良い、とかやってるとそのうちその振り分けでやらかしそうだから 如何なる場合でもPOSTデータは検証すべき
830 名前:デフォルトの名無しさん (ワッチョイ 5dbb-B4RS) mailto:sage [2024/04/02(火) 16:50:28.30 ID:4sW3pgf50.net] そうですか ありがとうございました
831 名前:デフォルトの名無しさん mailto:sage [2024/04/03(水) 03:58:04.60 ID:EpnIAvlv0.net] CSRFの実装しました 難しいかと思ったら割と簡単でした 案ずるより産むが易しキヨシってやつですね
832 名前:デフォルトの名無しさん mailto:sage [2024/04/03(水) 16:08:59.39 ID:sHoarvhc0.net] nonceもCSRF対策の一種?
833 名前:デフォルトの名無しさん mailto:sage [2024/04/05(金) 11:14:06.54 ID:ZTISEuLN0.net] 管理画面や、限定的にしか見れないページ(社内のみとか)はサボる時あるけどねw 理由は、そもそも管理画面自体に入られたらパスワードが漏洩しているという意味で全て終わりだから。 サボるのはpostするデータをバリデーションするか、とかサニタイズするか、とか。 性善説に基づいて作るとめちゃくちゃ楽よ( ;´Д`)
834 名前:デフォルトの名無しさん mailto:sage [2024/04/05(金) 17:24:40.42 ID:ed+JNEgF0.net] >>833 管理画面にログイン済みのユーザーにPOSTするリンクをクリックさせて管理者にしかできない操作をさせるみたいなのがCSRFだと思うんだが・・・ CookieをSame Siteにすれば防げるケースが大半だろうけど多段防御しといた方が安牌だと思う
835 名前:デフォルトの名無しさん mailto:sage [2024/04/06(土) 00:42:24.17 ID:4xUg8EFL0.net] >834 vpn接続して使用してる管理画面だから、誰か入ってくる事は無いし、そもそも誰か入って来た時点で即、死を意味してるのでプログラム云々というよりネットワークのセキュリティの話になってくる、というね。 話逸れたけど、個人的にはこれくらい内々で使うサービスなら良いけど、逆に言えばそれ以外はPOSTデータの取り扱いは100%対策しないとダメだよ、って話
836 名前:デフォルトの名無しさん (ワッチョイ d576-VD0S) mailto:sage [2024/04/06(土) 02:02:19.01 ID:0VY5CEth0.net] 100%
837 名前:デフォルトの名無しさん (ワッチョイ 6b01-KWHl) mailto:sage [2024/04/06(土) 02:12:00.29 ID:Jz+yuHp90.net] >>835 VPN接続してるかどうかとか全然関係ないよ そもそもCSRFって内部ネットワークに誰か入ってくるとかじゃないから
838 名前:デフォルトの名無しさん mailto:sage [2024/04/08(月) 16:50:29.21 ID:wyxCOIbr0.net] intval(080)が0になるのはなんで?
839 名前:デフォルトの名無しさん mailto:sega [2024/04/08(月) 19:16:57.61 ID:0Leau+zw0.net] >>838 不正な8進数だからだろ
840 名前:デフォルトの名無しさん mailto:sage [2024/04/10(水) 11:28:55.93 ID:NX4cvx9u0.net] Closure::bindやbindToがnullを返すのはどんな場合ですか? 公式ページには"失敗するとnullを返す"としか説明がなく 具体的な失敗パターンが知りたいです
841 名前:デフォルトの名無しさん (ワッチョイ bf5f-/8Es) mailto:sage [2024/04/14(日) 23:11:55.65 ID:zqSEJi8N0.net] >>840 基本的にバグのときしか無いよ 見れない関数見てるとかそもそも関数じゃないとか
842 名前:844 mailto:sage [2024/04/15(月) 20:58:30.82 ID:ykbkL8b10.net] >>841 ありがとうございます
843 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 01:54:25.90 ID:J00dMuyV0.net] PHPってなんでこんなに速いんですか? 他のインタプリタ言語よりかなり速いですよね
844 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 04:36:49.17 ID:j7JGuKK50.net] 利用者が多いと高速化モジュールを作ってくれる人がそのうち出て来る でもphpよりperlの方が速いって言う人もいる
845 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 10:35:03.69 ID:6qmOkfsb0.net] 今やpythonのほうが高速だから残念ながらphpのアドバンテージは下がってしまった
846 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 11:14:04.07 ID:kYFjszay0.net] fastAPIってどのくらい速いんかね?
847 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 11:23:09.48 ID:MMZJeoHC0.net] メンテしやすい方が楽で良い
848 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 20:06:50.70 ID:uAswjotn0.net] Laravelとかも最近のopcache使ったときやたら速くて感心したな
849 名前:デフォルトの名無しさん mailto:sage [2024/04/16(火) 23:44:05.47 ID:dnnaoba60.net] いくらphpが速くてもpythonはcかc++並になってしまったからもう追いつけない
850 名前: mailto:sage [2024/04/17(水) 00:07:31.24 ID:I8L23udN0.net] 追いつけないかどうかはやろうとする処理次第 Eコマースで商品一覧をDBから取得し画面に出力するとなれば 処理の大部分はDBの処理時間
851 名前:デフォルトの名無しさん mailto:sage [2024/04/17(水) 01:28:51.06 ID:c72vfF8y0.net] 誰もDBの話はしとらんが?
852 名前:デフォルトの名無しさん mailto:sage [2024/04/17(水) 01:34:48.91 ID:ze0TvR6C0.net] >850 そりゃそうだろw今はそんな話はしてないし、自分の土俵に持っていく為に話題のすり替えになってるぞ
853 名前:デフォルトの名無しさん (ワッチョイ 7f3a-/8Es) mailto:sage [2024/04/17(水) 07:51:37.15 ID:xZLw0gTi0.net] なでしこ3はPythonより6.5倍速い
854 名前:デフォルトの名無しさん mailto:sage [2024/04/17(水) 09:34:48.22 ID:CzOcQm8R0.net] PythonよりPHPやRubyのほうが速い ざっくり3〜5倍 さらにPHPやRubyよりJavaScriptのほうが速い それもざっくり3〜5倍 PerlはPythonと似たり寄ったり PythonだけJITがないから置いてきぼり 今年のQ4に出る3.13で導入予定らしいけど最適化に時間がかかるから今のレベルに追いつけるのは5年くらい先 Pythonで性能を出したければシェルスクリプトと同じようにできるだけPython内でループを回さずC/C++で書かれたライブラリに一括で処理を委譲する Webアプリだとなかなかそうもいかないけど
855 名前:デフォルトの名無しさん mailto:sage [2024/04/17(水) 11:15:26.47 ID:hNUrcL2F0.net] フルスタックとしてPHP8.2は速いよね バックエンドだと言語による差は無いか
856 名前: 警備員[Lv.1][新芽] (ワッチョイ df94-R43V) mailto:sage [2024/05/01(水) 22:35:49.91 ID:Jo6lQIiP0.net] php8でJITが導入されていてそれを利用することで現状だと単純な計算速度ではphpの方がpythonより速いと思う ただpythonもJIT導入予定と聞いている
857 名前:デフォルトの名無しさん (ワッチョイ bf5f-b946) mailto:sage [2024/05/03(金) 19:58:28.18 ID:+USmG/sP0.net] node.jsってそんなに速いの? 知らなかった
858 名前:デフォルトの名無しさん (ワッチョイ 277b-z+LQ) mailto:sage [2024/05/03(金) 20:16:52.06 ID:+XAyZCIw0.net] >>857 Rustと比較対象にされるくらいは速いよ https://deepu.tech/concurrency-in-modern-languages-final/ というかね、PHP/Python/Rubyが論外に遅すぎて、これらの言語使った時点で速度は度外視前提だから、 これらについては速度比較すらまともにされて無いでしょ
859 名前:デフォルトの名無しさん (ワッチョイ 277b-z+LQ) mailto:sage [2024/05/03(金) 20:57:10.70 ID:+XAyZCIw0.net] こっちの方がよかったかも? https://www.techempower.com/benchmarks/#hw=ph&test=composite§ion=data-r22
860 名前:デフォルトの名無しさん (ワッチョイ 7f63-Ufki) mailto:sage [2024/05/03(金) 20:59:44.77 ID:9ebiuCIb0.net] この人はどんな利益を得ているんだろう
861 名前:デフォルトの名無しさん mailto:sage [2024/05/04(土) 00:40:36.66 ID:TbdOZmgm0.net] 個人でPHPとJS(ブラウザ)とPythonの速度比較したら JS, PHP, Pythonの順で早かった JSはGoogleのエンジニアがV8組んでるだけあってインタプリタの中じゃ最速だな
862 名前:デフォルトの名無しさん (ワッチョイ a744-u6uN) mailto:sage [2024/05/04(土) 09:25:16.85 ID:hhjXOeVD0.net] ゆうてサーバ側でjs使うのはawait promise地獄になりがちで見た目がね
863 名前:デフォルトの名無しさん mailto:sage [2024/05/04(土) 11:46:29.84 ID:7p9CFEdI0.net] >>862 いやasyncは見た目も地獄にはならんやろ お前大幅に勘違いして無いか?
864 名前:デフォルトの名無しさん mailto:sage [2024/05/04(土) 12:25:25.54 ID:qT6RngEw0.net] でもあと数年でC = python > js >>>> phpになる
865 名前:デフォルトの名無しさん mailto:sage [2024/05/04(土) 14:20:07.47 ID:0cPYdG0t0.net] 数年も経ったら、全く新しい別の何かになってる
866 名前:デフォルトの名無しさん mailto:sage [2024/05/04(土) 14:54:41.55 ID:ur5HC8pk0.net] 昔から「PHPは遅くて使い物にならなくなる:と言われてたが 結局シェア見ると落ちないしなぁ PHP5時代と比べてPHP8の早いこと
867 名前:デフォルトの名無しさん (ワッチョイ a744-u6uN) mailto:sage [2024/05/04(土) 21:20:04.52 ID:hhjXOeVD0.net] >>863 jsとphpで同じ動作の同期的なコードを書いてみ async不要で同期でかける方がキレイなのは当然やろ そらあんま複雑な処理が無けりゃ変わらんやろけど
868 名前:デフォルトの名無しさん (ワッチョイ 437b-GrxP) mailto:sage [2024/05/05(日) 00:06:00.25 ID:VpuIuth60.net] >>867 いやawaitが付いてるだけで同じだぞ JSは全部の関数にクロージャ付きだから変数も同様にアクセスできる点がphpとは違う まあここはphpのスレなのでもういいが、気になるなら以下見てみ > async function sequentialStart() { > console.log("==SEQUENTIAL START=="); > > // 1. これは即時実行される > const slow = await resolveAfter2Seconds(); > console.log(slow); // 2. これは 1. の 2 秒後に実行される > > const fast = await resolveAfter1Second(); > console.log(fast); // 3. これは 1. の 3 秒後に実行される > } > https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
869 名前:デフォルトの名無しさん mailto:sage [2024/05/05(日) 00:22:56.43 ID:VpuIuth60.net] と思ったが、もしかしてJSって子関数はnew Promiseしないと駄目な感じか? 俺はてっきりC#のと同じと思ってたから勘違いしてたかも? まあこの辺はこちらで確認する。 ちなみにcallback地獄はJSの連中が馬鹿だらけだから正当化してるだけで、 実はちゃんと抽象化して組めばcallback地獄にはならない。 そしてサポートの関係もあり、俺はasync/await使ってきて無いから勘違いしてるかもしれん。 さらに言うとPromiseもゴミだと思ってるよ。あれは不要な仕様だ。JSの連中はこれも正当化してるが。 というわけで、JSも色々ゴミだが、全体見るならphpの方がゴミだと思うぜ。
870 名前:デフォルトの名無しさん mailto:sage [2024/05/08(水) 01:04:50.50 ID:Aq7zVlUM0.net] そんなPHPもpythonに比べたら10倍マシなわけで 世の中ままならないもんだよな
871 名前:デフォルトの名無しさん (ワッチョイ 6fe7-M17B) [2024/06/13(木) 08:47:33.24 ID:8kjXK8h10.net] POSIXメッセージキューをサポートしてる拡張モジュール でおすすめをおしえて
872 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 06:05:03.56 ID:jdN7cEyp0.net] ニコニコ動画のランサムウェアって、phpの最近のやつと関係あるのかな ttps://innovatopia.jp/cyber-security/cyber-security-news/31048/
873 名前:デフォルトの名無しさん mailto:sage [2024/06/15(土) 09:17:52.21 ID:nM9V99Q80.net] ハイパーバイザーの管理権限まで盗られたって話だから 個々のランサムウェアがどれなのかなんて些末な問題だろうな
874 名前:デフォルトの名無しさん [2024/06/19(水) 19:07:59.04 ID:rcHRA2+h0.net] FuelPHPの代替ってどんなのがあるの?
875 名前:デフォルトの名無しさん mailto:sage [2024/06/20(木) 02:13:33.44 ID:GIlSg4MN0.net] Laravel一択
876 名前:デフォルトの名無しさん (ワッチョイ cfbb-muU0) mailto:sage [2024/06/23(日) 00:56:02.55 ID:/fMztCCi0.net] なんかわけあって形態素解析ライブラリを作ろうかと思うんだけど辞書はMecabの辞書を使うとしてどうやって解析しようかな 最長一致で比較してマッチしたら抜き出すって方法を考えてるけど皆ならどう作る?
877 名前:デフォルトの名無しさん (ワッチョイ 3f4d-tL4z) mailto:sage [2024/06/23(日) 11:04:07.30 ID:BYEVr0N80.net] 作らない 断る
878 名前:デフォルトの名無しさん (ワッチョイ 7f63-uW6V) mailto:sage [2024/06/23(日) 11:07:53.98 ID:8Dr+KSC80.net] 宿題か?自分でやる方が良いぞ
879 名前:デフォルトの名無しさん mailto:sage [2024/08/31(土) 14:07:37.82 ID:o+gAgvj50.net] >>874 flight
880 名前:デフォルトの名無しさん mailto:sage [2024/09/06(金) 14:19:31.11 ID:J9Dx+vkX0.net] PHP v8.0.30で $LDC=0; $LDC=ldap_connect($ldhost) ldap_set_option($LDC,'LDAP_OPT_PROTOCOL_VERSION', 3); のldap_set_option()行でmust be of type int,string given in~のエラーが出たんだけど3がint値として読めないって言われてるのかな
881 名前:デフォルトの名無しさん mailto:sage [2024/09/06(金) 16:44:39.99 ID:QtgCCsYf0.net] 引数の、どれかだろ
882 名前:デフォルトの名無しさん mailto:sage [2024/09/06(金) 16:50:09.62 ID:xfC3DfZt0.net] LDAP_OPT_PROTOCOL_VERSIONは定数なんだからクォートで囲っちゃだめでしょ
883 名前:デフォルトの名無しさん mailto:sage [2024/09/09(月) 18:23:38.31 ID:8AzXAdmE0.net] >>882 言われた通りだったわ ありがとー
884 名前:デフォルトの名無しさん [2024/09/23(月) 08:24:39.70 ID:TOpTpz460.net] 連想配列のarray_merge全然うまくいかんやん ほんとなんなのこの言語、まじイラつく
885 名前:デフォルトの名無しさん [2024/09/23(月) 08:30:38.84 ID:TOpTpz460.net] できてるけどvar_dumpで表示されてないだけか? 要素数23ってなってるのに15しか表示されん まじでよーわからん
886 名前:デフォルトの名無しさん mailto:sage [2024/09/23(月) 09:07:14.03 ID:dfCQ5A4R0.net] まず再現コード貼れよ、話はそれからだ
887 名前:デフォルトの名無しさん mailto:sage [2024/09/23(月) 09:28:56.66 ID:h2Aoyerx0.net] 再現コード貼れ しか言わない奴は大抵は 十分に与えられた情報を見ても解決できない 無能隠しの時間稼ぎなんだよね
888 名前:デフォルトの名無しさん mailto:sage [2024/09/23(月) 09:40:34.39 ID:dfCQ5A4R0.net] >>887 は超絶無能だとは断定出来るね 891がスーパーエスパーなら891の時点で答えを貼るべき 自分では出来ない癖に他人をやたら貶すのは超絶無能な奴の特徴 そもそも本件は、再現コードも数行で済み、それがあれば誰でも回答出来るレベルなので、 本件で「無能隠し」とか言い出す時点で、何が簡単で難しいか判断すら出来ない大馬鹿
889 名前:デフォルトの名無しさん mailto:sage [2024/09/23(月) 10:16:17.79 ID:nGCd//e20.net] 十分に与えられているとは思わないけどな エスパーならできるかもしれんが、普通の人には無理
890 名前:デフォルトの名無しさん mailto:sage [2024/09/23(月) 11:44:05.43 ID:kXVPwjR50.net] まあそうこうしてる間に本人は解決してるだろうよ、こんくらいなら コードなきゃ>>885 もイミフだしな
891 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 20:00:35.39 ID:hH68uGfdp.net] >884-885 エスパーだから答えてあげる。恐らく下のうちのいずれかが原因。つまりPHPは間違えてなくて君が間違えている 1、null値が要素の中に入ってる。nullが入ってる場合は対象の要素を詰めてマージされるよ 2、配列のキーが文字列で指定されていて、配列Aと配列Bで同様の文字列キーを使用している。配列の文字列キーが同じ内容だと後列の文字列キーの配列要素で上書きされるよ。以下は例 $arr1 = ['key' => 'value1']; $arr2 = ['key' => 'value2']; $result = array_merge($arr1, $arr2); // 結果: ['key' => 'value2'] 3、配列ではない値を引数に入れてる。array_merge()に配列以外の引数を渡すと警告が発生して予期しない結果になる可能性があるよ。 1と2の合わせ技の可能性もあるな。なんにしてもドキュメント読む癖付けた方がいいぞ。
892 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 20:33:58.69 ID:RCBNwTlp0.net] >>891 いやエスパーすべきは、 > var_dumpで > 要素数23ってなってるのに15しか表示されん の部分だと思うが。 そして俺がエスパーするなら、多分初心者用 『教材』 としてどこかの馬鹿が作った、 実用性皆無だが、PHPなりの型変換等で見た目奇妙な動作をする何かを与えられ、 動きを理解しなさい、或いはどうしてそうなるかを説明しなさい、みたいな 『練習問題』 をやらされてるのではないかと。 正直この手の 『クソ課題』 は無視でいいよ、他言語である程度組める実力があるのなら尚更。 array_mergeなんて普通に使ってる分には名前通りの直感的な仕様だし、ハマる所ではない。 PHPはクソだが、クソ糞言うのなら他言語使えばいい話であって、 PHP使うと決めた/決まっているのならクソであろうが使うしかないし、糞な所ばかり気にしてても始まらない。 そしてPHPが糞だと思うのはプログラミング言語と捉えるからであって、Web専用シェルと考えればすごく有用だと気づく。
893 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 22:38:14.36 ID:y4Her8JE0.net] >892へ >891の私がエスパーなりの解釈させてもらうw >できてるけどvar_dumpで表示されてないだけか? >要素数23ってなってるのに15しか表示されん 「できてるけど」=array_mergeは機能してるけど、 「var_dumpで表示されてないだけか?」=var_dumpして23あった要素が15に減ってるのは表示されてないだけか? 「要素数23ってなってるのに」=あ、ごめん主語無かったねぐへへへwつまり配列を直接var_dumpでデバッグした時は要素数23ってなってるのに 「15しか表示されん」=array_merge の結果をvar_dumpすると15しか表示されん 繋げると array_mergeは機能してるけど、var_dumpして23あった要素が15に減ってるのは表示されてないだけか?あ、ごめん主語無かったねぐへへへwつまり配列を直接var_dumpでデバッグした時は要素数23ってなってるのにarray_merge の結果をvar_dumpすると15しか表示されん いずれにしても>884-885のように話し言葉と書き言葉を一緒くたにしてしまう人や、脳みそと口または手が直結してしまって伝える内容を並び替えできない人とは本気で仕事したくないw
894 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 00:37:53.28 ID:793m8l+c0.net] こんなことに数分でも時間つかうのがもったいないw
895 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 01:03:15.09 ID:xb00usC10.net] そのコメント書くのに何分かかった?
896 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 10:54:14.55 ID:+POBWt7L0.net] エスパーしてる連中がキモすぎる
897 名前:デフォルトの名無しさん (ワッチョイ dee7-rNKn) mailto:sage [2024/09/27(金) 16:27:53.83 ID:wGbKsk4o0.net] $a = ["a"=>0, "b"=>1]; $b = ["b"=>1, "c"=>2]; $c = array_merge($a,$b); var_dump($c); 俺が>>885 ならまず最初にこれを疑うかな
898 名前:デフォルトの名無しさん (ワッチョイ 6f68-2Kaa) mailto:sage [2024/10/03(木) 19:40:44.30 ID:/z7xIJX+0.net] netbeans使ってるんですが、こいつが出す警告(モジュールは20行以内にしろ、$_POST使うなとか、クラスは1ファイル1クラスにして名前を揃えろとか)には従っておくほうがいいんでしょうか? $_POSTなんて入門サイトとか入門書だと未だに主流だし、今の相場がどんなものか知りたいです
899 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 20:14:27.24 ID:+g5yChSt0.net] netbeansってのは使った事ないから分からないけど「$_POST使うな」は無茶だと思うけどね あとモジュールも20行以上になる事なんか当たり前にあるよ 実際にソース貼って、その上でどんな警告出てるかも貼った方がより正確に回答出来る気がする コードの文脈を考えた時に必要無い処理である可能性もあって警告出してくれてるかもしれんからね(知らんけど)
900 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 20:35:40.28 ID:SHWJQkyV0.net] この辺ではなかろうか 「スーパーグローバル$_POST配列に直接アクセスしないでください」
901 名前:902 mailto:sage [2024/10/03(木) 20:53:20.38 ID:/z7xIJX+0.net] >>899 >>900 実際のとこ、filterinputを使ったりモジュールは分割したりで回避できてるのですが、もしかしてこんなことやってるの俺だけ?って不安になったので
902 名前:デフォルトの名無しさん mailto:sage [2024/10/03(木) 20:59:42.10 ID:tAJvCxJt0.net] >>900 netbeans使ってるけどそれだぞ ちなみに表示は、以下 ================================ スーパーグローバル$_POST配列に直接アクセスしないでください。 かわりにフィルタリング関数(例: filter_input()、is_*()関数を使用した条件など)を使用してください。 ---- ([Alt]+[Enter]キーを押すとヒントが表示されます) ================================ >>898 分からないのなら従うのが常道(=自分で自信持って不要と判断出来ないのなら従え) 入門サイトとか入門書がゴミなだけ、マジで参考にするのは全部php,netとlaravelにしろ 掲示板なんて簡単ですよ!とか言いつつgetで書き込みとか、死ねな入門サイトはいくらでもある Qiitaの方がまだだいぶマシ、あいつらは自分でやった事を書いてるだけなので > モジュールは20行以内にしろ 普通に経験があれば自分で判断出来る、出来ないのなら従え > $_POST使うな 上記の通り、filter_input使え馬鹿、と出るはず > クラスは1ファイル1クラスにして Javaの文化で、つまり慣れの問題 > 名前を揃えろとか 意味不明(必要ないのではなく、何が言いたいのか分からんので判断付かない)
903 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 08:58:20.60 ID:/JNwl4gJ0.net] >902 俺は>899だが$_POSTに関して、配列に直接アクセスしてゴニョゴニョすんなよってことね、理解した >898 ちなみにfilter_inputをバリデーションとかサニタイズで使おうとすると期待してた動作通りに行かないこともままあるから気を付けてね。例としてhtmlタグ取り除きたい時とかは正規表現使って自分で関数作った方が良かったりする。いずれにしてもphpの組み込み関数使う時は必ずphpの公式リファレンス読むようにした方が良いよ
904 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 10:07:59.19 ID:5cV2iGMA0.net] >>903 > 例としてhtmlタグ取り除きたい時とかは正規表現使って自分で関数作った方が良かったりする。 気持ちは分かるが特定のタグを除去したいときは公式DOM使った方がよいかと 単純な末端ノードならいいが、階層作られたらだいたい無理なので なおボロカス言われてるDOMだが、俺はJSでもjQuery不要派なのでさほど不満はなかった
905 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 11:52:16.55 ID:/JNwl4gJ0.net] >904 フロント側でタグを取っちゃうって認識で合ってるかな?自分が基本バックエンドの人間なのでフロント殆ど触らんのよね…w でも提案有難う
906 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 12:00:04.09 ID:b7vgemF30.net] ちゃんとしたものを作ろうとすると、本格的ブラウザ作る並に大変笑
907 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 12:14:58.84 ID:M8Xyx2No0.net] phpの話なのにフロントでタグ取り除くとかバックエンドで正規表現使ってタグ取り除くとか意味わからん フロントでやるならJSの仕事だしバックエンドのPHPなら自分でhtml組み立ててるんだから正規表現使ってhtmlタグを取り除く必要とかそもそもない
908 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 12:48:49.83 ID:5cV2iGMA0.net] >>905 htmlタグを取り除く=PHPでスクレイプ、或いは掲示板等で許可してないタグを投稿されたときに、PHPでタグを除去する場合を考えている PHPのDOMはゴミ扱いされてるが、ほぼ生JSと同じなので個人的には問題なかった 正規表現は階層/入れ子を考慮されてないので、正規表現でhtmlをパースするのは死ねるし変な物を食わされたらだいたいバグる とはいえDOM構築はそれなりに遅くなるので、スクレイプ先のhtml構造が単純かつ固定的なときは正規表現で除去するのもあり フロント側に不要タグ含めて垂れ流すのもありだが、DBやネットワークの帯域を無駄に消費するだけなので、 可能であれば上流=PHP側で除去した方がいいのは事実
909 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 13:33:27.23 ID:swUgCMz+0.net] filter_input使え って警告、PhpStormでは見たことないな 運良く推奨されるパターンでも踏んでるのかな
910 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 14:14:38.35 ID:5cV2iGMA0.net] >>909 IDE内部のリンターなので、直接関係ないのと、 あったとしても普通に切れる
911 名前:デフォルトの名無しさん (ワッチョイ 3f72-Ligk) mailto:sage [2024/10/04(金) 16:00:15.82 ID:M8Xyx2No0.net] >>908 PHPでスクレイプ時に特定のhtmlタグを取り除くってレアリティ高いな そっちはいいとしてユーザー入力に許可されてないタグがあるならエラー返した方がいいと思うが除去するにしてもstrip_tagsやHTMLPurifierみたいな出来上がったものを使った方がいいのでは? あとフロントでタグ除去するのはユーザーアクションに応じてhtmlを変更するためで不要タグを垂れ流してるわけではない
912 名前:デフォルトの名無しさん (ワッチョイ 037b-jS/a) mailto:sage [2024/10/04(金) 19:01:50.57 ID:5cV2iGMA0.net] >>911 > strip_tagsやHTMLPurifierみたいな出来上がったものを使った方がいいのでは? これらはいいね 言及出来なかったのは俺が単に知らなかったからで、タグ単位の除去にはこれらを使うべきだろう > レアリティ高いな そうでもないから上記の関数/ライブラリが整備されてるわけだ ただPHPはこの手の、あると便利だが的な関数が無駄に多く、把握しきれてなかったのは上記の通り > ユーザー入力に許可されてないタグがあるならエラー返した方がいいと思うが 相手がまともな人間の場合はそうだが、 攻撃目的で掲示板にタグを書き込んでくる場合、晒しの意味でも黙って落としてそのまま表示させるのもあり 瞬時にエラーを返してしまうと、何がどこまで駄目なのかすぐばれてしまう 何だかんだで無駄に時間をかけさせるのは地味に有効 > あとフロントでタグ除去するのはユーザーアクションに応じてhtmlを変更するためで不要タグを垂れ流してるわけではない それは俺に言わせれば、(使う可能性のあるタグなので)仕様上サーバー側では落とせない、となる サーバー側で落としておくべきなのは、どうやっても不要なタグ、具体的に言うとscriptとか、 或いは公式strip_tagsの警告に書かれてるとおり、onXXXX属性 ただstyle属性まで落とすと、タグを許可した意味が無くなってくるので、判断は難しいところ opacityとかだけは許可しない等、属性も精査する気だと、結局DOM使う事になるとは思うが…HTMLPurifierでも出来るらしい まあこの辺は要調査だな
913 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 19:47:14.07 ID:eshA0leg0.net] >907 どう言うこと?w PHPでデータベース扱ってる現場ならバックエンドにデータ飛んでくる前にタグ取り除くでしょ 俺の場合はPHPのユーザー定義関数で正規表現使ってタグ取り除く関数を作ったらhtmlのフォーム内でバリデーションとサニタイズ行なってるけど >自分でhtml組み立てるんだから 分業してる現場なのでJSはフロントの子がやってるのよ だからフロントは殆ど触らないし関数作ったらフロントの子に渡してる
914 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 19:48:47.53 ID:eshA0leg0.net] >913 × htmlのフォーム内でバリデーションとサニタイズ行なってるけど ⚪︎ htmlのフォーム内に適宜関数を挿してバリデーションとサニタイズ行なってるけど
915 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 20:30:24.85 ID:5cV2iGMA0.net] >>913 俺宛ではないが、>>907 の使い方はまあ普通、というか9割以上の局面ではそうなる > バックエンドにデータ飛んでくる前にタグ取り除く そもそもDBへのアップデータでタグを許可してない/する必要ないのがほぼ全部 例えばここ5ch、安価は最終的に<a>として表示されるが、ユーザーの投稿段階ではただのテキスト それをDB登録段階で<a>にしてしまうか、JSで<a>にするかは実装によるが、PHPでタグ除去なんてする必要がない > PHPのユーザー定義関数で正規表現使ってタグ取り除く関数を作ったら > htmlのフォーム内に適宜関数を挿してバリデーションとサニタイズ行なってる > だからフロントは殆ど触らないし関数作ったらフロントの子に渡してる もしかしてEmscriptenかWebAssenbly使ってPHPのコードをクライアントサイドで動かしてる? それはすさまじくレアだと思うのだけども
916 名前:デフォルトの名無しさん mailto:sage [2024/10/04(金) 21:11:39.79 ID:eshA0leg0.net] >915 >PHPでタグ除去なんてする必要がない これは自分の言葉足らずでしたわ。謝ります ユーザーからのhtmlタグの投稿を一切許可していない現場なのよ、だからタグはDB到達前に全部サニタイズしてる >もしかしてEmscriptenかWebAssenbly使ってPHPのコードをクライアントサイドで動かしてる? いや、素のPHP(Laravelとかのフレームワーク使わず)でコード書いてて、ライブラリ含めて全てフルスクラッチで作成してる現場だよ
917 名前:デフォルトの名無しさん mailto:sage [2024/10/16(水) 16:44:48.13 ID:tW0ztwU3d.net] 先生!PHP独学したいのですが 独習PHP 第4版 山田 祥寛 (著) これでいいですか? C# Java VBA JavaScript 経験者です
918 名前:デフォルトの名無しさん mailto:sage [2024/10/16(水) 22:44:42.10 ID:XSPkOsBG0.net] >>917 php.netを頭から全部読めばそれで十分 多分SQLも必須、というかPHPは自身の変数等を保持する機構が言語にないのでどうせDBを使うことになる
919 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 00:25:58.27 ID:exPg1AY+0.net] >>918 本物のワルなのでセッション使っちゃうぜ
920 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 00:33:42.25 ID:13fsix/Td.net] >>918 先生!ぼくおじさんなので本にカキカキメモしながらじゃないと勉強できません 後出しですがSQLも基本的なところはできます 独習PHP 第4版が古すぎるとかいうのでなければよいのですが
921 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 08:25:20.34 ID:aXgLojE+0.net] >>919 ユーザーまたげねえだろ というか普通のサーバーのように、全体の変数を保持する事が出来ない だから毎回初期値やデータを一からロードし直す必要があってウザかったが、 JSもクローム拡張V3では同様になってるから、サーバーとしては適切な構造なのだろうよ PHPの場合、これにより毎回最初から行うのを強制され、結果的に毎回同じ動作となり、デバッグしやすくなってるのも事実 糞言語だが、何だかんだで結果的によく出来てるから使い続けられてる でもやはりウザイのも事実で、Node他ならもうちょっとすっきり書けるのに、というのは多々ある ちょっとした配列を保持出来てれば済むのに、一々DBにtry-catchになるから >>920 持ってないから知らん
922 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 08:51:18.77 ID:Q0zeibWJ0.net] >>921 セッションIDを知っていればユーザーを跨げるので、本物のワルはこれを悪用しちゃうぜ
923 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 09:15:02.73 ID:aXgLojE+0.net] >>922 いやそれはアウトだろ ただ、「絶対に誰にも使われないセッションID」を作れれば便利な倉庫に出来るのかな? まあ俺はそこまでPHP知らんので止めとくが しかしPHPは色々糞ったれなことが多い 今目に付いてるのはアップロードされたファイルが $_FILES["pictures"]["tmp_name"][$index] に入る点 逆じゃボケ!!!$_FILES["pictures"][$index]["tmp_name"] に入れろや!!!ってね この辺一々糞コード化を余儀なくされてストレスが溜まる まあlaravel導入すれば解決するんだろうけどさ
924 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 23:09:44.41 ID:goFejqio0.net] >917 私見で恐縮だけど、それだけ他言語を学習済みなら(経験年数にもよるけど)基礎的な事は理解してるはずだから書籍はあんまり意味を為さないと思うなー @他の人も言ってるようにリファレンス読み込むのがいいと思う。どのページに何が書いてあるか理解把握するのが大事かな、と。あくまで重要なのはリファレンスの内容を覚えるんじゃなくて、必要な時に直ぐに取り出せるように「何処に何が書いてあるか」を理解把握すると良いと思うよ。例えばphp7系とphp8系で大幅に仕様変更があったんだけどその差異を見るにはどのページ見れば良いかとか、もっとシンプルに言うと関数のリファレンスは何処に纏まってるか、とか。 @の手順が終わったら、プログラム経験者でphp手っ取り早く学びたいならLaravelの環境を構築するかまたはWordPress作って弄り倒すのが良いと思う。 前者の理由は、ここ数年のphp開発現場はLaravelを基本としてるから。 後者の理由は、WordPressはphpで構成されているのでソースレベルで弄り倒せるようになれればclassや一通りの組み込み関数も理解出来ていると判断できるから(俺社比) 若干話変わって個人的に興味があるのは、何故phpを学習したいと思ったのかを知りたいな 聞きたい理由としては、phpって言語としても旬は過ぎたし、もしWordPressが使われなくなったらレガシーな環境を除けばphpを選択する意味が無くなってきてると個人的に感じてるのよね。(俺自身はphp好きだけどw) 例えば最近ならNode.js+TypeScript+.vueとかの方が需要高いから何故phpを学ぼうと思ったかその機会を知りたいと思いました。長文スマンでした
925 名前:デフォルトの名無しさん mailto:sage [2024/10/17(木) 23:37:25.31 ID:goFejqio0.net] 横レスおじさんだけどごめんね❤ >919 については、確かにセッション使えば自身の変数は保持できる >921 に対しては、おっしゃる通りユーザ跨げない。後述(※参照)するけど、ユーザー跨ごうとすると変則的な運用のみ使えると思う(という知見しか自分には無い)から結論非常にオススメしない。 >922 マジでオススメしない。理由はセッションIDを対象ユーザー以外で使うのは大事故に繋がるから。 (※)一応例外も挙げておくけど、【そのサービスを1人しか利用しない】という前提ならもしかしたらありかな?とは思う。逆を言えばそれくらいのレベル感じゃ無いとセッションIDの使い回しは超御法度。 つまり非常に限定的で、ローカル環境で構築したサービスや外部非公開の環境というのが前提で、もし外部に公開するサービスならセッションIDは絶対に使い回しちゃダメよ、って事。
926 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 07:32:13.18 ID:IRpwug8I0.net] >>924 > レガシーな環境を除けばphpを選択する意味が無くなってきてる 商用ならその通り ただしレンタルサーバーのような小口だと、プロセス2秒でぶった切る運用が出来るPHPの方が相性がいい だからブログにはPHP+WPの方が相性がよく、 今のところ他言語では…そういえばHugoとかあったがあれどうなったんだろ? ちなみにphp.net、読み物としては非常に優秀だが、リファレンスとして逆引きするにはイマイチだと分かった だから一通り知って、しばらく使わずに忘れて、再確認したいときに > 何処に何が書いてあるか を覚えておかないと辿り着けない (逆に他言語は逆引きするように書いているから、頭から読む読み物としてはイマイチ)
927 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 08:54:50.32 ID:WQ7AgxmX0.net] >926 うんうん、小口の場合は確かにphpですね。個人からの依頼や企業でも小規模なWEBページの依頼はphpが未だに多い印象。 php.netはそうなのよ、読み物としては立派なんだよね。phpの設定関連は読み込むと理解把握しやすい。一方で「この機能を実現する組み込み関数ってあるかな」と逆引きしたい時や、「ソース書いてて躓いた時、詰まった時」はあんまり役に立たない印象。 そこで次はどうするかというとネット記事(個人ブログ含)に行き着くんだけど、php関連のネット記事って有象無象入り混じってて特殊なアプローチ(裏技的な内容)やセキュリティガバガバのソース提示されてるから初学者はネット記事参考にしない方が良い、というね。 やっぱり実際の業務で学ぶか、WordPress作って理解するか、GitHubで学ぶとかがいいかなーと思う
928 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:05:17.56 ID:IRpwug8I0.net] >>927 内容については全文同意でいいが、>>920 に戻ると、 php.netは読み物としてはMDN/MSDN/Oracleと比べて段違いにいいので、 紙好きであっても初手として通読する事を進める(他言語のリファレンスを想定しているのなら特に) どうしてもというなら全文印刷して読め、それくらい良質だ 一方で > php関連のネット記事って有象無象入り混じってて特殊なアプローチ(裏技的な内容)やセキュリティガバガバのソース提示されてるから初学者はネット記事参考にしない方が良い これは本当にその通りで、理由はPHPが糞言語でろくなコードが書けないというのも多々あるが、(927参考) JSも相当に酷いので、「主戦場がWebなので(技術的/気分的に)『初心者にも』情報発信しやすい」のが主な理由だろう Web系は馬鹿しかいないというのも通説ではあるが、 実際の所Cなんて仕事化されない限り(例えば大学の準教授で講義内容を公開するとか)上級者でもWeb記事なんて書かないから、 記事書いてる時点で大半は教える事が仕事として成立する程度のフィルタがかかってるので全然違う (すまんがNGワード規制に引っかかるようなのでバラバラに落とす)
929 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:06:19.93 ID:IRpwug8I0.net] ではどうすればいいかといえば、俺は「レビュー済み」のコードを参考にする事を勧める
930 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:07:10.73 ID:IRpwug8I0.net] 俺は上記の通り、JSではMDNのコードしか信用しない事にしてるが、それは「MDNは多数に見られてる」からだ(=酷いコードは修正済み) StackOverflowが良質なのも、各回答がレビューされて上位順に並ぶからだ
931 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:07:41.36 ID:IRpwug8I0.net] この点、php.netは同様に、各ページの下にコードがずらずらと『上位順』に並び、 結果的に各ページにStackOverflow並の上質なコードが付随する事になってる
932 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:08:32.58 ID:IRpwug8I0.net] 初学者であれを全部読むのは辛いだろうが、あのコードも読む価値があるので余裕があれば読むべき
933 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:09:03.23 ID:IRpwug8I0.net] 大体において各ページの機能のハマりポイントをコードで解説してある
934 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:09:27.64 ID:IRpwug8I0.net] 面倒なら、ハマったときにはググると同時にphp.netのその機能のコードも読む事だ
935 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:10:14.73 ID:IRpwug8I0.net] ちなみに引っかかったらだいたいググるとQiitaで何とかなる事が多いはず Qiitaも勿論いいサイトではあるが、結局「上位順」ではないので、StackOverflowに成れなかった、というより成り損ねた感がある これは10年ほど昔にJS界隈でKenOkabe、通称「毛の壁」が、 細かい間違いを修正するよう突っ込みまくってウザがられて荒らし扱いされ、結局コメント機能が削除された、という経緯があるらしいが 結果的に「よりよいコード、より正しい情報を発信する」(StackOverflow的価値観)より、 「僕が気持ちよく情報発信する」(ゆとり世代的価値観)を優先したので、そうなってる まあ創始者がゆとり世代だし、この判断が間違ってるかどうかも微妙で、例えば商業的意味なら「成功」となるのだが、 とにかく現状ではQiitaは玉石混淆、というよりゴミの方が多いので要注意 それでもないよりは100万倍いいので、素晴らしいサイトではあるけども
936 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:11:06.01 ID:IRpwug8I0.net] これはQiitaのユーザーの問題というよりは、やはりレビューされてない事によるものだと思ってる 同様にGitHubでも個人レベルで公開してるのは、公開の場所が違うだけで、同様に糞コードの地雷原でしかない
937 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:11:36.87 ID:IRpwug8I0.net] ただ世界的に超有名なOSS(勿論GitHub上)でも超絶糞コードな事に遭遇した事があるので、(なおC言語) OSSで多数に見られてればコードの質が上がる、ということでもないらしい
938 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:11:54.86 ID:IRpwug8I0.net] 結局はレビュワーによるのだが、OSSでレビューで落としたら関係がそれなりに悪くなるらしいので、 長期戦略を考えたら糞コードもなかなかに落としづらいというのはあるのかもしれない
939 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:12:12.67 ID:IRpwug8I0.net] この点、PHP自体もOSSの産物だから、はっきり言って機能がデタラメで統一感もなく、 大手がガッツリ整備してる他言語(C#/Java等)と比べたら色々チグハグだが、 これもそういうものだと認識して諦めるしかない 文句があるならお前が直せ、のOSS文化そのままだ とはいえPHP8には表面的には機能が揃ってる感はあるが
940 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 14:14:03.60 ID:IRpwug8I0.net] …多分「コード」がNGワードっぽい
941 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 18:47:58.42 ID:9d2rbs7t0.net] ここは毛の壁の落書き帳です
942 名前:デフォルトの名無しさん mailto:sage [2024/10/18(金) 20:59:29.50 ID:IRpwug8I0.net] 実際の所俺は、毛の壁が超えた、ゆとり世代的レッドラインがどの程度なのかは知りたいんだけどね Qiita上では綺麗さっぱり消されてるので確認出来ないし まあ言いたい事は、 つべこべ言わずpnp.netを読め、そして各ページのコードも読め、だ 他言語の常識でpnp.netを忌避するのは、勿体なさ過ぎる
943 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 10:50:17.35 ID:hAiZn1ip0.net] 環境: PHP 8.3.6, ubuntu24.04 LTS, oniguruma 6.9.9 mb_ereg_replace() に使う正規表現の中で (*FAIL) が使えません PHP側で (*hoge) の形の正規表現パーツを無効化しているようですが もし使えるようにする方法があれば教えて下さい 最近 oniguruma に (*SKIP) が実装されたので正規表現の高速化のために使いたいです mb_ereg_replace() https://www.php.net/manual/ja/function.mb-ereg-replace.php
944 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 11:21:53.55 ID:9J9C943n0.net] 知らんが常識的にはdllを差し替えるだけでは?
945 名前:947 mailto:sage [2024/10/21(月) 12:10:55.14 ID:hAiZn1ip0.net] >>944 ありがとうございます、PHPで使われている正規表現ライブラリは最新のものでした $ php -i | grep "onig" Multibyte regex (oniguruma) version => 6.9.9 PHP側が古い可能性もあるので一応 PHP 8.4.0 RC2 を試してみます
946 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 12:46:44.10 ID:9J9C943n0.net] >>945 6.9.9が最新ならお前は多分勘違いをしてるぞ > Master branch > Update Unicode version 16.0 > Add new operator (*SKIP) > > Version 6.9.9 > 以下略 > https://github.com/kkos/oniguruma この書き方なら、『開発中の』Master branch(=6.9.10としてリリースされるであろう物)には入ってるが、まだリリースされてない つまりどのPHPバージョンにも普通は入ってない だから自分でonigurumaをコンパイルして差し替える必要がある
947 名前:947 mailto:sage [2024/10/21(月) 13:48:46.27 ID:hAiZn1ip0.net] >>946 onigurumaの差し替えはやる予定でした、そこに気付かれるとは..すごい しかし (*FAIL) すら使えないのでonigurumaの差し替えをしても意味が無いんです 恐らくPHP側で無効にしていると思われるのですが有効にする方法をどなたか..
948 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 14:34:37.43 ID:9J9C943n0.net] >>947 > やる予定 それは実際に試して言ってる? 一般的にdllは呼ぶだけで、その前の段階で前処理なんてしない というかそれやったら、PHP側のコードをonigurumaのバージョン毎に変えないといけなくなるだろ 無駄に依存性が増えるだけになってしまう 他ライブラリなんていつどう更新されるかも分からないのに だから普通は差し替えれば動くだけ 動かないのであり、かつその原因がそちらの予想通りPHP側にoniguruma特定バージョン用のパッチが当ててある場合は、 php.iniにそれを切る為の設定が(一般的には)あるはず でも繰り返すけど、普通はそうはせず、差し替えたら動くだけ、差し替えなければ動かないだけ、だと思うよ 動かないなら、そちらの設定間違いで、うまくdllを掴めてない可能性の方が高い 実際その(*FAIL)がどういう機能か知らんが、 (* 自体は対応してないとエラーになるでしょ 普通はそのエラー自体もライブラリ、つまりonigurumaやpeclに判定させて、throwさせるものだから
949 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 15:05:17.60 ID:9J9C943n0.net] >>948 訂正 × pecl ○ pcre 分かる範囲だがphpにはpeclもあるようなので…
950 名前:947 mailto:sage [2024/10/21(月) 15:21:24.44 ID:hAiZn1ip0.net] >>948 >それは実際に試して言ってる? 実は最初から最新の Master branch (3237 commits) しか入れていません つまり oniguruma 6.9.9 のリリース版を使っていません このことを忘れてました、リリース版でも確認してみます、すみません.. そういうものですか、なるほど php.ini と oniguruma 側の確認もしてみます お時間取らせてしまって申し訳ないです、ありがとうございました
951 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 15:30:29.11 ID:9J9C943n0.net] >>950 > リリース版でも確認してみます いいね、これで確認出来る。差が出ればdllは当たってる あとは、サーバー側の設定は別のはずなので、コマンドでは動くがサーバー上では動かない場合はこれ
952 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 20:10:27.85 ID:QKrgL0if0.net] >943 preg_replaceで代替どうぞ $pattern = '/foo(*SKIP)(*FAIL)|bar/u'; $replacement = 'baz'; $subject = 'foobár'; $result = preg_replace($pattern, $replacement, $subject); echo $result; // foobaz
953 名前:947 mailto:sage [2024/10/21(月) 20:30:30.28 ID:hAiZn1ip0.net] >>951 リリース版でも試しましたが結果は変わりませんでした、 (*FAIL) は使えませんでした リリース版でも Master branch の最新版でも oniguruma 単体では (*FAIL) を使えます php.ini にも (*FAIL) などを無効化するような設定は見当たりませんでした PHPをコンパイルする前のソースも見てみたのですが該当しそうな場所を見つけられていません しかしまだまだ調査不足なのでもっと調べてみます もしかしたら思いもよらない場所にある古い oniguruma ライブラリを参照している可能性もあります 何か分かりましたらまた来ます、今日は色々教えて頂きありがとうございました!
954 名前:947 mailto:sage [2024/10/21(月) 21:31:17.66 ID:hAiZn1ip0.net] >>952 すいません!レスに気付いてませんでした! 頂いたコードで (*SKIP)(*FAIL) が正しく動作しているのを確認出来ました しかし私は mb_ereg のほうを使わなければなりません、正規表現で UTF-8 以外の エンコードを使うためです、せっかく作って頂いたのに申し訳ない.. > á おお、 /u はこんな挙動するんですね、勉強になります
955 名前:デフォルトの名無しさん mailto:sage [2024/10/22(火) 07:31:12.59 ID:frvkcjlG0.net] >954 なるほどね理解しました。根本的な解決に向けての助力は他の方が回答してくれてるので、俺は一時的な回避策(w)を提示するよ。その場凌ぎなので悪しからず $original_encoding = 'SJIS'; // 例: Shift-JIS など // 文字列を一時的に UTF-8 に変換 $subject = mb_convert_encoding($subject, 'UTF-8', $original_encoding); // preg_replace を利用して (*SKIP)(*FAIL) を使った正規表現を適用 $pattern = '/foo(*SKIP)(*FAIL)|bar/u'; $replacement = 'baz'; $result = preg_replace($pattern, $replacement, $subject); // 結果を元のエンコーディングに戻す $result = mb_convert_encoding($result, $original_encoding, 'UTF-8'); echo $result;
956 名前:デフォルトの名無しさん mailto:sage [2024/10/22(火) 08:51:20.86 ID:OD5ng7w50.net] >>953 それだと、用意したdllは使われておらず、どこかにある古いonigurumaを掴んでいるように見えるな なら、今掴まれているdllを特定して、そのファイルと差し替えるのが一番早いかと windowsなら実行中の各プロセスがどのdllファイルを掴んでいるかはprocessExplororで簡単に分かるが、 Unixだと聞いたことない(…が、あるんだろうけど) ググるとlddで静的解析は出来るらしい(使ったこと無いが) ただこれは自分でコマンドとして起動する場合用だから、 apache/nginxを起動してるユーザーで実行すれば命中するが、ただのユーザーではいまいちだな https://stackoverflow.com/questions/50159/how-to-show-all-shared-libraries-used-by-executables-in-linux https://linux.die.net/man/1/ldd (実際色々変わってるらしいので何ともだが、昔と同様の起動形態だと、 rc*.dを改変してapache起動直前にlddすれば確定する《はず》) あと、xampp環境だと php_mbstring.dll というものがある これがonigurumaかどうかは分からないが、そうだった場合、php_*となっているのは通常、 「そのものではなく、php側が用意したラッパをつけた状態でdllにした」ことを意味するので、 oniguruma単体ではなく、ラッパつけて再コンパイルする必要があるかも
957 名前:947 mailto:sage [2024/10/22(火) 21:24:40.11 ID:u1LoTuab0.net] 書き込み規制が出たので簡素化して書きます mb_ereg_replace() で (*FAIL) が動かない原因は oniguruma のライブラリの バージョンが古いという問題ではありませんでした oniguruma 6.6.0 で追加された (?W) が使えない一方で 6.9.5 で追加された \x{HHHH HHHH} が使えるなどバージョンの違いでは説明出来ない動作がたくさん確認出来ました この問題は恐らく解決が困難だと思うので諦めます お二方、お付き合い頂きありがとうございました、勉強になりました、感謝です
958 名前:デフォルトの名無しさん mailto:sage [2024/10/22(火) 22:48:01.75 ID:OD5ng7w50.net] >>957 お疲れ すんなり行かない場合はかなりハマる案件なので、判断は妥当だと思う なおオープンソースの新機能周りってわりと普通にバグってるので、意味不明な場合はこれかも
959 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 06:42:46.86 ID:/9Lix2oc0.net] >>957 そういえば書き込み規制の件、 もしまだ原稿が手元に残ってるなら、 多少読みにくくてもいいから、バラバラにするなり、他板のテストスレに落とすなりしてもらえないだろうか 情報が有るのと無いのでは全然違うので、俺は読むから コピペ規制なら、例えばmango板は規制チェックの為の板なので、落とせるし agree.5ch.net/test/read.cgi/mango/1715675838/
960 名前:947 mailto:sage [2024/10/23(水) 14:05:07.85 ID:ETlmKTT60.net] 現時点では php-mbstring の問題だと思っています これはPHPに後から追加するPHPの拡張モジュールです、このモジュールが oniguruma の ライブラリのファイルを参照します oniguruma は各正規表現パーツごとに有効、無効を切り替えられる仕様になって いるのですが、oniguruma を呼び出す php-mbstring 側で (?W) や (*FAIL) が 有効にされていない可能性が高いと考えています 以下のページは oniguruma の各パーツごとのオプション名を説明するページです s://github.com/kkos/oniguruma/blob/master/doc/SYNTAX.md このページを "Set in:" でページ内検索すると各パーツがどのプログラム言語用の 正規表現ルールに適用されるかが分かります (?W) は 30番目の ONIG_SYN_OP2_OPTION_ONIGURUMA というオプションを 有効にすると使えるのですが、これが適用されるルールは 「Set in: Oniguruma」と 書いてあるので正規表現ルールを "Oniguruma" と指定しないと使えません しかし php-mbstring のソースを見てみると選べる正規表現ルールの中に "Oniguruma" は ありませんでした、つまり正規表現ルールを "Oniguruma" に変更出来れば (*FAIL) なども 使えるようになる可能性があります(そう簡単に上手くいくとも思えませんが)
961 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 14:05:25.05 ID:uHtllYPK0.net] その辺まで行くとissue読み漁らないとたどり着かない領域かもね
962 名前:947 mailto:sage [2024/10/23(水) 14:43:46.47 ID:ETlmKTT60.net] あと、話を簡素化するために嘘を書いてしまったので訂正します php-mbstring ライブラリが参照している oniguruma ライブラリを教えて頂いた ldd コマンドで調べたところ、以下のように別ファイルを参照していました php-mbstring が参照していたパス /usr/lib/x86_64-linux-gnu/libonig.so.5.4.0 私が入れた oniguruma ライブラリのパス /usr/local/lib/libonig.so.5.4.0 php-mbstring が参照していたライブラリのファイルサイズは私が入れたライブラリの 半分ほどだったので恐らく古いライブラリだったのだと思います そこで php-mbstring が参照しているライブラリを最新の Master branch のライブラリに 置き換えて (*FAIL) が使えるかを試してみましたが結果は変わらず、使えないままでした >>944 でご指摘して頂いたことは的を射ていたということになります お詫びして訂正致します、すみませんでした
963 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:17:15.79 ID:/9Lix2oc0.net] >>962 いや全く謝る必要はない その辺まで行ってる時点で大したもんだし、よく言われてる「報告」についても、君はよく出来てるよ > oniguruma は各正規表現パーツごとに有効、無効を切り替えられる仕様になって > いるのですが、oniguruma を呼び出す php-mbstring 側で (?W) や (*FAIL) が > 有効にされていない可能性が高いと考えています なるほど、これを知ってたから最初から無効化を疑ってたわけね 俺は知らなかったから、一般論で答えてしまったが 正規表現の場合は互換性が問題になるから一々細かくやらないと駄目なのかもね > 正規表現ルールを "Oniguruma" と指定しないと使えません これは微妙にちと違っていて、あの書き方だとただ単にフラグだから、C的にありがちなのは、以下α (最近使ってないなら文法間違ってるかもだが) 多少行儀のいい場合:α #define ONIG_SYN_OP2_OPTION_ONIGURUMA 0x04000000 // oniguruma内 onigSyntaxType.op2 |= ONIG_SYN_OP2_OPTION_ONIGURUMA; // php_mgstring内 あるいはドベタに:β onigSyntaxType.op2 |= 0x40000000; // php_mbstring内 "Oniguruma"指定の場合は、多分:γ OrigSyntaxType Oniguruma = {0xfff7d556, 0x47eb7bd2, 0x87a00bdb}; // oniguruma内 OrigSyntaxType origSyntaxType = Oniguruma; // php_mbstring内 要するにビットを立ててるだけなので、op2の[30]を立ててしまえば使えるようになる Oniguruma指定は一番手抜きが出来て楽だが、 php_mbstringの機能追加タイミングがOnigurumaのバージョンアップと同期してしまう だから互換性を重視しつつ、必要なタイミングで上位機能を取り込みたい場合は、普通はαにする そして結果的にOniguruma指定と同じになる事を(長期的に)目指す
964 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:18:06.80 ID:/9Lix2oc0.net] なので検索する場合は、Onigurumaが無ければ、 ONIG_SYN_OP2_OPTION_ONIGURUMA を探し、それもなければ 0x を探す(一応0Xでもいいらしいのでそれも) とまあ、ここまで書いてると、「そこまで言うならお前が見ろや!」なので見てみる 最新版とか知らんのでpnp.netのdownloadページの8.3.12をDLした(CurrentStable) ああ俺は、他人のコードを読み足りない、と認識してるから、こういう機会があれば読む事にしているだけだ 今風に言えば、べっ別に、あんたの為に読んだ訳じゃないんだからね!!!(だが男だ) さて上記検索試すが、空振る。そして後付ではあるが php-8.3.12>grep -n -r -i OnigSyntaxType * ext/mbstring/php_mbregex.c:62: OnigSyntaxType *regex_default_syntax; ext/mbstring/php_mbregex.c:455:static php_mb_regex_t *php_mbregex_compile_pattern(const char *pattern, size_t patlen, OnigOptionType options, OnigSyntaxType *syntax) ext/mbstring/php_mbregex.c:489:static size_t _php_mb_regex_get_option_string(char *str, size_t len, OnigOptionType option, OnigSyntaxType *syntax) ext/mbstring/php_mbregex.c:595: OnigSyntaxType **syntax) ext/mbstring/php_mbregex.c:997: OnigSyntaxType *syntax; ext/mbstring/php_mbregex.c:1268: OnigSyntaxType *syntax; ext/mbstring/php_mbregex.c:1332: OnigSyntaxType *syntax; ext/mbstring/php_mbregex.c:1463: OnigSyntaxType *syntax = NULL; ext/mbstring/php_mbregex.c:1591:static void _php_mb_regex_set_options(OnigOptionType options, OnigSyntaxType *syntax, OnigOptionType *prev_options, OnigSyntaxType **prev_syntax) ext/mbstring/php_mbregex.c:1608: OnigSyntaxType *syntax, *prev_syntax; 当たり前だが、変化する値側ではなく、固定的な型名で検索するべきだった
965 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:19:18.35 ID:/9Lix2oc0.net] そして順当なら php_mbregex.c:1591:static void _php_mb_regex_set_options なので見てみる prevをデフォに戻して新しい値をセットするだけのようだ そもそもprevが何故いるのか?はかなり疑問だが、まあいい とにかくビットを立ててしまいたいだけなら、ここを改造して、上記βしてしまえば、ここを通る限り常にビット30が立つようになる コンパイル通るかどうか知らんが、例えば具体的には、 MBREX(regex_default_options) = options; MBREX(regex_default_syntax) = syntax; (*syntax)->op2 |= 0x40000000; // これを最後に追加 MBREXはマクロ #define MBREX(g) (MBSTRG(mb_regex_globals)->g) MBSTRGもマクロ mbstring.h:118:#define MBSTRG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mbstring, v) ZEND_MODULE_GLOBALS_ACCESSORもマクロ Zend/zend_API.h:255:#define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) ZEND_TSRMG(module_name##_globals_id, zend_##module_name##_globals *, v) Zend/zend_API.h:270:#define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) (module_name##_globals.v) 2つ出るのは#ifdefと相場が決まっており、今回も#ifdef ZTS らしいが、ZTSってなんだっけ? まあとにかくこの辺はここまででいい、とにかく更新してるだけっぽいし
966 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:21:26.39 ID:/9Lix2oc0.net] その他、 ext/mbstring/php_mbregex.c:489:static size_t _php_mb_regex_get_option_string ext/mbstring/php_mbregex.c:594:static bool _php_mb_regex_init_options とか、いかにもなので君には分かるだろう 真面目に直すのならこの辺だね ちなみに regex_default_syntax を修正してもいけるはず。これは ext/mbstring/php_mbregex.c:84:pglobals->regex_default_syntax = ONIG_SYNTAX_RUBY; とモロクソに書いてある 君の読み通りなら、そこを pglobals->regex_default_syntax = ONIG_SYNTAX_ONIGURUMA; // RUBYからONIGURUMAに変更 ついでに ext/mbstring/php_mbregex.c:601:*syntax = ONIG_SYNTAX_ONIGURMUA; // RUBYからONIGURUMAに変更 なのだろうね grep -n -r ONIG_SYNTAX * でONIG_SYNTAX_RUBYが引っかからないから、おそらくONIG_SYNTAX_RUBYはoniguruma側で定義されてる だからoniguruma側で同様にgrepして ONIG_SYNTAX_ONIGURUMA が定義されてればいけるかも てかこれ見る限り、毎回initしてるのか?(まあdllならそうかもだが) そして _php_mb_regex_init_options内case '*' の部分をphp.iniかどこかで設定出来るようにしてるはずではあるが ただ普通に考えて、prev_syntaxって何ぞ?ではある regexで「今回の」文法を切り替えるのは分かるが、「前回の」は明らかに要らないので、 それがある=何か無理矢理切り替えて動かしてる感あり、なので、単純にビット立てるだけでは駄目かもよ ダラダラ書いたけどこんな感じ とはいえ、君はほぼ辿り着いてるよね php_mbstringのコンパイル環境の立ち上げがすんなり行くかはやってみないと分からないが
967 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:21:59.96 ID:/9Lix2oc0.net] あとついでに言うと、推定だが、順当には、 当初:php->onigurumaを直接呼び出し おそらくonigurumagaの更新でAPIが変わって、 現在:php->php_mbstring->oniguruma と呼び出し、 php->php_mbstring間のAPIは固定、 php_mbstring->onigurumaでonigurumaのAPI変更に対応、 つまりonigurumaが変更されてもphp_mbstringの変更のみで対応し、php 本体は一行も変更無しでいけるように分離した、 だと思うので、君の予想する「oniguruma用に何かしてるコード」はphp_mbstring側に全部突っ込まれてるはず まあこれも一般論だが
968 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:31:46.47 ID:/9Lix2oc0.net] >>963 分かる範囲だが一応訂正 × (最近使ってないなら文法間違ってるかもだが) ○ (最近使ってない か ら文法間違ってるかもだが)
969 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 22:52:29.22 ID:/9Lix2oc0.net] さらについで ONIG_SYNTAXは仕様としては任意のビットを立てたり落としたり出来るはずだが、 実際はこの手の奴は大体テストが甘くて、組み合わせによっては動作しなかったりする ではどうするか?と言えば、テスト済みであろう組み合わせに出来るだけ近い物を使う 今回ならRUBYかONIGURUMAに一番近いものだが、まあ、両方とも似たり寄ったりだな しかしよく見ると、RUBY 指定なら ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME は立ってるではないか php_mbstringのソースだけ見るとデフォはRUBY指定だから動くはず となると何らかの理由で _php_mb_regex_init_options で他指定に切り替えられてるのか? ならば手抜きで直すなら、 ext/mbstring/php_mbregex.c:607-656を全部コメントアウトして case 文を無視、 何をどう指定されても ONIG_SYNTAX_RUBY(あるいはONIG_SYNTAX_ONIGURUMA) になるようにしてしまうとか、かな
970 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:37:30.51 ID:/9Lix2oc0.net] >>960 てゆうかすいません、モロクソに書いてましたわ dllだけ差し替えて'r'指定で行けるはずですわ もうちょっと眺めて投稿すべきだった(これもかもだが) (すまぬが引っかかるのでバラバラに落とす)
971 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:40:00.93 ID:/9Lix2oc0.net] _php_mb_regex_init_options は各関数で毎回呼ばれてる (_php_mb_regex_ereg_replace_execからも)
972 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:41:25.78 ID:/9Lix2oc0.net] そしてこれをPHPから呼ぶのが mb_regex_set_options で、
973 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:42:52.32 ID:/9Lix2oc0.net] > Regex 構文モード(ひとつだけ設定可能です)
974 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:43:08.35 ID:/9Lix2oc0.net] > https://www.php.net/manual/ja/function.mb-regex-set-options.php とモロクソ書いてますな そして何故かそのphp.netページにはデフォが何か書いてないが、 'r'指定すればRUBY指定(=ONIG_SYN_OP2_ASTERISK_CALLOUT_NAMEがON)になる 'p'指定でもいけるかも? そしてこのフラグは mb_ereg_replace でも使えるらしい。つまり、 mb_ereg_replace( string $pattern, string $replacement, string $string, ?string $options = null <- ここに指定、例えば 'r' or 'p' ): string|false|null これで使えるなら、dllだけ差し替えればC側の修正は不要(そして多分これで上手く行く)
975 名前:デフォルトの名無しさん mailto:sage [2024/10/23(水) 23:43:51.89 ID:/9Lix2oc0.net] それでも駄目、或いはRUBY指定やPERL指定では使えない機能も使いたいなら、 _php_mb_regex_init_optionsに case 'o': *syntax = ONIG_SYNTAX_ONIGURUMA break; を追加して、'o'指定してやるとかすればいけるはず 敗因は、oniguruma側で細かくregexを切り替えられる事を知らない人にとっては > Regex 構文モード(ひとつだけ設定可能です) とか意味不明だからだな 最初にそこを言ってくれてれば、ピンと来た人がいたかも?
976 名前:デフォルトの名無しさん mailto:sage [2024/10/24(木) 01:07:24.54 ID:D6fJlQ4l0.net] >>974 訂正、perlなので' p と思ってしまってたが z だった orz × 'p'指定でもいけるかも? ○ 'z'指定でもいけるかも? × 例えば 'r' or 'p' ○ 例えば 'r' or 'z' あと var_dump(mb_regex_set_options(null)); でデフォを確認出来る 多分 "r" と出るはず あと >>969 > しかしよく見ると、RUBY 指定なら ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME は立ってるではないか > php_mbstringのソースだけ見るとデフォはRUBY指定だから動くはず の部分も一部訂正だが、これは俺だけが悪いのではなく、GitHubのSYNTAXページも間違ってるな 上側の説明部分では > 28. ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (enable (?{...})) > Set in: Oniguruma, Perl, Perl_NG > 29. ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME (enable (*name)) > Set in: Oniguruma, Perl, Perl_NG となってて、Onigurumaならフル機能のように書かれてるが、下の表だと 28,29はOnigurumaでは付いてない まあどっちが正しいのかは謎だが、意味不明な挙動するのはこの辺の問題もあるかもよ これでは結局の所、RUBYやONIGURMUA指定で欲しい機能(29と30か?)が動くかどうかがよく分からんし (まあ自前で立ててやればいいんですけどね)
977 名前:947 mailto:sage [2024/10/24(木) 12:35:15.79 ID:CfDH66X40.net] ありがとうございます、おかげ様でゴールが見えてきた感じです すごい解析力に脱帽でした、読みながら「すごいな〜」を連発してしまいました ちょっと昔に DAN KOGAI さんを見たときも衝撃を受けましたがそんな感じでした 本当は (*FAIL) が動くのを確認してからレスしたかったのですが 何かにハマっているらしくまだ成功していません しかしもう PHP の問題というより oniguruma の問題ですので ここから先は自力でなんとかなりそうです > 28. 29. これは表が間違ってます、以下は ONIG_SYNTAX_RUBY のオプション指定です https://github.com/kkos/oniguruma/blob/43a8c3f3daf263091f3a74019d4b32ebb6417093/src/regparse.c#L122-L162 #define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) https://github.com/kkos/oniguruma/blob/43a8c3f3daf263091f3a74019d4b32ebb6417093/src/oniguruma.h#L444 今は (*FAIL) が使えるようになるかの手っ取り早い確認のために oniguruma ライブラリ側をいじり、 上記の ruby のオプション指定に oniguruma のものをコピペして動くかどうかを試していますが 今のところ結果が変わりません (ライブラリの置き換えに失敗している?) ちょっと日数がかかるかも知れませんが成功したらご報告に伺います、ありがとうございました!
978 名前:デフォルトの名無しさん mailto:sage [2024/10/24(木) 22:06:48.35 ID:D6fJlQ4l0.net] >>977 > これは表が間違ってます 確認した。md打つときに列が一個ずれて、onigがyesになるべき所がRubyの列に入ってるんだな 誰か余裕があったら指摘してあげて > 上記の ruby のオプション指定に oniguruma のものをコピペして動くかどうかを試していますが いいね。この方が早そうだ > ちょっと日数がかかるかも知れませんが成功したらご報告に伺います、ありがとうございました! はいまあ頑張って ちなみに1つバグ、というか不一致を発見した php_mbregex.c内、_php_mb_regex_init_options関数で、単純にRubyの r 指定等すると上書きしている為、 『最初に』指定しないと正しく動作しない(それ以前に指定したフラグが全部キャンセルされる) しかしphp.netには『最後に』と明記してある > モードを設定する際には、モード文字は最後に指定しなければなりません。 > https://www.php.net/manual/ja/function.mb-regex-set-options.php これも誰か余裕有ったら指摘してあげて。勿論報告者の手柄にしていい 本来はPCRE側、つまりpreg_replaceと同様にすべき となると多分フラグの順は問わないので、 2パスにして1周目でRegex構文モードを、2周目で各フラグを設定するようにCを修正するのが正しい ドキュメント修正で済ませる場合は上記の通り、『最後に』と修正すれば終了 (Cの修正案が要るなら俺が書いてもいい、が、手続きとか知らんし面倒だから誰かやってくれ、勿論報告者が発見した事にしていい) だからまあ、挙動不審なのはもしかするとフラグの指定順がまずいのかも
979 名前:デフォルトの名無しさん mailto:sage [2024/10/24(木) 22:08:58.49 ID:D6fJlQ4l0.net] > すごい解析力に脱帽でした お世辞乙だがマジレスすると、実は普通に読めて、それがOSSの定義だったりするので、そんなにすごくもない phpも30年間OSSとしてずっとメンテされており、当たり前だが多くの人が読めるからメンテ出来てる だから逆に言えば、読めないコードはOSSとしては生き残れないし、30年は淘汰に十分な期間ではある よって、長寿OSS、つまりphpやGNUやLinuxは、OSSに参戦するレベルの連中ならある程度読めて当然で、 「僕が読めないから汚いコ ードだ」と寝言ほざいてる奴には「お前の頭がOSSの域に達してないだけだ馬鹿タレ」と返していい ただ読めると言っても実際に読んでいるわけではなくて、 この仕様ならこういう作りだろうなという予測通りになっているのをなぞっているだけ だから逆に、初心者や、まだ淘汰されてないOSSのコ ードとかは、普通に読めない (読む価値無いから無視でいいのだが) だから今回は > 以下のページは oniguruma の各パーツごとのオプション名を説明するページです これが大きかった そしてこれがpnp.net上のRegex構文モードと対になってるのが分かると、なるほどね、となった まあ結局、一通り出来るようになって、書くのには苦労しなくなると、あとは仕様の理解度で差が出る、ということ php_mbregexのコ ードは悪いコ ードではないね 愚直にやってるだけのドベタなコ ードで、すごくもないが、でもこういうコ ードがOSSとしては長生きするのだろうよ (変な改行はNGワード逃れ)
980 名前:947 mailto:sage [2024/10/25(金) 21:53:01.03 ID:hP0G6XWW0.net] > OSSに参戦するレベルの連中ならある程度読めて当然 これが出来るようになることがどれだけすごいことか.. ここでこうやって語って下さるだけでも私含め誰かのためになるめちゃめちゃ 貴重な存在ですよ、いつまでも元気で現役して下さい! > OSS 淘汰 後で手を入れる人のことまで考えてコーディングされていたんですね そこまで考えてませんでした、目からうろこです > 間違いの報告 私はC言語を知らないので間違いの確認作業が出来るか自信がありませんが確認出来たら 報告しに行きますね (ここの回答者様のほうが適任だと思いますのでどなたか余力のある方は是非..)
981 名前:デフォルトの名無しさん mailto:sage [2024/10/26(土) 20:57:24.64 ID:BX88EvoL0.net] >>980 > 私はC言語を知らないので それでソースファイル当たるとは勇者だな。ただ姿勢としては正しい ソースなんて読める読めないではなく、読む読まないだし、 そもそも読めない奴こそ勉強になるから読めであり、 読める奴(=そのコード構成が自分でも組める奴)が読んでも得る物はあまりない > 間違いの確認作業が出来るか自信がありませんが確認出来たら > 報告しに行きますね Cに関しては俺がフォロー出来るが、それ以前にバグって無さそう(すまんが俺の勘違いっぽい) よく見ればフラグは optm |= で溜めてて、文法の切り換えは *syntax = なので上書きしてない だから正確には、 × モード文字は最後に指定しなければなりません。 (現在の表記) ○ 最後に指定したモード文字が有効になります。 ではあるが、現在の表記でも問題はないはず なおonigurumaの表の間違いはGitHubのissuesに凸すれば多分本人(kkos)がすぐ直してくれる そちらはonigurumaをよく知ってるみたいなので、こちらはやってみてどうぞ
982 名前:947 mailto:sage [2024/10/27(日) 14:13:33.60 ID:heVNiBfi0.net] > そもそも読めない奴こそ勉強になるから読めであり そうですね、読んでて色々勉強になってます 書けと言われたらさっぱりですが読むほうでは少しだけ進歩したな、とは感じます > それ以前にバグって無さそう これは良かったです、正直私には荷が重かったのでw > モード文字は最後に指定しなければなりません これは mbstring の作者さんが意図するところがはっきり分からないので悩みます 「最後の文字だけ取り出せば指定されているモードが分かる」という仕様に することを視野に入れているのかも知れませんし.. 一応英語のページも見ましたが日本語と同じ意味で書いているようです https://www.php.net/manual/en/function.mb-regex-set-options.php > oniguruma の表 この SYNTAX.md は oniguruma 作者さんが作ったページではなく第三者が作ったものを マージしたものらしく、ページが作られてから1年弱で更新が止まってます https://github.com/kkos/oniguruma/commits/master/doc/SYNTAX.md 最後の更新から5年近く経っていて情報も古くなっています 私がやるならこのページを oniguruma 6.9.9 のものに更新します しかし今は php で (*SKIP) を動かすことを目指しているのでその後にやりますね oniguruma で指定されている option を読み込んであの表を出力するプログラムが あったら便利そうです、いつか作るかも知れません
983 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 10:05:20.25 ID:l7XbYqqi0.net] >>982 言い方が悪かったかもしれないが、php.netの表記は直す必要がない。(直すべきではない) プログラミング等においては、 ドキュメント記載の動作範囲⊆実際の動作範囲 である事は絶対に必要だが、書いてない範囲は動いても動かなくても問題ないから。 (今回は、最後に書けば確実に動くので問題ない。 記載を変更したら何か変更があったかと勘ぐられ、余計におかしくなる) だからphp側については今回は何もする必要がない。 > これは mbstring の作者さんが意図するところがはっきり分からないので悩みます これはちと違ってて、仕様は実装に依存すべきではないし、してはいけない。 というか、仕様を変更するとこれまで動いてたコートが動かなくなる(=互換性が無くなる)可能性が出てくるので、 原則として、仕様は追加は出来るが削除は出来ない。 逆に実装は変わるものだし、(互換性を保たれている限り)変わってもいいものだ。 だから仕様が実装に依存した場合、初期実装は楽だが、わりと早々に破綻する。 よって、本来は、最初の最初に仕様を未来永劫変更せずに済むレベルまで練るべきだし、 多少実装が困難な仕様でも、それが良い仕様なら、頑張って実装するしかない。 (主従関係でいえば、仕様が主で実装が従)
984 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 10:05:40.31 ID:l7XbYqqi0.net] ただ、 ○ ドキュメントを読めば使える ◎ ドキュメントを読まなくても使える なので、今回はグダグダ言わずにpcreと全て揃えるのが理想で、目指す所は 既存のコードを mb_* とするとマルチバイト対応になるだけで、全て動く、ではあるが、 現実的には無理だし、phpの場合は仕様自体がわりとグダグダなので、 多少でも綺麗にしていく為には新規部分は(従来の汚い仕様を無視して)綺麗に作るしかなく、 まあ許容範囲だと思うよ。 見た目、 A, 元々は記載通り「最後に書く必要があった」が、pcreと揃えるよう修正して「いつ書いても動く」ようになった B. 元々何も記載無かったが、複数書いた場合等の動作が曖昧になるので、 「確実に動く条件」を記載するように求められ、書いた ように見える。 なお仕様を自由に決めて良いなら、 そもそも「モード」を「フラグ」に突っ込むべきなのか?という話で、 (php.netでは纏めて「オプション」「パターン修飾子」と呼称されてるので曖昧になってる) 例えばJSなら String.replace(/regular expression/flags, replacement, mode); // modeでRubyやonigurumaモードを切り替える で終わってた気がするし、 これなら「ひとつしか指定出来ません」「最後に指定しなければなりません」はそもそも必要なくなる。 しかし使いもしない引数を無駄に増やすのもよろしくないし、フラグに突っ込んでしまえ、の判断もありだろう。 (pcreもそうなってるし)
985 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 10:05:57.25 ID:l7XbYqqi0.net] > しかし今は php で (*SKIP) を動かすことを目指しているのでその後にやりますね それで正しい。義務感でやるものではないし、面倒なら放置でいい。 (というかこの位緩くないと続かない。だいたい昨今のSNS疲れとかは義務感から来てるものだし) だからまあ、「この表は自分も今後とも使うので正確であって欲しい。 とりあえず自分用に更新版作ったから上げとく」位でいい。 そしてそれをpythonにやらせたのなら、それもついでに上げとく、程度で十分だ。
986 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 00:01:17.52 ID:R9Dn8Crp0.net] 堂島の龍・・・ って言ったんだ
987 名前:947 mailto:sage [2024/10/29(火) 11:56:37.23 ID:FIsrbLEd0.net] > php側については今回は何もする必要がない 了解です、これは分かってましたので大丈夫です > 原則として、仕様は追加は出来るが削除は出来ない 言われてみれば確かに.. 実装を仕様にしたせいで実際に破綻した経験もあったり(ぉぃ) > pcreと全て揃えるのが理想 確かにそうですね > A. B. なるほど、"仕様が主" ということを考えると納得の推察です > フラグに突っ込んでしまえ それでオプションとモードが混ぜてあったんですねw > 義務感でやるものではない そうですね、でも SYNTAX.md の更新は私がやりたいと思ってるのでやると思います ミスが出ないように少しづつ進めるつもりです、なので完成は来年になるかも知れません ただ、私にはオプションの説明文は書けないのでソースのコメントをコピペするだけの 手抜きになると思います ( "説明文 == 仕様" なので ) PHP で (*SKIP) を使えるようにする件もあと少しでなんとかなりそうです 使えるように出来たら修正箇所を書きにまた来ます、ありがとうございました!
988 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 14:57:45.06 ID:HnPnA3Oe0.net] すまんけど参考に問題と結論をまとめてほしい
989 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 20:54:54.00 ID:zqRlJI/00.net] 次スレ 【PHP】下らねぇ質問はここに書き込みやがれ 15 https://mevius.5ch.net/test/read.cgi/tech/1730202739/
990 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 22:11:10.45 ID:zqRlJI/00.net] >>988 問題: PHPで (*SKIP) が使えない (>>943 ) 結論: 現在は使えないのが仕様 php8.3.12(最新安定版)ではphp_mbstringが対応していない oniguruma6.6.9(最新リリースバージョン)にも入ってない(開発したばかりで未リリース状態) なので通常は>>952 ,955で公式リリースを待つが、 パフォーマンスの問題、或いは(現在開発中のphpアプリの)リリース時には使えるようになっているという読み等で、 GitHub上のonigurumaソースを自前でコンパイルして接続して使うのは自由 この場合の詳細は247が成功した後に報告してくれるから待てばいい 現在の作戦(981)の内容は以下(マクロは大文字で表記) onigurumaは設定を自由に変更出来る いくつかあるプリセットの内、ONIGURUMAを指定すれば(*SKIP)が使えるが、RUBYを指定しても使えない 現在のphpではデフォでRUBY指定であり、ONIGURUMA指定は出来ない --- (α) なので、oniguruma側のRUBY設定値をONIGURUMA設定値で上書きし、 php側でRUBY指定しててもONIGURUMA指定での機能が使えるようにする これだとonigurumaの再コンパイルだけで済むはず(=php_mbstringは変更無く使える) この場合の問題は、ruby指定とoniguruma指定で完全な互換性がなかった場合に、(なお実際どうなのかは知らん) 他ソフト(laravel)等と組み合せると一部誤動作する可能性が出てくる事だが、 この場合はRUBYではなくEMACS等、 どう考えても誰も使ってないであろうマクロを潰せばいいだけなので、大した問題ではない (とはいえ商用用途ではこれも許されないだろうが)
991 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 22:42:58.65 ID:zqRlJI/00.net] 真面目に直すなら、αを修正してphp側からONIGURUMA指定出来るようにすればいい これは970に書いたとおり、 php_mbregex.c:489:static size_t _php_mb_regex_get_option_string php_mbregex.c:594:static bool _php_mb_regex_init_options の2関数を修正すればよく、下側は979に書いたとおり以下3行追加、上側はその逆を追加するだけ(多分) case 'o': *syntax = ONIG_SYNTAX_ONIGURUMA break; この辺やる気有るのならCのソースは俺が書いてもいいが、報告その他は全部やってくれ 報告の仕方は https://www.php.net/get-involved の通り ただしバグ修正ではなく仕様追加なので、メンテナの判断により(ソースコードが妥当でも)却下される可 能性はある(改行は規制回避) >>990 すまぬ一部修正、規制に引っかかったついでに最後の段落書き足したら大文字にするのを忘れた × ruby指定とoniguruma指定で ○ RUBY指定とONIGURUMA指定で
992 名前:947 mailto:sage [2024/11/02(土) 11:20:08.91 ID:grhM95Vo0.net] どうやら正規表現の syntax を RUBY から ONIGURUMA に変えるだけではダメそうです この変更で (?W) が使えるようになったので syntax の切り替えは出来ているのですが、 正規表現に (*FAIL) や (*SKIP) を使うとエラーになります php_mbregex.c の 473行目のエラー処理が実行されます github.com/php/php-src/blob/2b10cd1bebde7b9844ebb6e3e60127dfe7b195c5/ext/mbstring/php_mbregex.c#L473 これを解決するには php_mbregex.c と onigurumaライブラリ を深く理解する必要があり、 このスレのみなさんにとっても簡単な問題ではないと思います そのため、ここは一度戦略的に撤退し、次の好機をうかがうことにしました 長々とお付き合い下さりありがとうございました!
993 名前:947 mailto:sage [2024/11/02(土) 12:21:06.68 ID:grhM95Vo0.net] 詳細は以下のスレに書いておきました agree.5ch.net/test/read.cgi/mango/1715675838/323-325n C言語をいじるならデバックの仕方を知らないと話にならないようなので そういうことを覚えるのにかなりの時間がかかりそうです、なのでこの件は一旦保留にさせて下さい ( fprintf を仕込んで ./configure, make, make install ではラチがあかなくなったので)
994 名前:947 mailto:sage [2024/11/03(日) 21:59:48.17 ID:kb0e81X60.net] 補足: onig_init() は oniguruma の古いバージョンが使われたときに備えてのものでした なので問題ありませんでした 現時点では正規表現に (*FAIL) や (*SKIP) を使うとエラーになる問題は 「PHPのインストール時に (*FAIL) が実装される前の oniguruma が入れられていて それが使われているのではないか」という仮説を立てています (*FAIL) が実装される前の oniguruma が使われていたなら「 "FAIL" なんて名前知らない!」と 言われてもおかしくないので..
995 名前:947 mailto:sage [2024/11/04(月) 01:55:48.60 ID:nQYymDx80.net] ↑の仮説は否定されました oniguruma は最新Master branch版で間違いありませんでした oniguruma 6.9.9 で Fix されたバグが直っているのを確認しました また、古いバージョンの oniguruma が入っていないことを確認しました libonig-dev なども含めて他の oniguruma は1つも入っていませんでした
996 名前:947 mailto:sage [2024/11/05(火) 00:51:48.35 ID:QtAnl6270.net] oniguruma 付属のテストファイル /sample/callout.c では (*FAIL) や (*SKIP) が動くので、このテストファイルのコ-ドを php_mbregex.c に移植して動かしてみました (コンパイルエラーを回避するための最低限の変更のみしました) そしてPHPを動かしてみたところ、問題のエラーと同じエラーが出ました oniguruma 側でのエラーコード: -229 github.com/kkos/oniguruma/blob/f6723fd940b993b39b1535f71c8695867a5e92d1/src/oniguruma.h#L640 これにより、問題の原因がPHP側にあることが確定しました しかし php_mbregex.c を読んでもこの問題を起こしそうな箇所は見当たりません 原因はコ-ドではなくPHPの環境にあるのかも知れま1000
997 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 776日 8時間 5分 26秒