- 1. 1. PHPのバージョン確認
- 2. 2. php.iniを開く
- 3. 3. date.timezone
- 3.1. GroupSession WebAPIを使ってPHPで施設の予約内容を取得する
- 3.2. LaravelでのCSRF除外設定について
- 3.3. Google Apps ScriptでPHPのHmacSha256ハッシュを作成しようとしたら沼った話
- 3.4. Laravelのキューを並列処理させるためのsupervisorの使い方
- 3.5. 【PHP】マルチバイト文字をバイト数を指定して取得する場合は、mb_strcut()を使うと良い
- 3.6. 【Drupal/EC2/Slack/Qiita】QiitaトレンドにのったらSlack通知
- 3.7. Laravelで最速にAPIサーバーを作成する(3ステップ)
- 3.8. 【PHP8.4】便利な配列検索関数array_find()が追加される
- 3.9. API Gateway で転送したサーバでリクエスト元のIPアドレスを取得
- 3.10. Repositoryパターンを理解した気になる
- 3.11. Laravelでジョブとキューを活用する方法
[PHP] xmlを読み込み、連想配列に格納する
### PHPでxmlを読み込み、連想配列に格納する
– chatGPTだと回答が不安定なので自分用にメモ。
“`
$xml = simplexml_load_string(file_get_contents(‘https://target.xml’), ‘simpleXMLElement’, LIBXML_NOCDATA | LIBXML_BIGLINES);
if ($xml === FALSE) {
die(“Failed to parse XML data.”);
}
$ary = json_decode(json_encode($xml));
“`
Laravel インストール
# はじめに
こんにちは。@bdrccです。最近色々ありまして、8年以上使っていた MacboorAir を新調しました。
他のソフトウェアのインストール中、「あ、Laravelいけるかも」と気づき、インストールを試みました。これから勉強したいという方向けに、メモを残しておきます。
# 環境
– MacbookAir M3チップ
– MacOS 14.3 Sonoma# 手順
### 1:PHP(MAMP) インストール
下記のサイトからインストールします。
OSの種類が違う場合は、バージョンに合わせてインストールしてください。https://www.mamp.info/en/downloads/
### 2:Homebrew インストール
下記サイトからコードをコピーして、ターミナル上で実行します。
https://brew.sh/ja/
私の場合は
“`:terminal
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/instal
RockyLinuxでPHPをアップグレードする(8.2→8.3)
[PHPに脆弱性が発見された](https://www.ipa.go.jp/security/security-alert/2024/alert_20240705.html “PHPの脆弱性(CVE-2024-4577)を狙う攻撃について”)ということなので、使用中のPHPをチェックしてみた。
“`
# php -v
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies
“`
上のページによると影響をうけるのが
>PHP 8.1.29より前の8.1系
PHP 8.2.20より前の8.2系
PHP 8.3.8より前の8.3系らしいので、急遽アップグレードをすることに。
“`
# dnf -y upgrade php
CakePHP4でDynamoDBを参照する
## はじめに
DynamoDBを利用する際に、CakePHPとDynamoDBの接続に関する記事はバージョンが古かったり、作成するファイルが多かったりして、DB接続に手こずったため備忘録として今回記事にしました。
## この記事でやること
CakePHP4を用いてDynamoDBに接続し、テーブル情報を取得する。## 前提
– EC2を利用しています
– OSイメージ:Amazon Linux 2 Kernel 5.10
– CakePHPのバージョン: 4.2.12
– nginx: nginx/1.22.0
– PHPのバージョン: PHP 7.4.33 (cli)
– PHP-FPM: PHP 7.4.33 (fpm-fcgi)
– AWS SDK for PHPのバージョン: 3.257## AWS側での準備
### DynamoDBでテーブル作成
AWSコンソールのホーム>DynamoDB>テーブル>テーブルの作成から適当なテーブルを作成します。
### AWS SDKのインストール
AWSを操作するときはWeb上からコンソールを使って操作してい
Laravelカスタムバリデーションの基礎と活用方法
## はじめに
今回はLaravelのカスタムバリデーションの基礎と活用方法について解説していこうと思います
Laravelのバリデーション機能は非常に強力ですが、プロジェクトの要件によってはカスタマイズが必要になることもあります
そんな時に作ると便利なカスタムバリデーションを活用してみましょう## Laravelのバリデーション機能
まず、Laravelの基本的なバリデーションはデフォルトで多くのバリデーションルールを提供しています
例えば`required`、`integer`、`string`、`email`、`min`、`max`などの一般的なバリデーションルールがあります
これによりフォームデータの検証を簡単に行うことができます
“`php
$request->validate([
‘name’ => ‘required|string|max:255’,
‘email’ => ‘required|email’,
‘age’ => ‘nullable|integer|min:18’,
]);
“`## カスタムバリデーションルールの作成手順
### カス
CircleCIの公式イメージ「cimg/php:8.0」でImageMagickを使う方法
# 結論
以下を実行前に
“`yml
– run: sudo apt-get install -y imagemagick libmagickwand-dev
– run: sudo pecl install -f imagick
“`# 背景
ImageMagicを使ったテストがCI上で通らない問題がありました。
その時のエラーがこちらです。
“`
ImageMagick module not available with this PHP installation.
“`
その時の `config.yml` は以下でした。“`yml
– run: sudo apt-get install -y imagemagick
– run: sudo apt-get install -y php-imagick
“`# なぜ動かなかったのか
## 1. `libmagickwand-dev` をインストールしていない。
` libmagickwand-dev` は、ImageMagickを他のプログラム(今回だとPHP)から利用するための開発用ライブラリ。これがないと
Laravelでアクセス制限等を行うミドルウェアの活用法
## はじめに
ミドルウェアはリクエストとレスポンスの処理の間に独自のロジックを挿入することができる便利な機能です
今回はアクセス制限を具体例として基礎知識や活用方法を記事にしていきたいと思います## ミドルウェアとは
ミドルウェアは、HTTPリクエストからコントローラまでの間に処理を加えることです(例:アクセスする際に権限のないユーザーはアクセスできないようにする)
一般的なミドルウェアの用途には、認証(先述の例)、ログの書き込み、[CORS(Cross-Origin Resource Sharing)](https://qiita.com/att55/items/2154a8aad8bf1409db2b#cors-%E3%81%A8%E3%81%AF)の設定などがあります## Laravelでのミドルウェアの作成方法
Laravelでは、以下のコマンドを使用して新しいミドルウェアを作成できます
“`bash
php artisan make:middleware {作成するミドルウェアの名前}
“`今回は下記のように作成します
“`bash
php artisan
エンジニア2年目!適切なコメントとは? ~クリーンコードを書くために!~
こんにちは!
クリーンコードについて学習している
エンジニア2年生の元公務員エンジニアのガッキーです!業務中に先輩から
– 「このコメントはコード見ればわかるから要らないよ」
– 「その意図ならコメントしてほしいなぁ」
1年目はこんなことを言われて、
どうしたらいいんだぁーーーっとよく混乱していました
記事として記録したいと思います!# コメントについて意識すること🖊️
コメントを書く上で意識することは
**できるだけコードで表現して、表現できない場合だけコメントに残す**
ことだと考えています。
なぜならコメントを書いたところで実際の処理に影響しないからです。
実際のプログラムはコメントではなくコードが全てだからです。さて、ここから具体的に悪いコメント・良いコメントを見ていきましょう!
# 悪いコメント😣
さっそく悪い・不要なコメントを見ていきましょう!
## 当たり前のことは書かない
ついついやってしまいがちなので、
頭に叩き込んでおきたいこと、**当たり前のことはコメントしない**です。
以下の4つ例は
1. パッとみれば分かる
2. 意味
【備忘録】【MAMP】PHPのタイムゾーンの設定
MAMPのタイムゾーンを日本時間に設定するやり方をメモしておきます。
※変更する時はサーバーをストップさせた状態でやること。1. PHPのバージョン確認
MAMPを開いて、「PHP version」からバージョンを確認します。
![スクリーンショット 2024-07-09 15.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827365/15275194-757e-f38d-b6cb-4ac78dd01bce.png)
2. php.iniを開く
ファイルの場所は「Application/mamp/bin/php/php××.×/conf」配下にあります。
※「××.×」は「1」で確認したバージョン3. date.timezone
「date.timezone」の箇所を「”Europe/Belrin”」→「”Asia/Tokyo”」に変更し、
コメントアウトされてい
GroupSession WebAPIを使ってPHPで施設の予約内容を取得する
:::note info
APIの概要は「無料版GroupSessionの設計書(WEB API 仕様書)」をダウンロードしてください。
:::
例として今日の設備予約内容を取得する。※取りあえず動くことだけを目的としているので「ここがおかしい」「こうしたほうがよい」などあればお知らせください。
# 準備
GroupSesseion のインストールや初期設定は割愛。1\. admin 以外の管理者ユーザーを1つ作成する。
2\. GroupSesseion のプラグインマネージャで「WebAPI」を「使用」にする。
3\. WebAPI の管理者設定 ⇒ Web API基本設定 ⇒ トークン認証を「使用する」
4\. WebAPI の管理者設定 ⇒ Web APIトークン管理 ⇒ トークン発行。1で作った管理者ユーザーを選択してトークンを発行する。生成されたトークン文字列は、このあとすぐに使います。
# 実装
## 施設名と施設SIDを取得する
“`sample1.php
LaravelでのCSRF除外設定について
# LaravelでのCSRF除外設定について
先日、PHPでLaravelを用いた勉強をしていた際、LINE MessagingAPIを導入した時にwebhookにアクセスが通らないという問題が発生しました。解決まで少し時間がかかったので、備忘録として記事を書いておきます。
## 問題の発生
LINE MessagingAPIを導入する際、POST通信を行うためにCSRFから除外する必要があります。通常、その除外するURLを設定するファイルは `app/Http/Middleware/VerifyCsrfToken.php` の中に記述します。しかし、このファイルが見当たりませんでした。プロジェクトファイルの作成時にミスったかと思い、手動で作成してみましたが、それでも問題は解決しませんでした。
## 解決策
シンプルにリサーチ不足でした。Laravel Ver.11では、デフォルトで `App\Http\Middleware\VerifyCsrfToken` がなくなるとのことです。そのため、`web.php` に直接記述する方法を取りました。以下の通りです。
“`ph
Google Apps ScriptでPHPのHmacSha256ハッシュを作成しようとしたら沼った話
# はじめに
あと1年ほどでサービスが終了してしまうLINE Pay。https://pay.line.me/jp/developers/apis/onlineApis?locale=ja_JP
今回焦点を当てたのは、LINE Pay APIの認証方法で使われている「HMAC-SHA256」ハッシュ作成方法です。
この方法を参考にした認証方法をサービスに組み込んだのですが、Google Apps Scriptから利用するときは工夫が必要でしたので、記事を書くことにします。
# LINE Pay APIで利用されているハッシュの作り方
“`
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URL Path + Query String + nonce)))※ Query String : ?を除いたクエリ文字列(例 : Name1=Value1&Name2=Value2…)
“`# サービス用にカスタマイズしたハッシュの作り方
“`
Signature = B
Laravelのキューを並列処理させるためのsupervisorの使い方
## はじめに
Laravelのキューは同じプロジェクト配下のジョブを実行させるのには便利ですが、並列処理を行うにはSuperVisorというプロセス管理ツールが必要です
本記事ではLaravelのキューを並列処理するためのSupervisorの基本的な知識と設定方法を詳しく見ていきます## Supervisorのインストール方法
UbuntuやDebianではaptでインストールできます
“`sh
sudo apt-get update
sudo apt-get install -y supervisor
“`バージョンが確認できればインストール完了です
“`sh
supervisord -v
3.3.1
“`## Laravelのキュー設定
次にLaravelのキューを設定します`.env`を編集して、キューのデフォルトドライバーを設定します
“`env
QUEUE_CONNECTION=database
“`次にキューテーブルを作成します
“`bash
php artisan queue:table
php artisan migrate
“`
【PHP】マルチバイト文字をバイト数を指定して取得する場合は、mb_strcut()を使うと良い
## はじめに
業務でマルチバイト文字をバイト数を指定して取得する機会があり、そのときバイトの関係で文字化けしてしまったので、調査した結果を書いておきます。
## コード
“`test.php
【Drupal/EC2/Slack/Qiita】QiitaトレンドにのったらSlack通知
Qiitaのトレンドに載ったらうれしいですよね。
今回は、Qiitaが提供しているRSSを使って自身の記事がトレンド入りしたらSlackで教えてくれる機能を実装してみました。
## はじめに (すみません、実はシリーズです。)
以前、QiitaのRSSをDrupalでAPI化する実装をしてみました。
せっかく実装したAPIですので、今回さらに活躍させてみようと思います。https://qiita.com/umekikazuya/items/c20ac26b59670a72ca7b
https://qiita.com/umekikazuya/items/6379e3785b385bceabb3
https://qiita.com/umekikazuya/items/54b6ada9024f17499aa5
※ 「せっかく公式がRSSを提供しているのに、なんでAPI化するの?」っていう疑問あると思います。どれかの記事で触れてるので文句・不満がある人は読んでください。
## トレンド / Feed (Qiita公式)
どうやら、個人記事RSS/トレンド記事RSS どちらもX
Laravelで最速にAPIサーバーを作成する(3ステップ)
# 概要
LaravelでAPIサーバーを作成する際の要点をこの記事にまとめる。
以下のように実装すれば、主要観点を最短で実装できないか?と思う。# ① routes/api.php にPATHを設定
“`routes/api.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PlayerController;~
Route::prefix(‘player’)->group(function () {
Route::get(‘/’, [PlayerController::class, ‘index’]);
Route::get(‘/{id}’, [PlayerController::class, ‘detail’])->where(‘id’, ‘[0-9]+’);
Route::post(‘/’, [PlayerController::class, ‘insert’]);
Route::patch(‘/{id}’, [PlayerController::cla
【PHP8.4】便利な配列検索関数array_find()が追加される
配列で存在確認する関数といえば、どこに行っても第三引数`true`を指定しろと書かれている[in_array](https://www.php.net/manual/ja/function.in-array.php)・[array_search](https://www.php.net/manual/ja/function.array-search.php)と、`isset($array[$key])`って書いた方が短い謎関数[array_key_exists](https://www.php.net/manual/ja/function.array-key-exists.php)くらいしかありませんでした。
いずれもまあそれなりに便利ではあるのですが、たとえば正規表現検索できないなど色々と使い勝手の足りないところがありました。ということでコールバックで任意に検索できる関数を追加しようというRFCが提出されました。
既に受理されており、PHP8.4から使用可能になります。
以下は該当のRFC、[array_find](https://wiki.php.net/rfc/array
API Gateway で転送したサーバでリクエスト元のIPアドレスを取得
さくらインターネットのレンタルサーバでPHPを使って小規模なAPIサーバを作成しています。
このAPIサーバに対して、AWSのAPI GatewayのHTTP統合を利用してリクエストを転送しています。
わけあって、APIサーバでリクエスト元のIPアドレスを制限する必要が生じましたが、`$_SERVER[“REMOTE_ADDR”]`ではAPI GatewayのIPアドレスが取得されてしまいます。そこで、簡易的に実際のクライアントのIPアドレスを取得する方法を記録しておきます。`$_SERVER`変数を確認すると、`$_SERVER[“HTTP_FORWARDED”]`にリクエスト元のIPアドレスが含まれていたため、これを利用することにしました。
“`
[“HTTP_FORWARDED”]=> string(92) “by=3.235.35.99;for=11.22.33.44;host=hogehoge.execute-api.us-east-1.amazonaws.com;proto=https”“`
`for=11.22.33.44` がクライアントの実際のIP
Repositoryパターンを理解した気になる
※前提
PHP(Laravel)で実装しています。デザインパターンを勉強するときに、[こちらの記事](https://refactoring.guru/ja/design-patterns/factory-method)をよく参考にするのですが、今回はRepositoryパターンについて学ぶ機会があったのでまとめます。
デザインパターンの書籍や記事は体感Javaで書かれていることが多いイメージですが、私は業務でJavaをほとんど書いたことがないので、今回は言語はPHPで動かしてみます。
## Repositoryパターンってなにもの?
デザインパターンの1つでDDD(ドメイン駆動)について調べているとよくみる言葉です。
一言で言うと、**ビジネスロジックとデータ操作を分離する**
設計手法だと思います。要はデータベースやデータストア等のインフラ層については忘れて、ドメインに集中したいよねっていうことです。これだけだと3層アーキテクチャじゃね?と思いますが、3層アーキテクチャをデザインパータン的に落とし込んだ型の1つとしてRepositoryパターンが使えるのかなという所感
Laravelでジョブとキューを活用する方法
## はじめに
今回はLaravelのジョブとキューを活用して効率的に非同期処理を実行する方法について解説していきます
ジョブとキューの基本概念から実際の実装方法、設定、活用例、トラブルシューティング、ベストプラクティスを見ていこうと思います## ジョブとキューの基本概念
### ジョブ(Jobs)とは
ジョブは、非同期で実行される処理単位を指します
例えば、ユーザー登録時のメール送信、画像のリサイズ、データのバックアップなどが該当します
ジョブをキューに投入することで、即時ではなくバックグラウンドで処理を行うことができます### キュー(Queue)とは
キューは、ジョブを管理・処理するための仕組みです
ジョブはキューに投入され、指定されたワーカーによって非同期的に実行されます## ジョブの作成方法と実行方法
### ジョブの作成
Laravelでジョブを作成するには、以下のコマンドを実行します
“`bash
php artisan make:job SendWelcomeEmail
“`このコマンドにより、`app/jobs`配下にジョブクラスが作成されます
`