GyaanSetu PHP

PHP、Laravel、WordPress。

28 articlesDeep, practical knowledge

PHPワーカーを節約しCPUスパイクを防ぐために、サーバー側で wp-cron.php をブロックする

DISABLE_WP_CRON = true は、WordPress が独自のループバックリクエストを行うのを防ぐだけであり、wp-cron.php の URL は引き続きアクセス可能なままです。そのため、攻撃者による大量のリクエストによって PHP ワーカーが枯渇し、共有ホスト上でサービス拒否(DoS)を引き起こす可能性があります。

PHP · 4 分で読めます

InvoiceShelfのパッチにより、オーナーが他のテナントを乗っ取ることが可能になるスコア8.7の脆弱性が修正

この脆弱性は、Laravelのルートモデルバインディングとテナントスコープのチェック漏れに起因するもので、オーナーがいかなるユーザーIDもリクエストして認証情報を上書きできるため、被害者のアカウントを実質的に攻撃者の会社へと移動させることが可能でした。

PHP · 2 分で読めます

Magento開発者がDB呼び出しを300分の1に削減、しかし在庫切れ商品が消失

商品ごとに300回行われていたリポジトリ呼び出しを1回のコレクションクエリに置き換えることでクエリ数を劇的に削減したものの、Magentoの組み込み在庫フィルターが在庫ゼロのSKUをすべて除外してしまい、結果として顧客には不完全なカタログが表示されることとなった。

PHP · 3 分で読めます

TrendVidStream、ハッキングを受け、30日間有効なJWTから使い捨てのリフレッシュトークンへと仕様を変更

パートナー企業のSDKが30日間有効なJWTをプレーンテキストでキャッシュしていたため、海外からのリプレイ攻撃を許す事態となりました。このセキュリティ侵害を受け、TrendVidStreamは長期間有効なJWTの使用を廃止し、有効期限15分のアクセストークンと、再利用時に即座に失効する使い捨てのリフレッシュトークンへと切り替えました。

PHP · 3 分で読めます

WordPressのメール確認画面に開発者が数時間を奪われる —— 1行で解決する修正方法

WP 5.3以降、数ヶ月ごとに管理用メールの確認ページが表示されるようになり、自動実行中のPlaywrightが、表示されないボタンを待ち続けてしまう問題が発生しています。URLを素早くチェックして「I'll wait」をクリックする処理を加えるだけで、自動化の安定性を取り戻せます。

PHP · 3 分で読めます

Etcdの導入によりAPACのビデオルーティングエラーが1秒に短縮、ソウル・東京間の誤ルーティングを解消

watch、lease、CASプリミティブを活用してリージョン固有のルーティングデータをetcdへ移行したことで、全8台のルーターへの変更反映が約1秒で完了するようになりました。軽量なGo製サイドカーが設定を共有メモリに書き込む仕組みにより、PHPはゼロレイテンシでの読み取りによるリクエスト処理を実現しています。

PHP · 4 分で読めます

クロアチアの2026年電子請求書ルール、PHPアプリに62項目のバリデーションルールの書き換えを強いる

2026年1月1日より、クロアチアにおけるすべてのB2B取引はXSLT 2.0で記述されたSchematronファイルを通過する必要がありますが、PHP標準のlibxsltはXSLT 1.0までしか対応していません。請求業務を維持するため、開発者はネイティブのSaxon-C拡張機能を追加するか、外部サービスを利用するか、あるいは62項目のチェックをPHPで書き直すかの選択を迫られています。

PHP · 4 分で読めます

ESI(Edge-Side Includes)を活用し、トレンドページのロード負荷を毎分4,000クエリから50クエリ未満に削減した手法

チームはフロントページをビデオグリッド、言語スイッチャー、ライブヘッダーの3つのフラグメントに分割しました。VarnishのTTLを60秒、24時間、およびキャッシュなしに設定し、匿名部分からクッキーを削除。さらに、サロゲートキーを活用することで即時のパージを実現しました。

PHP · 3 分で読めます

動画プラットフォーム、SQLite FTS5からOpenSearchへ移行し、検索結果ゼロを10分の1に削減

SQLiteをマスターデータとして維持しつつ、階層的な関連付けとチューニングされた曖昧検索(fuzzy)設定を備えた読み取り専用のOpenSearchレプリカを構築。これにより、中央値レイテンシを28ms未満に抑えながら、検索結果ゼロの件数を10分の1に削減することに成功しました。

PHP · 3 分で読めます

SEOチームの「掲載数3件未満はnoindex」というポリシーが、カテゴリページを消失させる原因に

新しい「seo_unlocks」テーブルは、カテゴリの有効な掲載数が3件に達した瞬間を記録し、ページを恒久的にインデックス可能にします。これにより、ページがGoogleから消失し、再び検索結果に表示されるまでに数週間を要していた以前のサイクルを防ぐことができます。

PHP · 3 分で読めます

OpenSearchとSQLiteの二重インデックスにより、いかにしてラテン文字ユーザーの検索結果ゼロ問題を解決したか

クエリをまずOpenSearchのファジーなラテン文字フィールドとCJKバイグラムアナライザーにルーティングし、タイムアウト時にSQLite FTS5へフォールバックさせることで、20ミリ秒のレイテンシ上限を維持したまま、検索結果ゼロの発生率を2.1%まで削減することに成功しました。

PHP · 4 分で読めます

Cloudflare Workersにより動画サイトのサムネイル生成に伴うCPU負荷がゼロに

サムネイル生成をCloudflare Workersに移行することで、この動画ホスティングプラットフォームはオリジンサーバーにおける画像処理負荷を完全に排除しました。また、96%のエッジキャッシュヒット率を達成し、世界中で一貫して1秒未満の画像レスポンスを実現しています。

PHP · 3 分で読めます

オブジェクトのハイドレーションは、計測してみるまでは解決済みの問題のように思える。データベースから行を取得し、配列を...

オブジェクトのハイドレーションは、実際に計測してみるまでは解決済みの問題のように思える。データベースから行を取得し、配列をオブジェクトにマッピングして、そのまま次の工程へ進む。私たちの多くは、それを単なる定型的な作業として扱っているが...

PHP · 5 分で読めます

Your file exists() Is Secretly a Network Call

Your file exists() Is Secretly a Network Call You write this line a thousand times: if ( file exists( $path ) ) { It looks safe. It looks fast. But if $path points to an S3 bucket…

PHP · 2 分で読めます

PHPがネイティブのポーリングAPIを追加、FibersにOSレベルの高速化を実現

新たにマージされたポーリングAPIはepoll、kqueue、およびIOCPをラップしており、イベントループが単一のシステムコールでFibersを再開できるようになります。ベンチマークでは、並行処理のオーバーヘッドがゼロになり、数十のストリームが存在する場合でもCPU使用率が一定に保たれることが示されています。

PHP · 3 分で読めます

Optistream、1,000ページのSEOを維持したまま12個のWordPressプラグインを1つに統合

チームは軽量なブートストラップローダーを構築し、すべてのCSSをスコープ化、メタキーは変更せずに維持。各モジュールの入れ替え後には厳格なチェックリストを用いて全URLを検証することで、200ステータスの低下、リンク切れ、レイアウトの崩れを一切発生させないようにしました。

PHP · 4 分で読めます