[過去ログ] 【PHP】下らねぇ質問はここに書き込みやがれ 14 (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(2): (ワッチョイ 0f97-W3aP) 2022/09/20(火)16:46 ID:Sb2Kpzh+0(1) AAS
!extend::vvvvv:1000:512
!extend::vvvvv:1000:512
★スレ立て時 ↑ が3行以上になるようコピペ
PHPに関する質問スレです
前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 13
2chスレ:tech
省2
922(2): (ワッチョイ eb7b-1jHB) 2024/10/16(水)22:44 ID:XSPkOsBG0(1) AAS
>>921
php.netを頭から全部読めばそれで十分
多分SQLも必須、というかPHPは自身の変数等を保持する機構が言語にないのでどうせDBを使うことになる
923(2): (ワッチョイ ef5f-nmm0) 2024/10/17(木)00:25 ID:exPg1AY+0(1) AAS
>>922
本物のワルなのでセッション使っちゃうぜ
924(2): (スップ Sdbf-qfF2) 2024/10/17(木)00:33 ID:13fsix/Td(1) AAS
>>922
先生!ぼくおじさんなので本にカキカキメモしながらじゃないと勉強できません
後出しですがSQLも基本的なところはできます
独習PHP 第4版が古すぎるとかいうのでなければよいのですが
925(2): (ワッチョイ eb7b-1jHB) 2024/10/17(木)08:25 ID:aXgLojE+0(1/2) AAS
>>923
ユーザーまたげねえだろ
というか普通のサーバーのように、全体の変数を保持する事が出来ない
だから毎回初期値やデータを一からロードし直す必要があってウザかったが、
JSもクローム拡張V3では同様になってるから、サーバーとしては適切な構造なのだろうよ
PHPの場合、これにより毎回最初から行うのを強制され、結果的に毎回同じ動作となり、デバッグしやすくなってるのも事実
糞言語だが、何だかんだで結果的によく出来てるから使い続けられてる
省4
926(2): (ワッチョイ efe7-nmm0) 2024/10/17(木)08:51 ID:Q0zeibWJ0(1) AAS
>>925
セッションIDを知っていればユーザーを跨げるので、本物のワルはこれを悪用しちゃうぜ
927: (ワッチョイ eb7b-1jHB) 2024/10/17(木)09:15 ID:aXgLojE+0(2/2) AAS
>>926
いやそれはアウトだろ
ただ、「絶対に誰にも使われないセッションID」を作れれば便利な倉庫に出来るのかな?
まあ俺はそこまでPHP知らんので止めとくが
しかしPHPは色々糞ったれなことが多い
今目に付いてるのはアップロードされたファイルが $_FILES["pictures"]["tmp_name"][$index] に入る点
逆じゃボケ!!!$_FILES["pictures"][$index]["tmp_name"] に入れろや!!!ってね
省2
928(1): (ワッチョイ db85-xAPd) 2024/10/17(木)23:09 ID:goFejqio0(1/2) AAS
>921
私見で恐縮だけど、それだけ他言語を学習済みなら(経験年数にもよるけど)基礎的な事は理解してるはずだから書籍はあんまり意味を為さないと思うなー
?他の人も言ってるようにリファレンス読み込むのがいいと思う。どのページに何が書いてあるか理解把握するのが大事かな、と。あくまで重要なのはリファレンスの内容を覚えるんじゃなくて、必要な時に直ぐに取り出せるように「何処に何が書いてあるか」を理解把握すると良いと思うよ。例えばphp7系とphp8系で大幅に仕様変更があったんだけどその差異を見るにはどのページ見れば良いかとか、もっとシンプルに言うと関数のリファレンスは何処に纏まってるか、とか。
?の手順が終わったら、プログラム経験者でphp手っ取り早く学びたいならLaravelの環境を構築するかまたはWordPress作って弄り倒すのが良いと思う。
前者の理由は、ここ数年のphp開発現場はLaravelを基本としてるから。
後者の理由は、WordPressはphpで構成されているのでソースレベルで弄り倒せるようになれればclassや一通りの組み込み関数も理解出来ていると判断できるから(俺社比)
若干話変わって個人的に興味があるのは、何故phpを学習したいと思ったのかを知りたいな
省2
929: (ワッチョイ db85-xAPd) 2024/10/17(木)23:37 ID:goFejqio0(2/2) AAS
横レスおじさんだけどごめんね❤
>923 については、確かにセッション使えば自身の変数は保持できる
>925 に対しては、おっしゃる通りユーザ跨げない。後述(※参照)するけど、ユーザー跨ごうとすると変則的な運用のみ使えると思う(という知見しか自分には無い)から結論非常にオススメしない。
>926 マジでオススメしない。理由はセッションIDを対象ユーザー以外で使うのは大事故に繋がるから。
(※)一応例外も挙げておくけど、【そのサービスを1人しか利用しない】という前提ならもしかしたらありかな?とは思う。逆を言えばそれくらいのレベル感じゃ無いとセッションIDの使い回しは超御法度。
つまり非常に限定的で、ローカル環境で構築したサービスや外部非公開の環境というのが前提で、もし外部に公開するサービスならセッションIDは絶対に使い回しちゃダメよ、って事。
930(1): (ワッチョイ eb7b-1jHB) 2024/10/18(金)07:32 ID:IRpwug8I0(1/15) AAS
>>928
> レガシーな環境を除けばphpを選択する意味が無くなってきてる
商用ならその通り
ただしレンタルサーバーのような小口だと、プロセス2秒でぶった切る運用が出来るPHPの方が相性がいい
だからブログにはPHP+WPの方が相性がよく、
今のところ他言語では…そういえばHugoとかあったがあれどうなったんだろ?
ちなみにphp.net、読み物としては非常に優秀だが、リファレンスとして逆引きするにはイマイチだと分かった
省4
931(1): (ワッチョイ ef29-xAPd) 2024/10/18(金)08:54 ID:WQ7AgxmX0(1) AAS
>930
うんうん、小口の場合は確かにphpですね。個人からの依頼や企業でも小規模なWEBページの依頼はphpが未だに多い印象。
php.netはそうなのよ、読み物としては立派なんだよね。phpの設定関連は読み込むと理解把握しやすい。一方で「この機能を実現する組み込み関数ってあるかな」と逆引きしたい時や、「ソース書いてて躓いた時、詰まった時」はあんまり役に立たない印象。
そこで次はどうするかというとネット記事(個人ブログ含)に行き着くんだけど、php関連のネット記事って有象無象入り混じってて特殊なアプローチ(裏技的な内容)やセキュリティガバガバのソース提示されてるから初学者はネット記事参考にしない方が良い、というね。
やっぱり実際の業務で学ぶか、WordPress作って理解するか、GitHubで学ぶとかがいいかなーと思う
932: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:05 ID:IRpwug8I0(2/15) AAS
>>931
内容については全文同意でいいが、>>924に戻ると、
php.netは読み物としてはMDN/MSDN/Oracleと比べて段違いにいいので、
紙好きであっても初手として通読する事を進める(他言語のリファレンスを想定しているのなら特に)
どうしてもというなら全文印刷して読め、それくらい良質だ
一方で
> php関連のネット記事って有象無象入り混じってて特殊なアプローチ(裏技的な内容)やセキュリティガバガバのソース提示されてるから初学者はネット記事参考にしない方が良い
省6
933: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:06 ID:IRpwug8I0(3/15) AAS
ではどうすればいいかといえば、俺は「レビュー済み」のコードを参考にする事を勧める
934: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:07 ID:IRpwug8I0(4/15) AAS
俺は上記の通り、JSではMDNのコードしか信用しない事にしてるが、それは「MDNは多数に見られてる」からだ(=酷いコードは修正済み)
StackOverflowが良質なのも、各回答がレビューされて上位順に並ぶからだ
935: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:07 ID:IRpwug8I0(5/15) AAS
この点、php.netは同様に、各ページの下にコードがずらずらと『上位順』に並び、
結果的に各ページにStackOverflow並の上質なコードが付随する事になってる
936: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:08 ID:IRpwug8I0(6/15) AAS
初学者であれを全部読むのは辛いだろうが、あのコードも読む価値があるので余裕があれば読むべき
937: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:09 ID:IRpwug8I0(7/15) AAS
大体において各ページの機能のハマりポイントをコードで解説してある
938: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:09 ID:IRpwug8I0(8/15) AAS
面倒なら、ハマったときにはググると同時にphp.netのその機能のコードも読む事だ
939: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:10 ID:IRpwug8I0(9/15) AAS
ちなみに引っかかったらだいたいググるとQiitaで何とかなる事が多いはず
Qiitaも勿論いいサイトではあるが、結局「上位順」ではないので、StackOverflowに成れなかった、というより成り損ねた感がある
これは10年ほど昔にJS界隈でKenOkabe、通称「毛の壁」が、
細かい間違いを修正するよう突っ込みまくってウザがられて荒らし扱いされ、結局コメント機能が削除された、という経緯があるらしいが
結果的に「よりよいコード、より正しい情報を発信する」(StackOverflow的価値観)より、
「僕が気持ちよく情報発信する」(ゆとり世代的価値観)を優先したので、そうなってる
まあ創始者がゆとり世代だし、この判断が間違ってるかどうかも微妙で、例えば商業的意味なら「成功」となるのだが、
省2
940: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:11 ID:IRpwug8I0(10/15) AAS
これはQiitaのユーザーの問題というよりは、やはりレビューされてない事によるものだと思ってる
同様にGitHubでも個人レベルで公開してるのは、公開の場所が違うだけで、同様に糞コードの地雷原でしかない
941: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:11 ID:IRpwug8I0(11/15) AAS
ただ世界的に超有名なOSS(勿論GitHub上)でも超絶糞コードな事に遭遇した事があるので、(なおC言語)
OSSで多数に見られてればコードの質が上がる、ということでもないらしい
942: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:11 ID:IRpwug8I0(12/15) AAS
結局はレビュワーによるのだが、OSSでレビューで落としたら関係がそれなりに悪くなるらしいので、
長期戦略を考えたら糞コードもなかなかに落としづらいというのはあるのかもしれない
943: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:12 ID:IRpwug8I0(13/15) AAS
この点、PHP自体もOSSの産物だから、はっきり言って機能がデタラメで統一感もなく、
大手がガッツリ整備してる他言語(C#/Java等)と比べたら色々チグハグだが、
これもそういうものだと認識して諦めるしかない
文句があるならお前が直せ、のOSS文化そのままだ
とはいえPHP8には表面的には機能が揃ってる感はあるが
944: (ワッチョイ eb7b-1jHB) 2024/10/18(金)14:14 ID:IRpwug8I0(14/15) AAS
…多分「コード」がNGワードっぽい
945: (ワッチョイ 6b4a-yGIB) 2024/10/18(金)18:47 ID:9d2rbs7t0(1) AAS
ここは毛の壁の落書き帳です
946: (ワッチョイ eb7b-1jHB) 2024/10/18(金)20:59 ID:IRpwug8I0(15/15) AAS
実際の所俺は、毛の壁が超えた、ゆとり世代的レッドラインがどの程度なのかは知りたいんだけどね
Qiita上では綺麗さっぱり消されてるので確認出来ないし
まあ言いたい事は、
つべこべ言わずpnp.netを読め、そして各ページのコードも読め、だ
他言語の常識でpnp.netを忌避するのは、勿体なさ過ぎる
947(2): (ワッチョイ d274-nV0L) 2024/10/21(月)10:50 ID:hAiZn1ip0(1/6) AAS
環境: PHP 8.3.6, ubuntu24.04 LTS, oniguruma 6.9.9
mb_ereg_replace() に使う正規表現の中で (*FAIL) が使えません
PHP側で (*hoge) の形の正規表現パーツを無効化しているようですが
もし使えるようにする方法があれば教えて下さい
最近 oniguruma に (*SKIP) が実装されたので正規表現の高速化のために使いたいです
mb_ereg_replace()
外部リンク[php]:www.php.net
948(2): (ワッチョイ 197b-QJZg) 2024/10/21(月)11:21 ID:9J9C943n0(1/5) AAS
知らんが常識的にはdllを差し替えるだけでは?
949(1): 947 (ワッチョイ d274-nV0L) 2024/10/21(月)12:10 ID:hAiZn1ip0(2/6) AAS
>>948
ありがとうございます、PHPで使われている正規表現ライブラリは最新のものでした
$ php -i | grep "onig"
Multibyte regex (oniguruma) version => 6.9.9
PHP側が古い可能性もあるので一応 PHP 8.4.0 RC2 を試してみます
950(1): (ワッチョイ 197b-QJZg) 2024/10/21(月)12:46 ID:9J9C943n0(2/5) AAS
>>949
6.9.9が最新ならお前は多分勘違いをしてるぞ
> Master branch
> Update Unicode version 16.0
> Add new operator (*SKIP)
>
> Version 6.9.9
省5
951(1): 947 (ワッチョイ d274-nV0L) 2024/10/21(月)13:48 ID:hAiZn1ip0(3/6) AAS
>>950
onigurumaの差し替えはやる予定でした、そこに気付かれるとは..すごい
しかし (*FAIL) すら使えないのでonigurumaの差し替えをしても意味が無いんです
恐らくPHP側で無効にしていると思われるのですが有効にする方法をどなたか..
952(2): (ワッチョイ 197b-QJZg) 2024/10/21(月)14:34 ID:9J9C943n0(3/5) AAS
>>951
> やる予定
それは実際に試して言ってる?
一般的にdllは呼ぶだけで、その前の段階で前処理なんてしない
というかそれやったら、PHP側のコードをonigurumaのバージョン毎に変えないといけなくなるだろ
無駄に依存性が増えるだけになってしまう
他ライブラリなんていつどう更新されるかも分からないのに
省7
953: (ワッチョイ 197b-QJZg) 2024/10/21(月)15:05 ID:9J9C943n0(4/5) AAS
>>952 訂正
× pecl
○ pcre
分かる範囲だがphpにはpeclもあるようなので…
954(1): 947 (ワッチョイ d274-nV0L) 2024/10/21(月)15:21 ID:hAiZn1ip0(4/6) AAS
>>952
>それは実際に試して言ってる?
実は最初から最新の Master branch (3237 commits) しか入れていません
つまり oniguruma 6.9.9 のリリース版を使っていません
このことを忘れてました、リリース版でも確認してみます、すみません..
そういうものですか、なるほど
php.ini と oniguruma 側の確認もしてみます
省1
955(1): (ワッチョイ 197b-QJZg) 2024/10/21(月)15:30 ID:9J9C943n0(5/5) AAS
>>954
> リリース版でも確認してみます
いいね、これで確認出来る。差が出ればdllは当たってる
あとは、サーバー側の設定は別のはずなので、コマンドでは動くがサーバー上では動かない場合はこれ
956(2): (ワッチョイ f2fc-opEg) 2024/10/21(月)20:10 ID:QKrgL0if0(1) AAS
>947
preg_replaceで代替どうぞ
$pattern = '/foo(*SKIP)(*FAIL)|bar/u';
$replacement = 'baz';
$subject = 'foobár';
$result = preg_replace($pattern, $replacement, $subject);
echo $result; // foobaz
957(1): 947 (ワッチョイ d274-nV0L) 2024/10/21(月)20:30 ID:hAiZn1ip0(5/6) AAS
>>955
リリース版でも試しましたが結果は変わりませんでした、 (*FAIL) は使えませんでした
リリース版でも Master branch の最新版でも oniguruma 単体では (*FAIL) を使えます
php.ini にも (*FAIL) などを無効化するような設定は見当たりませんでした
PHPをコンパイルする前のソースも見てみたのですが該当しそうな場所を見つけられていません
しかしまだまだ調査不足なのでもっと調べてみます
もしかしたら思いもよらない場所にある古い oniguruma ライブラリを参照している可能性もあります
省1
958(1): 947 (ワッチョイ d274-nV0L) 2024/10/21(月)21:31 ID:hAiZn1ip0(6/6) AAS
>>956
すいません!レスに気付いてませんでした!
頂いたコードで (*SKIP)(*FAIL) が正しく動作しているのを確認出来ました
しかし私は mb_ereg のほうを使わなければなりません、正規表現で UTF-8 以外の
エンコードを使うためです、せっかく作って頂いたのに申し訳ない..
> á
おお、 /u はこんな挙動するんですね、勉強になります
959(1): (ワッチョイ 0601-opEg) 2024/10/22(火)07:31 ID:frvkcjlG0(1) AAS
>958
なるほどね理解しました。根本的な解決に向けての助力は他の方が回答してくれてるので、俺は一時的な回避策(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';
省5
960: (ワッチョイ 197b-QJZg) 2024/10/22(火)08:51 ID:OD5ng7w50(1/2) AAS
>>957
それだと、用意したdllは使われておらず、どこかにある古いonigurumaを掴んでいるように見えるな
なら、今掴まれているdllを特定して、そのファイルと差し替えるのが一番早いかと
windowsなら実行中の各プロセスがどのdllファイルを掴んでいるかはprocessExplororで簡単に分かるが、
Unixだと聞いたことない(…が、あるんだろうけど)
ググるとlddで静的解析は出来るらしい(使ったこと無いが)
ただこれは自分でコマンドとして起動する場合用だから、
省9
961(2): 947 (ワッチョイ d274-nV0L) 2024/10/22(火)21:24 ID:u1LoTuab0(1) AAS
書き込み規制が出たので簡素化して書きます
mb_ereg_replace() で (*FAIL) が動かない原因は oniguruma のライブラリの
バージョンが古いという問題ではありませんでした
oniguruma 6.6.0 で追加された (?W) が使えない一方で 6.9.5 で追加された
\x{HHHH HHHH} が使えるなどバージョンの違いでは説明出来ない動作がたくさん確認出来ました
この問題は恐らく解決が困難だと思うので諦めます
お二方、お付き合い頂きありがとうございました、勉強になりました、感謝です
962: (ワッチョイ 197b-QJZg) 2024/10/22(火)22:48 ID:OD5ng7w50(2/2) AAS
>>961
お疲れ
すんなり行かない場合はかなりハマる案件なので、判断は妥当だと思う
なおオープンソースの新機能周りってわりと普通にバグってるので、意味不明な場合はこれかも
963: (ワッチョイ 197b-QJZg) 2024/10/23(水)06:42 ID:/9Lix2oc0(1/14) AAS
>>961
そういえば書き込み規制の件、
もしまだ原稿が手元に残ってるなら、
多少読みにくくてもいいから、バラバラにするなり、他板のテストスレに落とすなりしてもらえないだろうか
情報が有るのと無いのでは全然違うので、俺は読むから
コピペ規制なら、例えばmango板は規制チェックの為の板なので、落とせるし
agree.5ch.net/test/read.cgi/mango/1715675838/
964(1): 947 (ワッチョイ d274-nV0L) 2024/10/23(水)14:05 ID:ETlmKTT60(1/2) AAS
現時点では php-mbstring の問題だと思っています
これはPHPに後から追加するPHPの拡張モジュールです、このモジュールが oniguruma の
ライブラリのファイルを参照します
oniguruma は各正規表現パーツごとに有効、無効を切り替えられる仕様になって
いるのですが、oniguruma を呼び出す php-mbstring 側で (?W) や (*FAIL) が
有効にされていない可能性が高いと考えています
以下のページは oniguruma の各パーツごとのオプション名を説明するページです
省9
965: (ワッチョイ f281-XFgw) 2024/10/23(水)14:05 ID:uHtllYPK0(1) AAS
その辺まで行くとissue読み漁らないとたどり着かない領域かもね
966(1): 947 (ワッチョイ d274-nV0L) 2024/10/23(水)14:43 ID:ETlmKTT60(2/2) AAS
あと、話を簡素化するために嘘を書いてしまったので訂正します
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
省6
967(1): (ワッチョイ 197b-QJZg) 2024/10/23(水)22:17 ID:/9Lix2oc0(2/14) AAS
>>966
いや全く謝る必要はない
その辺まで行ってる時点で大したもんだし、よく言われてる「報告」についても、君はよく出来てるよ
> oniguruma は各正規表現パーツごとに有効、無効を切り替えられる仕様になって
> いるのですが、oniguruma を呼び出す php-mbstring 側で (?W) や (*FAIL) が
> 有効にされていない可能性が高いと考えています
なるほど、これを知ってたから最初から無効化を疑ってたわけね
省18
968: (ワッチョイ 197b-QJZg) 2024/10/23(水)22:18 ID:/9Lix2oc0(3/14) AAS
なので検索する場合は、Onigurumaが無ければ、
ONIG_SYN_OP2_OPTION_ONIGURUMA を探し、それもなければ
0x を探す(一応0Xでもいいらしいのでそれも)
とまあ、ここまで書いてると、「そこまで言うならお前が見ろや!」なので見てみる
最新版とか知らんのでpnp.netのdownloadページの8.3.12をDLした(CurrentStable)
ああ俺は、他人のコードを読み足りない、と認識してるから、こういう機会があれば読む事にしているだけだ
今風に言えば、べっ別に、あんたの為に読んだ訳じゃないんだからね!!!(だが男だ)
省16
969: (ワッチョイ 197b-QJZg) 2024/10/23(水)22:19 ID:/9Lix2oc0(4/14) AAS
そして順当なら php_mbregex.c:1591:static void _php_mb_regex_set_options なので見てみる
prevをデフォに戻して新しい値をセットするだけのようだ
そもそもprevが何故いるのか?はかなり疑問だが、まあいい
とにかくビットを立ててしまいたいだけなら、ここを改造して、上記βしてしまえば、ここを通る限り常にビット30が立つようになる
コンパイル通るかどうか知らんが、例えば具体的には、
MBREX(regex_default_options) = options;
MBREX(regex_default_syntax) = syntax;
省11
970: (ワッチョイ 197b-QJZg) 2024/10/23(水)22:21 ID:/9Lix2oc0(5/14) AAS
その他、
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;
省17
971: (ワッチョイ 197b-QJZg) 2024/10/23(水)22:21 ID:/9Lix2oc0(6/14) AAS
あとついでに言うと、推定だが、順当には、
当初:php->onigurumaを直接呼び出し
おそらくonigurumagaの更新でAPIが変わって、
現在:php->php_mbstring->oniguruma と呼び出し、
php->php_mbstring間のAPIは固定、
php_mbstring->onigurumaでonigurumaのAPI変更に対応、
つまりonigurumaが変更されてもphp_mbstringの変更のみで対応し、php 本体は一行も変更無しでいけるように分離した、
省2
972: (ワッチョイ 197b-QJZg) 2024/10/23(水)22:31 ID:/9Lix2oc0(7/14) AAS
>>967
分かる範囲だが一応訂正
× (最近使ってないなら文法間違ってるかもだが)
○ (最近使ってない か ら文法間違ってるかもだが)
973(1): (ワッチョイ 197b-QJZg) 2024/10/23(水)22:52 ID:/9Lix2oc0(8/14) AAS
さらについで
ONIG_SYNTAXは仕様としては任意のビットを立てたり落としたり出来るはずだが、
実際はこの手の奴は大体テストが甘くて、組み合わせによっては動作しなかったりする
ではどうするか?と言えば、テスト済みであろう組み合わせに出来るだけ近い物を使う
今回ならRUBYかONIGURUMAに一番近いものだが、まあ、両方とも似たり寄ったりだな
しかしよく見ると、RUBY 指定なら ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME は立ってるではないか
php_mbstringのソースだけ見るとデフォはRUBY指定だから動くはず
省4
974: (ワッチョイ 197b-QJZg) 2024/10/23(水)23:37 ID:/9Lix2oc0(9/14) AAS
>>964
てゆうかすいません、モロクソに書いてましたわ
dllだけ差し替えて'r'指定で行けるはずですわ
もうちょっと眺めて投稿すべきだった(これもかもだが)
(すまぬが引っかかるのでバラバラに落とす)
975: (ワッチョイ 197b-QJZg) 2024/10/23(水)23:40 ID:/9Lix2oc0(10/14) AAS
_php_mb_regex_init_options は各関数で毎回呼ばれてる
(_php_mb_regex_ereg_replace_execからも)
976: (ワッチョイ 197b-QJZg) 2024/10/23(水)23:41 ID:/9Lix2oc0(11/14) AAS
そしてこれをPHPから呼ぶのが mb_regex_set_options で、
977: (ワッチョイ 197b-QJZg) 2024/10/23(水)23:42 ID:/9Lix2oc0(12/14) AAS
> Regex 構文モード(ひとつだけ設定可能です)
978(1): (ワッチョイ 197b-QJZg) 2024/10/23(水)23:43 ID:/9Lix2oc0(13/14) AAS
> 外部リンク[php]:www.php.net
とモロクソ書いてますな
そして何故かそのphp.netページにはデフォが何か書いてないが、
'r'指定すればRUBY指定(=ONIG_SYN_OP2_ASTERISK_CALLOUT_NAMEがON)になる
'p'指定でもいけるかも?
そしてこのフラグは mb_ereg_replace でも使えるらしい。つまり、
mb_ereg_replace(
省6
979: (ワッチョイ 197b-QJZg) 2024/10/23(水)23:43 ID:/9Lix2oc0(14/14) AAS
それでも駄目、或いはRUBY指定やPERL指定では使えない機能も使いたいなら、
_php_mb_regex_init_optionsに
case 'o':
*syntax = ONIG_SYNTAX_ONIGURUMA
break;
を追加して、'o'指定してやるとかすればいけるはず
敗因は、oniguruma側で細かくregexを切り替えられる事を知らない人にとっては
省3
980(1): (ワッチョイ 197b-QJZg) 2024/10/24(木)01:07 ID:D6fJlQ4l0(1/3) AAS
>>978
訂正、perlなので' p と思ってしまってたが z だった orz
× 'p'指定でもいけるかも?
○ 'z'指定でもいけるかも?
× 例えば 'r' or 'p'
○ 例えば 'r' or 'z'
あと var_dump(mb_regex_set_options(null)); でデフォを確認出来る
省15
981(1): 947 (ワッチョイ d274-nV0L) 2024/10/24(木)12:35 ID:CfDH66X40(1) AAS
ありがとうございます、おかげ様でゴールが見えてきた感じです
すごい解析力に脱帽でした、読みながら「すごいな〜」を連発してしまいました
ちょっと昔に DAN KOGAI さんを見たときも衝撃を受けましたがそんな感じでした
本当は (*FAIL) が動くのを確認してからレスしたかったのですが
何かにハマっているらしくまだ成功していません
しかしもう PHP の問題というより oniguruma の問題ですので
ここから先は自力でなんとかなりそうです
省9
982: (ワッチョイ 197b-QJZg) 2024/10/24(木)22:06 ID:D6fJlQ4l0(2/3) AAS
>>981
> これは表が間違ってます
確認した。md打つときに列が一個ずれて、onigがyesになるべき所がRubyの列に入ってるんだな
誰か余裕があったら指摘してあげて
> 上記の ruby のオプション指定に oniguruma のものをコピペして動くかどうかを試していますが
いいね。この方が早そうだ
> ちょっと日数がかかるかも知れませんが成功したらご報告に伺います、ありがとうございました!
省14
983: (ワッチョイ 197b-QJZg) 2024/10/24(木)22:08 ID:D6fJlQ4l0(3/3) AAS
> すごい解析力に脱帽でした
お世辞乙だがマジレスすると、実は普通に読めて、それがOSSの定義だったりするので、そんなにすごくもない
phpも30年間OSSとしてずっとメンテされており、当たり前だが多くの人が読めるからメンテ出来てる
だから逆に言えば、読めないコードはOSSとしては生き残れないし、30年は淘汰に十分な期間ではある
よって、長寿OSS、つまりphpやGNUやLinuxは、OSSに参戦するレベルの連中ならある程度読めて当然で、
「僕が読めないから汚いコ
ードだ」と寝言ほざいてる奴には「お前の頭がOSSの域に達してないだけだ馬鹿タレ」と返していい
省17
984(1): 947 (ワッチョイ d274-nV0L) 2024/10/25(金)21:53 ID:hP0G6XWW0(1) AAS
> OSSに参戦するレベルの連中ならある程度読めて当然
これが出来るようになることがどれだけすごいことか..
ここでこうやって語って下さるだけでも私含め誰かのためになるめちゃめちゃ
貴重な存在ですよ、いつまでも元気で現役して下さい!
> OSS 淘汰
後で手を入れる人のことまで考えてコーディングされていたんですね
そこまで考えてませんでした、目からうろこです
省3
985: (ワッチョイ 197b-QJZg) 2024/10/26(土)20:57 ID:BX88EvoL0(1) AAS
>>984
> 私はC言語を知らないので
それでソースファイル当たるとは勇者だな。ただ姿勢としては正しい
ソースなんて読める読めないではなく、読む読まないだし、
そもそも読めない奴こそ勉強になるから読めであり、
読める奴(=そのコード構成が自分でも組める奴)が読んでも得る物はあまりない
> 間違いの確認作業が出来るか自信がありませんが確認出来たら
省9
986(1): 947 (ワッチョイ 3374-ohr8) 2024/10/27(日)14:13 ID:heVNiBfi0(1) AAS
> そもそも読めない奴こそ勉強になるから読めであり
そうですね、読んでて色々勉強になってます
書けと言われたらさっぱりですが読むほうでは少しだけ進歩したな、とは感じます
> それ以前にバグって無さそう
これは良かったです、正直私には荷が重かったのでw
> モード文字は最後に指定しなければなりません
これは mbstring の作者さんが意図するところがはっきり分からないので悩みます
省13
987: (ワッチョイ 497b-vCJ4) 2024/10/28(月)10:05 ID:l7XbYqqi0(1/3) AAS
>>986
言い方が悪かったかもしれないが、php.netの表記は直す必要がない。(直すべきではない)
プログラミング等においては、
ドキュメント記載の動作範囲⊆実際の動作範囲
である事は絶対に必要だが、書いてない範囲は動いても動かなくても問題ないから。
(今回は、最後に書けば確実に動くので問題ない。
記載を変更したら何か変更があったかと勘ぐられ、余計におかしくなる)
省10
988: (ワッチョイ 497b-vCJ4) 2024/10/28(月)10:05 ID:l7XbYqqi0(2/3) AAS
ただ、
○ ドキュメントを読めば使える
◎ ドキュメントを読まなくても使える
なので、今回はグダグダ言わずにpcreと全て揃えるのが理想で、目指す所は
既存のコードを mb_* とするとマルチバイト対応になるだけで、全て動く、ではあるが、
現実的には無理だし、phpの場合は仕様自体がわりとグダグダなので、
多少でも綺麗にしていく為には新規部分は(従来の汚い仕様を無視して)綺麗に作るしかなく、
省15
989: (ワッチョイ 497b-vCJ4) 2024/10/28(月)10:05 ID:l7XbYqqi0(3/3) AAS
> しかし今は php で (*SKIP) を動かすことを目指しているのでその後にやりますね
それで正しい。義務感でやるものではないし、面倒なら放置でいい。
(というかこの位緩くないと続かない。だいたい昨今のSNS疲れとかは義務感から来てるものだし)
だからまあ、「この表は自分も今後とも使うので正確であって欲しい。
とりあえず自分用に更新版作ったから上げとく」位でいい。
そしてそれをpythonにやらせたのなら、それもついでに上げとく、程度で十分だ。
990: (ワッチョイ 7b5f-kvRr) 2024/10/29(火)00:01 ID:R9Dn8Crp0(1) AAS
堂島の龍・・・ って言ったんだ
991: 947 (ワッチョイ 3374-ohr8) 2024/10/29(火)11:56 ID:FIsrbLEd0(1) AAS
> php側については今回は何もする必要がない
了解です、これは分かってましたので大丈夫です
> 原則として、仕様は追加は出来るが削除は出来ない
言われてみれば確かに.. 実装を仕様にしたせいで実際に破綻した経験もあったり(ぉぃ)
> pcreと全て揃えるのが理想
確かにそうですね
> A. B.
省10
992(1): (ワッチョイ 7b47-MMV6) 2024/10/29(火)14:57 ID:HnPnA3Oe0(1) AAS
すまんけど参考に問題と結論をまとめてほしい
993: (ワッチョイ 497b-vCJ4) 2024/10/29(火)20:54 ID:zqRlJI/00(1/3) AAS
次スレ
【PHP】下らねぇ質問はここに書き込みやがれ 15
2chスレ:tech
994(1): (ワッチョイ 497b-vCJ4) 2024/10/29(火)22:11 ID:zqRlJI/00(2/3) AAS
>>992
問題: PHPで (*SKIP) が使えない (>>947)
結論: 現在は使えないのが仕様
php8.3.12(最新安定版)ではphp_mbstringが対応していない
oniguruma6.6.9(最新リリースバージョン)にも入ってない(開発したばかりで未リリース状態)
なので通常は>>956,959で公式リリースを待つが、
パフォーマンスの問題、或いは(現在開発中のphpアプリの)リリース時には使えるようになっているという読み等で、
省14
995: (ワッチョイ 497b-vCJ4) 2024/10/29(火)22:42 ID:zqRlJI/00(3/3) AAS
真面目に直すなら、αを修正して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
省8
996: 947 (ワッチョイ 3374-D2cl) 2024/11/02(土)11:20 ID:grhM95Vo0(1/2) AAS
どうやら正規表現の 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ライブラリ を深く理解する必要があり、
このスレのみなさんにとっても簡単な問題ではないと思います
省2
997: 947 (ワッチョイ 3374-D2cl) 2024/11/02(土)12:21 ID:grhM95Vo0(2/2) AAS
詳細は以下のスレに書いておきました
agree.5ch.net/test/read.cgi/mango/1715675838/323-325n
C言語をいじるならデバックの仕方を知らないと話にならないようなので
そういうことを覚えるのにかなりの時間がかかりそうです、なのでこの件は一旦保留にさせて下さい
( fprintf を仕込んで ./configure, make, make install ではラチがあかなくなったので)
998: 947 (ワッチョイ 6274-erF6) 2024/11/03(日)21:59 ID:kb0e81X60(1) AAS
補足: onig_init() は oniguruma の古いバージョンが使われたときに備えてのものでした
なので問題ありませんでした
現時点では正規表現に (*FAIL) や (*SKIP) を使うとエラーになる問題は
「PHPのインストール時に (*FAIL) が実装される前の oniguruma が入れられていて
それが使われているのではないか」という仮説を立てています
(*FAIL) が実装される前の oniguruma が使われていたなら「 "FAIL" なんて名前知らない!」と
言われてもおかしくないので..
999: 947 (ワッチョイ 6274-erF6) 2024/11/04(月)01:55 ID:nQYymDx80(1) AAS
↑の仮説は否定されました
oniguruma は最新Master branch版で間違いありませんでした
oniguruma 6.9.9 で Fix されたバグが直っているのを確認しました
また、古いバージョンの oniguruma が入っていないことを確認しました
libonig-dev なども含めて他の oniguruma は1つも入っていませんでした
1000: 947 (ワッチョイ 6274-erF6) 2024/11/05(火)00:51 ID:QtAnl6270(1) AAS
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
1001(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 776日 8時間 5分 26秒
1002(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
省7
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.161s*