- 1. 【PHP】スーパーグローバル変数$_SERVER
- 2. Laravelでsqlの特訓をする
- 3. Rocky Linux 9にPHP 8.3をRemi Repositoryからインストールする
- 4. Sunoのプロンプトが200文字までなので、DeepL API & 文字数カウンターを作ってみた
- 5. Todo管理アプリ「Todoカンリ」にWebサービスの基本機能を追加する
- 6. ログファイル名を動的に変更する
- 7. Laravelのリレーション管理:外部キーを明示的に指定する方法
- 8. Laravelとは
- 9. Laravel11で『PHPフレームワーク Laravel Webアプリケーション開発』差分メモ (第一部 Laravelの基礎 Chapter1)
- 10. CGI (Common Gateway Interface) について
- 11. PHPについて
- 12. PHPDocのフォーマットまとめ
- 13. TryHackMe Writeup:Cheese CTF
- 14. PHPStan(Larastan)のLevelをローカル環境で自分用にカスタマイズする
- 15. Linuxとは
- 16. PHPによる自作CSV解析関数の性能についての考察
- 17. 【Doctrine】ArrayCollectionの便利メソッド3選(filter, map, forAll)
- 18. Laravelでmigratinonを実行、Seederでデータを挿入する
- 19. CakePHPで便利なクエリビルダーを使ってみる
- 20. CakePHPでページネーションを実装する
【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.プログラミング・開発環境に最
PHPによる自作CSV解析関数の性能についての考察
PHPでCSV解析を行う関数を作ったので性能を検証してみた。1行144文字の100万行のCSVファイルをパースして総なめする。すると12秒ほどかかった。この関数は
* 読み込んだカラムをすべて配列で取得する
という関数で、内部ではバッファに文字を溜めてそれを配列に格納して返り値として返している。
for文のループでカウント変数をカウントするだけのコードで同じ100万行のCSVファイルをなめてみたがこれは0.5秒ほどで終わる。ということはこの関数のコストは11.5秒ほどである。100万行に12秒かかるとレコード数が100万行に達したらそれだけ時間がかかるということで、12秒待つのはなかなかしんどいと思うので、現実的なコストとは言えない。
そこで特定のカラムだけバッファに格納してそれを文字列として返す関数を作ってみたら、これは9秒ほどかかった。そうすると3秒ほど短縮できた。
特定のカラムを検索したい場合にこの関数を使い、レコードのカラム全てを取得したい場合は添え字を戻して12秒の関数を使えば、効率化はできる。ただ、それでも最悪コストは9秒ほどである。
データベースを使った場合はどれぐ
【Doctrine】ArrayCollectionの便利メソッド3選(filter, map, forAll)
# 初めに
PHPのORMとして知られるDoctrineにはCollectionsと呼ばれるモジュールが存在します。
今回は、その中の機能の一つであるArrayCollectionでよく使うメソッドについて解説します。# 便利メソッド3選
今回紹介するのは以下の3つです。
* filter
* map
* forAll## filter
名前の通り、条件に合う要素のみを抽出するメソッドです。
filterの引数に戻り値がbool型のコールバック関数を渡すことで、条件に合う要素のみを抽出します。
コールバック関数に渡せるのは値だけであり、キーを渡すことはできません。“`php:filterの例
// ArrayCollection作成
$array = [‘key1’ => 1, ‘key2’ => 2, ‘key3’ => 3];
$arrayCollection = new ArrayCollection($array);// filter処理
$result = $arrayCollection->filter(function($value){
re
Laravelでmigratinonを実行、Seederでデータを挿入する
:::note
今回はLaravel Sailを使用します。SailはアプリケーションのDockerコンテナ内でArtisanコマンドを実行します。コマンドを書く際に
./vendor bin sailをsailに省略しています。
:::今回のハンズオンのリポジトリは以下です。
https://github.com/yamatai12/laravel-sql
# 1. 背景
業務でLaravelを使っているので勉強のために書きます。
今回はmigrationでテーブルを作成、Seederで作成後のテーブルにサンプルデータの挿入をします。# 2. migrationとは
SQLを使わずにDBを管理できる仕組みです。
以下の流れでTableを作成、削除、編集できます。
– migrationファイルを作成
– migrationを実行# 3. migrationで作成するテーブルのER図
“`mermaid
erDiagram
employees {
INT id PK “従業員ID(主キー)”
VARCHAR(50) na
CakePHPで便利なクエリビルダーを使ってみる
# 対象読者
CakePHPでクエリビルダーを使ってみたい人https://book.cakephp.org/4/ja/orm/query-builder.html
# ソフトウェア環境
|ソフトウェア|バージョン|
|———–|———|
|CakePHP |4.7.5 |
|PHP |8.1 |今回は、register関数でユーザー登録に成功したら、success関数内でセッションから取得したユーザーIDを使って
一意となるレコードをクエリビルダーで取得する処理です。“`
$selectUsers = $selectUsersTable
->find()
->select([‘id’,’name’,’username’,’password’])
->where([‘name’=>$targetName,’username’=>$targetEmail,’pass
CakePHPでページネーションを実装する
# 対象読者
CakePHPでページネーションを実装する方法を知りたい人# 検証環境
|ソフトウェア|バージョン|
————|———|
CakePHP | 4.7.5|
PHP | 8.1|# 完成イメージ
イメージはこんな感じです。
1ページあたり表示件数を10件表示するようなページングを実装してみました。![cakephp1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169664/542674de-69c3-9bb4-315b-3b5e0608f692.png)
# 実装の手順
実装の手順は下記の通りとなります。
## Controllerにページネーションの機能を追加
Controllerのinitializeクラス(初期化クラス)にページネーションを読み込ませます。limitプロパティで、件数を指定してあげます↓
今回は、10件表示するように設定しました。
“`
$this->paginate[‘limit’] = 10;
“