- 1. FuelPHPの例外エイリアスがキャッチできない理由を探る
- 2. PHPのエイリアスと例外処理の関係を検証してみた
- 3. 【PHP】無名関数について
- 4. Laravelのchunkメソッドで全レコードが更新されなかった話
- 5. PHPで三角関数を計算する(度数法、弧度法)
- 6. 【PHP】スーパーグローバル変数$_SERVER
- 7. Laravelでsqlの特訓をする
- 8. Rocky Linux 9にPHP 8.3をRemi Repositoryからインストールする
- 9. Sunoのプロンプトが200文字までなので、DeepL API & 文字数カウンターを作ってみた
- 10. Todo管理アプリ「Todoカンリ」にWebサービスの基本機能を追加する
- 11. ログファイル名を動的に変更する
- 12. Laravelのリレーション管理:外部キーを明示的に指定する方法
- 13. Laravelとは
- 14. Laravel11で『PHPフレームワーク Laravel Webアプリケーション開発』差分メモ (第一部 Laravelの基礎 Chapter1)
- 15. CGI (Common Gateway Interface) について
- 16. PHPについて
- 17. PHPDocのフォーマットまとめ
- 18. TryHackMe Writeup:Cheese CTF
- 19. PHPStan(Larastan)のLevelをローカル環境で自分用にカスタマイズする
- 20. Linuxとは
FuelPHPの例外エイリアスがキャッチできない理由を探る
以下に清書した記事をお送りします。
—
## FuelPHPのAutoloaderとエイリアスの例外キャッチに関する検証
FuelPHPでエイリアスによる例外キャッチの動作について気になる点があったため、検証を行いました。弊社ではFuelPHPフレームワークを使用しており、404エラーなどに`HttpNotFoundException`を利用しています。この例外は`Fuel\Core\HttpNotFoundException`のエイリアスとして定義されているはずですが、`Fuel\Core\HttpNotFoundException`を投げた場合に`HttpNotFoundException`でキャッチできないケースが発生しました。これを踏まえ、具体的に調査を行いました。
### 検証環境
本検証はPHP8.0の環境で実施しました。
“`bash
$ php -v
PHP 8.0.30 (cli) (built: Apr 10 2024 07:34:47) ( NTS gcc x86_64 )
“`### 検証内容
エイリアスとオリジナルの例外がどのようにキ
PHPのエイリアスと例外処理の関係を検証してみた
## PHPのエイリアスと例外の関係について
PHPでエイリアスを利用する際、エイリアス元と同じように例外をキャッチできるかどうか気になったので、実際に検証してみました。今回の検証はPHP 8.0を前提に行っています。
### 環境情報
“`bash
$ php -v
PHP 8.0.30 (cli) (built: Apr 10 2024 07:34:47) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
“`### サンプルコード
次のコードで、エイリアスと例外の関係を検証します。
“`php
【PHP】無名関数について
# 初めに
前略、無名関数についてよく分かっていなかったので調べました。# 参考
公式ドキュメントhttps://www.php.net/manual/ja/class.closure.php
# 無名関数とは
無名関数とは、関数名を指定せずに関数を作ることができる機能です。
作った関数は変数に代入したり、コールバック関数として使うことができます。“`php: 無名関数の例
// $testに無名関数を代入
$test = function() {
echo “Hello PHP!”;
};// 代入した無名関数を呼び出す
$test(); // Hello PHP!
“`# 無名関数を試してみる
ということで、いろいろ試してみます。## 引数の渡し方
無名関数で使う値を引数の渡し方は2種類あります。### 1. 変数を引数で値を渡す
無名関数の呼び出し時に引数を渡す方法です。
動的な値の受け渡しに適しています。
“`php: 無名関数呼び出し時、通常の引数を渡すことができる
// 引数を渡すことができる
$test = function
Laravelのchunkメソッドで全レコードが更新されなかった話
:::note
## 概要
chunkは一度にクエリの結果の小さな塊(チャンク)を取得し、各チャンクをクロージャーに送り込んで処理します。
注意点としてはチャンクのクロージャー内でレコードの更新や削除を行う場合、主キーや外部キーの変更がチャンクのクエリ結果に影響する可能性があります。
:::# chunkとは 💡
[公式 doc](https://laravel.com/docs/11.x/queries#chunking-results)
chunkメソッドは、一度にクエリの結果の小さな塊(チャンク)を取得し、各チャンクをクロージャーに送り込んで処理します。
何千ものデータベース・レコードを扱う必要がある場合に有効です。例)usersテーブル全体を一度に100レコードのチャンクで取得
“`php
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;DB::table(‘users’)->orderBy(‘id’)->chunk(100, function (Collection
PHPで三角関数を計算する(度数法、弧度法)
PHPで三角関数の正弦、余弦、正接を計算するにはsin(), cos(), tan()関数を用います。
この際に指定する角度は弧度法(ラジアン)となっています。
度数法で表現された角度をラジアンに変換するためには、deg2rad()関数を用います。たとえば、度数法で30°の正弦、余弦、正接を表示するスクリプトは以下のようになります。
“`php
$degree = 30; //度数法による角度
$radian = deg2rad($degree); //弧度法による角度
print sin($radian) . “\n”; //0.5
print cos($radian) . “\n”; //0.86602540378444
print tan($radian) . “\n”; //0.57735026918963
“`参考:
PHP: sin – Manual https://www.php.net/manual/ja/function.sin.php
PHP: cos – Manual https://www.php.net/manual/ja/function.co
【PHP】スーパーグローバル変数$_SERVER
## $_SERVERとは
$_SERVERとは、**PHPの定義済み変数のひとつ**で、PHPが稼働しているWebサーバーが生成するヘッダ情報、パス情報、スクリプトの位置のような情報を提供する連想配列となっています。
つまり、**HTTPサーバーやHTTP通信に関わる情報を取得したい場合に$_SERVERを使用します**。
## $_SERVER変数一覧
+ **$_SERVER[‘PHP_SELF’]**
現在実行しているスクリプトのファイル名です。ドキュメントルートから取得。
例) inquiry/input.php
+ **$_SERVER[‘GATEWAY_INTERFACE’]**
サーバーが使用しているCGIのバージョンを取得。
例) CGI/1.1
※CGIとは、クライアント側のWebブラウザの要求に応じてWebサーバが外部プログラムを呼び出して、その実行結果がHTTPを介してクライアントのWebブラウザに送信される仕組み
+ **$_SERVER[‘SERVER_ADDR’]**
現在のスクリプトが実行されて
Laravelでsqlの特訓をする
:::note
以下の記述を比較できるようまとめました
– 素のsql
– Eloquentモデル
– クエリビルダ
:::# 背景
SQLが苦手です。業務でLaravelを使っているのでLaravelを通して特訓したいと思います。以下のリポジトリで特訓します。
https://github.com/yamatai12/laravel-sql
# テーブルのER図
“`mermaid
erDiagram
employees {
INT id PK “従業員ID(主キー)”
VARCHAR(50) name “名前”
VARCHAR(50) position “役職”
INT department_id FK “部門ID(外部キー)”
}departments {
INT id PK “部門ID(主キー)”
VARCHAR(50) department_name “部門名”
}projects {
INT id P
Rocky Linux 9にPHP 8.3をRemi Repositoryからインストールする
# What’s?
以前、CentOS 8向けにこういう記事を書きました。
https://qiita.com/charon/items/5727966a98609a0b71ed
これからCentOSからAlmaLinuxやRocky Linuxを使うようになったので、あらためて書いておこうかなということで。
# Remi Repositoryについて
Remi Repository自体については、こちらを参照。
https://qiita.com/charon/items/6d34ae798e9b05e8bd0a
[Which are the goals of this repository?](https://blog.remirepo.net/pages/English-FAQ#goal)
# Remi RepositoryからのPHPのインストール方法
Remi RepositoryからのPHPのインストール方法は、このあたりを参考に。
https://blog.remirepo.net/post/2024/05/17/Install-PHP-8.3-on-
Sunoのプロンプトが200文字までなので、DeepL API & 文字数カウンターを作ってみた
## はじめに
**DeepL API & 文字数カウンター**
https://gist.github.com/sarap422/b2c0fdff98b14197cc7fd41541b5cf34Sunoのプロンプトは200文字までという制限があります。長文を分割するのは手間がかかるので、文字数をカウントしながら翻訳できるツールを作ってみました。DeepL API Freeを使用することで、月50万文字まで無料で高精度な翻訳が利用できます。
## DeepL API Freeの特徴
– 月間50万文字まで無料
– 高精度な機械翻訳
– シンプルなAPI
– 多言語対応(28言語以上)
– セキュアな通信(HTTPS必須)## 実装手順
### 1. DeepL API Freeのアカウント作成
1. [DeepL API Free](https://www.deepl.com/pro#developer)にアクセス
2. アカウントを作成
3. APIキーを取得(形式: `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx:fx`)### 2
Todo管理アプリ「Todoカンリ」にWebサービスの基本機能を追加する
# 初めに
https://qiita.com/opatu07/items/13ebcd6071a3d7893d5d
この記事でHTML,CSSの使い方はある程度わかったので
Webサービスの基本的な機能を作れるようになりたいと考えました。
なのでその設計を行います。# 追加する機能
## 認証系
– 会員登録
– ログイン
– ログアウト## CRUD系
– 新規登録
– 一覧表示
– 詳細表示
– 編集機能
– 削除機能# プログラミング言語
– PHP
– MySQL# なぜこの開発を行うのか
今回はLaravelなどのPHPのフレームワークを使用せずに開発を行います。
フレームワークを使用しない理由はWebシステムの仕組みを理解して開発を行うことが大事だと考えたからです。
もし開発チームに入った時に一覧機能の修正を依頼されたとします。でもフレームワークに頼った開発しかしていない場合大量のソースコードの中でどこをどのように修正するべきかがわからないので開発をすることができません。
なので今回はPHPのみを使用してサービスの機能の根本的な理解を目的とした開発をし
ログファイル名を動的に変更する
## laravel.log に何でもいれるな
原則として laravel.log はエラーログだけにしたい。エラーが発生しないなら常に空っぽの状態というのが心休まる。
開発時に Debug ログの出力を仕込んだなら、コミットするときに削除(せめてコメントアウト)してもらいたい。デバックが必要な事態が起きたときに Debug ログを仕込んで laravel.log を監視しても、全然関係ないデバッグ情報が延々と流れてきては辟易する。
定期実行タスクの実行ログや特定機能のデバッグログは、それぞれの機能や目的に応じてログファイル名を変えて保存したい。……ということで、ログファイル名を指定できるカスタムヘルパー logger_to を作ってみた。
### カスタムヘルパーを作成
標準のロギングチャンネル sigle をベースに使用して名前だけを変更する。
app/Helpers/custom.php
“`php
use Illuminate\Support\Facades\Log;
use Monolog\Handler\StreamHandler;
use Monolog
Laravelのリレーション管理:外部キーを明示的に指定する方法
# はじめに
この記事はLaravelを学習する過程で得られた結果の備忘録です誤りや追記が必要な場合は都度修正します
## Laravelのリレーション設定
次のように hasMany メソッドが存在する場合、Laravelは外部キーを自動的に推測します。そこで発生しやすいエラーが、**存在しない外部キーを参照する**ことです。
本来ならば`customer_id`を参照して欲しいところ`customer_customer_id`というカラム名を自動的に推測して参照する場合があります。このような推測が誤って行われると、エラーの原因になります。
そのため**hasMany** と **belongsTo メソッド**それぞれの引数に対して、外部キーを指定することで、正しい外部キーを参照することができます。
### 修正前
“`customer.php
public function customer_contacts()
{
return $this->hasMany(CustomerContact::class);
}
“`
“`customer_cont
Laravelとは
# Laravelとは
– LaravelとはPHPのフレームワーク。
# フレームワークとは
**フレームワークとは開発に必要な機能をまとめた枠組みのこと。**
例えるとバーベキューセットのような物。
予め、食材(関数等)が用意されており、あとは焼く(呼び出す)だけ。
セキュリティ機能もバッチリ。まとめると
**良く使う機能は予め搭載されており、呼び出すだけ。**
**1からコードを書くより効率的に、さらにセキュリティー上も安全なwebアプリを作成できる。**# Laravelで作成できるもの
– 顧客管理システム
– ブログ
– 学習サイト
– ECサイト
– コミュニティサイト 等
Laravel11で『PHPフレームワーク Laravel Webアプリケーション開発』差分メモ (第一部 Laravelの基礎 Chapter1)
# 概要
Laravel11で下記を写経した。
[PHPフレームワーク Laravel Webアプリケーション開発 バージョン8.x対応 (ソシム)](https://amzn.asia/d/dedpj7x)
今の設定と差分があるのでメモをしていく。Laravelを触るのは4年ぶり。
最後触れたLaravelは6。## 環境
* Laravel Framework 11.29.0
* Docker version 27.2.0
* Mac (intel)
* Laravel Sail (sail/runtimes/8.3)(なお、`php artisan`コマンドについては、sailコマンドに慣れるのが微妙だったので、`sail shell`でコンテナの中に入って叩くようにしてます)
# 第一部 Laravelの基礎
## Chaper1 Laravelの概要
### RouteServiceProvider::HOMEがない“`
‘/home’
“`
みたいな文字列を作ってくれそうなのだが、そもそも
このHOME定数がもうLaravel11では無くなっている模様
CGI (Common Gateway Interface) について
# CGI (Common Gateway Interface) について
## 概要
CGI(Common Gateway Interface)は、Webサーバーと外部プログラムを接続する仕組みで、ユーザーからのリクエストに応じて動的なコンテンツを生成するために使用されます。CGIプログラムは、PerlやPython、C、PHPなどの多くのプログラミング言語で書くことができ、フォーム入力などを処理し結果をWebページに反映させることが可能です。
## CGIの仕組み
CGIは以下の流れで動作します:
1. **リクエストの受け取り**:ユーザーがブラウザでリクエストを送信。
2. **WebサーバーからCGIプログラムへの呼び出し**:WebサーバーがCGIプログラムを実行。
3. **CGIプログラムによる処理**:リクエスト内容に基づいてデータの処理や計算を行う。
4. **レスポンスの返却**:CGIプログラムが結果をHTML形式で生成し、Webサーバーを介してユーザーに返す。## CGIプログラムの例
### Perlスクリプト例
次の例では、Perlスクリ
PHPについて
# PHPについて
## 概要
PHPは「Hypertext Preprocessor」の略で、動的なWebページを生成するために開発されたサーバーサイドのプログラミング言語です。HTMLと密接に連携するため、動的なWebアプリケーションやAPIの開発に多く利用されています。
## PHPの特徴
– **サーバーサイドスクリプト**: PHPコードはサーバー側で実行され、その結果だけがHTMLとしてクライアントに返されます。
– **動的なWebページ生成**: データベースと連携することで、ユーザーのリクエストに応じてページ内容を変更できます。
– **クロスプラットフォーム**: Windows、macOS、LinuxなどさまざまなOSで動作します。
– **オープンソース**: 無料で使用できるオープンソースの言語で、コミュニティによって開発が続けられています。## PHPの基本構文
PHPは``で囲まれた部分に記述し、その中にコードを書きます。以下は、基本的な構文です。
### 1. 変数
変数は`$`記号で始まり、データを格納します。
PHPDocのフォーマットまとめ
# はじめに
以下ではコメント記載時の備忘録として、IDEの1つであるVSCodeのツールチップとPHPDoc出力後のイメージを抱き合わせで掲載しています。
# 動作環境
- プラットフォーム
- Windows10
- PHPDoc
- phpDocumentor v3.5.3
- IDE
- VSCode v1.94.0
# PHPDoc出力コマンド
ファイル構成が以下の場合。
- phpDocumentorの実行ファイル
- カレントディレクトリ
- ソースファイル
- カレントの
src
ディレクトリ内- PHPDoc出力先
- カレントの
doc
ディレクトリ内“`console:PHPDoc出力時のコマンド
TryHackMe Writeup:Cheese CTF
# はじめに
本記事はTryHackMeのWriteupです。Roomは[Cheese CTF](https://tryhackme.com/r/room/cheesectfv10)、Difficulty(難易度)はEasyです。
このRoomでは、PHPのfilter chainやsystemctlに関するスキルについて学ぶことができます。
## ポートスキャン
はじめにポートスキャンを実行します。ポートスキャンを実行すると、多くのポートの状態がopenになっていることが確認できます。
出力例
“`
9/tcp open discard
13/tcp open daytime
17/tcp open qotd
19/tcp open chargen
20/tcp open ftp-data
21/tcp open ftp
22/tcp open ssh
23/tcp open telnet
24/tcp open priv-mail
25
PHPStan(Larastan)のLevelをローカル環境で自分用にカスタマイズする
PHP(Laravel)での開発をしていて、PHPStanが導入されているのですが、自分用にLevelなどカスタマイズして、品質をあげて最終的に全体反映できたらいいなと思ってましたのでそのときの備忘録。
※該当プロジェクトにすでにphpstanがインストール済みを前提としています。# 1.ディレクトリを作成
“`
プロジェクトディレクトリ
├ phpstan-local ← ディレクトリを作成
├ app ← アプリケーションコード
├ vendor
├ public
… etc“`
# 2.phpstan.neonを作成
“`
プロジェクトディレクトリ
├ phpstan-local
├ phpstan.neon
“`“`
includes:
– ../vendor/nunomaduro/larastan/extension.neon //phpstan.neonから見たLarastanのファイルparameters:
paths: //対象のディレクトリ
– ../app
– ../tests
Linuxとは
# Linuxとは
LinuxとはOSの一種でオープンソースのOS。
どの種類のPCにもインストールできる。# Linuxでできること
– WindowsやMacのようにパソコンの操作ができる。
– 操作が早くなるCUI操作を基本としている。**CUI操作とは**
1. マウスを使わずキーボードだけで操作する方法。
2. コマンドを打って操作をする。
3. Linuxを操作する色々なコマンドがある。# Linuxのメリット
**1. オープンソースで無料**
Linuxはオープンソースで誰でも無料で使用できる。
ソースコードを自由に閲覧、変更できるためカスタマイズ性も高い。**2. 低スペックのPCで使える。**
システム要件が低く、軽量なディストリビューションも多いため古いパソコンでも使いやすい。**3. 多彩なディストリビューション**
用途やユーザーのレベルに応じたさまざまなディストリビューション(例:Ubuntu、Debian、CentOS、Arch Linux)が提供されているため、初心者から上級者まで選択肢が豊富。**4.プログラミング・開発環境に最