//PHP
get()、chunk()、lazy()、cursor()の理解(Laravel)
紹介 データをクエリする際、いくつかの要因がアプリケーションのパフォーマンスに影響を与える可能性があります。適切に使用しないと、RAMを大量に消費し、ページの読み込み速度が著しく低下することがあります。 パフォーマンス最適化のために Laravel Octane を活用することに加えて、Laravel はケースに応じて効率的にデータクエリを実行するためのさまざまなメソッドを提供しています。本記事では、Laravel 11 と MySQL を使用していくつかの例を示します。 各メソッドの概要 get(): クエリを実行し、すべてのデータを PHP メモリに読み込む。 chunk(): データをチャンク(小分け)して順番に処理する。 lazy(): chunk() に似ているが、PHP Generator を使用してよりメモリ効率が良い。 cursor(): データベースバッファから1レコードずつ取得し、メモリを節約する。 get() Laravel の get() メソッドはクエリを実行し、結果全体を Collection 形式で PHP メモリにロードします。 クエリを即時に実行する。 すべてのデータを一度に読み込むため、メモリ効率は悪い。 map()、filter() などの Collection メソッドが使用可能。 リレーションの Eager Load に対応。 ⚠️ 注意: 小規模なデータセットに対してのみ使用を推奨。 🧪 例:すべての employees を取得 Laravel: $employees = Employee::get();..
もっと見る- 45 ビュー
- 0 コメント
Laravel Octaneでアプリケーションのパフォーマンスを向上させる
Laravel Octane ご存知の通り、従来のLaravelアプリケーションでは、PHPは1回のリクエストを1回ずつ処理することしかできませんが、Laravel Octaneを使用すると、複数のリクエストを同時に処理できるようになり、ウェブサイトの速度が向上します。 1. Laravel Octaneとは? Laravel Octaneは、Laravelアプリケーションのパフォーマンスを向上させるために作成されたオープンソースのパッケージです。最初にアプリケーションを1回だけ起動し、それをメモリ(RAM)に保持し、その後のリクエストは、アプリケーションを最初から再起動するのではなく、メモリ内で保存された状態を再利用して処理されます。 Laravelのリクエストライフサイクル Laravel Octaneのリクエストライフサイクル Laravel Octaneのもう一つの特徴は、複数のワーカーを同時に使用してリクエストを処理できることです。これにより、以前のようにリクエストを1回ずつ処理するのではなく、複数のリクエストを同時に処理できるようになります。 Laravel Octaneのリクエスト処理の概要 Octaneは、FrankenPHP、Swoole、RoadRunnerという3つのPHPの非同期処理ツールを基盤として開発されています。この記事では、Swooleに焦点を当てます。 PHP Swooleは、Erlang、Node.js、Nettyの原則を基にPHP向けに設計されています。しかし、SwooleはLinuxカーネル上でのみ動作するため、現在はLinux、OS X、Cygwin、またはWSLでのみ使用できます。 2. PHP SwooleとPHP-FPMの違い 以下は、PHP SwooleとPHP-FPMの違いを比較した表です。 PHP Swoole PHP-FPM TCP、UDP、HTTP、HTTP2、Unixソケットのサポート あり なし。追加のライブラリが必要 非同期I/Oの使用 あり なし 各CPUに対してワーカープロセスの分割 – 同時処理のサポート あり なし PHPファイルをメモリに読み込む あり なし WebSocketサーバーやTCP/UDPサーバーのための長期接続サポート あり なし 3. Laravel OctaneとPHP-FPMの速度比較 Laravel Octaneの実力を証明するため、簡単なデモを行い、PHP OctaneとPHP-FPMの結果を比較してみましょう。 次のベンチマークテストを仮想マシン(VMware)で行いました: テストベンチの統計情報: CPU: 2コア(11th..
もっと見る- 948 ビュー
- 0 コメント
PHPジェネレーター
こんな状況に直面したことはありませんか? これは、実行中のプロセスが許可されたRAMメモリ制限を超えてメモリを消費する場合に、PHP開発者が遭遇する可能性のあるエラーです。 具体的な例を見てみましょう: private function range() { $a = []; for ($i = 0; $i < PHP_INT_MAX; $i++) { $a[] = $i; } return $a; } foreach ($this->range() as $value) { echo $value; } 上記のコードは、0からPHP_INT_MAX(現在のPHPバージョンが提供する最大の整数値)までの配列を作成し、その値を画面に出力します。コードを実行すると、先に述べたエラーが発生します。 このエラーに対処する方法はどうすれば良いのでしょうか?一つの方法は、“memory_limit”の設定をphp.iniファイルで増加させることです。 ; スクリプトが消費する最大メモリ量 ; https://php.net/memory-limit memory_limit = 128M しかし、これは最適な解決策ではありません。小さなコードでメモリ制限オーバーエラーが発生しているのは問題があります。そこで、メモリ制限を増加させる代わりに、PHPジェネレーターを使用して、どのようにメモリ使用量を削減できるか試してみましょう。 PHPジェネレーターとは? PHPジェネレーターは、PHP 5.5で導入された強力な機能です。この機能により、ジェネレーター関数を作成することができ、ジェネレーター関数はすべての値を一度に返すのではなく、必要に応じて1つずつ値を生成して返します。これによりメモリを大幅に節約でき、データセット全体をメモリに保持せずにデータを処理することができます。 PHPジェネレーターの使用方法 上記のコードで、“range()”関数を変更して、配列(文字列)を作成してすべての値を返すのではなく、yieldキーワードを使って値を順番に返すようにします。簡単に言うと、yieldは値を返しますが、すべての値をメモリに保存することなく、その時点で呼び出すときにのみ値を返します。このようにすると、関数はジェネレーター関数になります。 private function range() { for ($i..
もっと見る- 149 ビュー
- 0 コメント
CSRF攻撃の技術とその対策
ウェブサイトのセキュリティ問題は、プログラマーにとって非常に重要なものです。経験豊富なプログラマーは、自分のプロジェクトを守るために巧妙な方法で対策を取りますが、初心者にとっては非常に難しい問題です。ウェブサイトのセキュリティに関しては、言及すべきことがたくさんありますが、1つの記事ではすべてをカバーできません。ですので、私は「プログラマーのためのウェブサイトセキュリティ」というシリーズを作成することにし、その中でプログラマー向けのセキュリティ問題について説明します。 そして、最初の記事ではCSRF(Cross-site Request Forgery)攻撃の技術について紹介します。まず、この攻撃技術の概念から説明しましょう。 1. CSRF攻撃技術とは? この質問に答えるために、私は自分の理解を基に説明します。つまり、私がどのように理解しているかをそのまま説明しますので、誤解があるかもしれませんが、あらかじめご了承いただき、より良い記事を作成するためにフィードバックをいただければ幸いです。 CSRF攻撃技術、または「クロスサイトリクエストフォージェリ」とも呼ばれる技術は、その攻撃対象を偽装するものです。ここでは、分かりやすい例を挙げて説明します。 例えば、システム内にユーザーを削除する処理があり、URLが次のようになっているとします:domain.com/delete.php?id=12 (IDが12のユーザーを削除)。このURLを知っている人がいた場合、その人はシステムの管理者を利用して攻撃を仕掛けることができます。その人は、管理者に対して画像タグ(IMG)を含むメールを送信し、各画像に異なるIDを埋め込んでおきます。もし管理者がそのメールを開き、そのシステムにログインしていた場合、管理者は意図せずに画像SRCに書かれたIDのユーザーを削除してしまうことになります。これはあくまで簡単な例ですが、実際には、こんなふうにIDをURLに埋め込むことはあり得ませんが、経験の浅いプログラマーがこれを見逃すことがあります。 他にもさまざまなケースがありますが、ここでその概念を理解していただけたかと思います。それでは、実際の対策方法について説明します。 2. CSRF攻撃の対策方法 通常、対策は2つの対象に分けて考えます。一つはプログラマー(coder)、もう一つはエンドユーザー(user)です。 エンドユーザー向けの対策: 不明な送信元のメールや、他の人とやりとりしているときには、システムへのログインを控えるようにしましょう。使用していないときは、すぐにログアウトします。 自分専用の端末を使用し、他の人がその端末にアクセスしないようにしましょう。 パスワードは頻繁に変更し、予測しにくい強力なパスワードを設定しましょう。特に、特別な文字を使うことをお勧めします。現在、パスワードを破るソフトウェアが多く出回っています(CSRFには直接関係ありませんが、セキュリティのために記載しました)。 プログラマー向けの対策: 各端末やブラウザに対して、ランダムで自動生成されたトークンを作成し、その有効期限を設定します。 データベースに影響を与えるリクエストにGETメソッドを使用しないようにしましょう。 ユーザーからの入力を慎重に検証します。 管理者用のURLはできるだけ覚えにくく、複雑にしましょう。
もっと見る- 65 ビュー
- 0 コメント
Laravel LTS 5.5の新機能
Laravelのコミュニティは、新しいバージョンLaravel 5.5のリリースを待ち望んでいます。これは、Laravel 5.1が初めてのLTSバージョンとしてリリースされ、7月にサポートが終了するためです。 LTSは「Long Term Support」の略で、長期サポートを意味します。LTSバージョンは、バグ修正の更新に2年間、セキュリティ更新に3年間のサポートを提供します。LTSバージョンのサポート期間中は、Laravelのチームが継続的に更新を行い、サポートが終了した後には、次のバージョンにアップグレードする必要があります。 現在のLTSバージョン: Laravel LTS 5.1 https://laravel.com/docs/5.1 PHP > 5.6 最新のLTSバージョン: Laravel LTS 5.5 https://laravel.com/docs/5.5 PHP > 7.0 5.5での変更点: Headless Chromeテスト: Laravel Dusk 2.0.0に対応。 EloquentのBelongsToManyがパラメータの順序を変更し、ピボットテーブルが使用される。 Eloquentの$dispatchesEvents属性。 Eloquentの$pivotParent属性。 ソフトデリート時でも、モデルの$exists属性はtrueのまま。 withCount(‘foo as bar_count’)関数が追加され、フィールド名にエイリアスをサポート。 例外の内容がJSON形式で整形されて表示される。 Requestの便利関数の動作が変更され、has()やonly()が返す結果が変わり、intersect()関数が削除。 request($key)関数は、’foo.bar’のようなネストされたキーを受け付けなくなり、代わりにrequest()->input($key)を使用する。 ビューへの変数渡しにおいて、動的なビュー名が使えるようになり、view($viewName)->withMyVariable($value)の形式で渡された変数は$myVariableとして使用される。 バリデータの関数がすべてpublicに変更され、protectedではなくなった。 routesディレクトリが追加され、アプリケーションのルート定義は、以前のapp/Http/routes.phpではなく、この新しいディレクトリに配置される。 5.5の新しいコア機能: Middlewareグループ、異なる目的のために分けて使用する。 Responsableインターフェース -> コントローラーでオブジェクトをレスポンスとしてフォーマットする。 Ruleオブジェクト -> バリデーションルールをより柔軟にクラスで作成できるようになる。 Pivotモデルのフィールドをキャスティングできるようになる。 Bladeのif式にカスタムディレクティブを追加し、コードを簡潔に書けるようになる。 Collection上でdump()やdd()を使えるようになり、アプリケーションの中断なく操作ができる。 パッケージインストール時に、ProviderとFacadeが自動でインジェクトされる。..
もっと見る- 57 ビュー
- 0 コメント
Phalcon Framework
1. Phalcon Frameworkとは? PHP C-extension (Phalcon) はC言語で構築されたPHPフレームワークです。C言語で構築されているため、フレームワークは高速で高性能であり、約3000リクエスト/sを処理できます。 PHPを知っていれば、Phalconを簡単に使用できます。Phalconは非常に学びやすく、ドキュメントも比較的明確です。 Phalconのライブラリは非常に小さく、ダウンロードやインストールも簡単で、容易にアクセスできます。また、Phalconのプロジェクト構成もシンプルで理解しやすいです。 さらに、Phalconは非常に強力な機能を提供しています。以前のフレームワークからの優れた機能を継承しています。PhalconはORMモデルを通じて、データベース操作を簡単に行えるようにしており、テンプレートエンジンも優れた動作をします。 2. Phalcon Frameworkのインストール手順(Windows) XAMPP WindowsにPhalconをインストールする手順 ステップ1:XAMPPのphpinfoにアクセスして、Apache2とPHPの設定情報を確認し、使用しているPHPのバージョン(5.5.34)とコンパイラ(MSVC11 (Visual C++ 2012))に注意します。 ステップ2:Phalconの公式サイトからダウンロードして、サーバー設定に合ったdllファイルを選択します。上記の設定情報に基づき、phalcon_x86_vc11_php5.5_3.1.2.zipを選択しました。 ステップ3:ダウンロードが完了したら、ファイルを解凍し、dllファイルをPHPの拡張ディレクトリ(例:C:\xampp\php\ext)にコピーします。その後、php.iniファイル(C:\xampp\php\php.ini)を開き、ファイルの最後に次の行を追加します。 `extension=php_phalcon.dll` 最後に、XAMPPを再起動し、phpinfoにアクセスしてPhalconの拡張が有効になっているか確認します。
もっと見る- 59 ビュー
- 0 コメント
WordPress
1. WordPressとは? ◆ WordPress は、PHP(Hypertext Preprocessor)で書かれ、MySQLデータベースを使用するオープンソースのソフトウェアです。WordPressは、2003年5月27日に、Matt Mullenweg と Mike Little によって最初に公開されました。現在、WordPressはSan Francisco, Californiaに本社を構えるAutomattic社によって所有・開発されています。 ◆ WordPressは、PHPで書かれたオープンソースのソフトウェアで、個人ブログを作成するために非常に人気があります。その使いやすさと多くの便利な機能により、多くのユーザーに支持されています。時間が経つにつれて、ユーザー数が増加し、開発者たちがこのオープンソースプロジェクトに参加して、さらに素晴らしい機能を追加しています。現在(2017年の時点で)、WordPressは非常に優れたコンテンツ管理システム(CMS – Content Management System)として、多種多様なウェブサイト(ブログ、ニュース/雑誌サイト、企業紹介サイト、オンラインショップ、ホテル予約、レンタカー、不動産プロジェクトなど)を作成するためのプラットフォームとして広く使用されています。ほぼすべての中小規模のウェブサイトは、WordPressを基盤として構築できます。 ◆ しかし、WordPressは小規模なプロジェクトだけに適しているわけではなく、現在、世界で最も訪問者数が多い100のウェブサイトのうち約25%がWordPressを使用しています。例えば、TechCrunch、Mashable、CNN、BBC America、Variety、Sony Music、MTV News、Bata、Quartzなど、多くの有名なウェブサイトがWordPressを使用しています。 2. WordPressのインストール手順(XAMPP Windows) ステップ1. WordPress.orgからソースコードをダウンロード ◆ まず、WordPressの最新のソースコードをhttps://wordpress.org/latest.zipからダウンロードします。 ◆ ダウンロードが完了したら、解凍して「wordpress」という名前のフォルダが作成されます。このフォルダは、バージョン番号が付いた別のフォルダ(例:wordpress-x)に含まれていることがありますが、最終的には「wordpress」というフォルダを見つけることができます。 ◆ 次に、WordPressフォルダにアクセスすると、wp-admin, wp-includes, wp-contentという名前のサブフォルダと、index.php, wp-config-sample.phpなどのファイルが見つかります。これらがWordPressのソースコードです。 ステップ2. WordPressソースコードをローカルホストにコピー ◆ 次に、WordPressのすべてのファイルとフォルダを、ローカルホストのウェブサイトディレクトリにコピーします。例えば:C:\xampp\htdocs\demoです。つまり、WordPressのソースコードのみをコピーします。wordpressフォルダ全体をコピーすると、ウェブサイトのURLがhttps://localhost/demo/wordpress/になってしまいます。 ステップ3. 新しいデータベースを作成 ◆ WordPressを動作させるには、ローカルホストにMySQLデータベースが必要です。このデータベースに記事や設定などのデータが保存されます。 ステップ4. インストールを実行 ◆ すべてコピーしたら、XAMPPのコントロールパネルを開き、ApacheとMySQLを起動します。その後、ウェブサイトにアクセスしてhttps://localhost/demoを開きます。 ◆ すると、インストールするための言語選択画面が表示されます。Englishを選択し、Continueをクリックします。 ◆ 次の画面では、wp-config-sample.phpファイルをwp-config.phpに変更し、データベース情報を追加するように求められます。Let’s Goをクリックして、この作業を自動で行わせます。..
もっと見る- 52 ビュー
- 0 コメント
PHPのisset()、empty()、is_null()の違い
クレジット: https://techtalk.virendrachandak.com/php-isset-vs-empty-vs-is_null/ PHPには変数の値をテストするためのさまざまな関数があります。これらのうち、isset()、empty()、およびis_null()は非常に役立つ関数です。これらの関数はすべてブール値を返します。これらの関数が正しく使用されないと、予期しない結果が生じることがあります。 isset()とempty()は、しばしば反対の関数と見なされますが、これは常に正しいわけではありません。この記事では、これらの関数の違いについて説明します。 isset() PHPマニュアル – isset()より: isset — 変数がセットされており、NULLでないかを確認します 言い換えれば、変数がNULLでない場合にのみtrueを返します。 empty() PHPマニュアル – empty()より: empty — 変数が空かどうかを確認します 言い換えれば、変数が空の文字列、false、array()、NULL、”0″、0、または未設定の変数であれば、trueを返します。 is_null() PHPマニュアル – is_null()より: is_null — 変数がNULLかどうかを確認します 言い換えれば、変数がNULLの場合にのみtrueを返します。is_null()はisset()の逆ですが、1つの違いは、isset()は未宣言の変数にも適用できますが、is_null()は宣言された変数にのみ適用できることです。 下のテーブルは、これらの関数が異なる値に対して返す結果を簡単に参照できるものです。空白のセルは、関数がbool(false)を返すことを意味します。 変数の値 ($var) isset($var) empty($var) is_null($var) “” (空の文字列) bool(true) bool(true) ” ” (スペース) bool(true) FALSE bool(true) bool(true) TRUE bool(true) array() (空の配列) bool(true) bool(true) NULL bool(true)..
もっと見る- 86 ビュー
- 0 コメント
