PHP関連のことを調べてみた

PHP関連のことを調べてみた

PAY.JPの定期課金を使用してサブスクを実装

定期課金の実装を行いました。
備忘録として残したいと思います。
定期課金は単発課金と異なり、かなり処理が複雑でしたが
ドキュメントを熟読して、とってもよい経験となりました。

# 定期課金おおまかな流れ

### 1. 顧客がクレジットで定期課金を購入💳
[PAY.JPのcheck outに記載のカード情報入力フォームを用意します。](https://pay.jp/docs/checkout)
このフォームのdata属性に公開用APIKEYをセットする必要があります。

“`js

“`

## 2. PAY.JPに顧客情報・プランを作成し、アプリケーション側のDBにも必要データを保持しま

元記事を表示

【PHP】トレイトとは

## トレイトとは
「トレイト」とは、PHPにおけるコード再利用のための仕組みの一つで、複数のクラスで共有したいメソッドやプロパティを定義するもの。

## 実装例
例:
“`php
// トレイトの定義
trait Cacheable {
public function cacheMethod($key, $value) {
// キャッシュ機能を実装するコード
}
}
“`

クラスにトレイトを適用することで、トレイトで定義されたメソッドやプロパティを追加できる。
これにより、共通の機能を複数のクラスで簡単に共有でき、コードの重複を避けられる。

“`php
// トレイトの使用
class SomeClass {
use Cacheable;

public function someMethod() {
// このクラスはCacheableトレイトのメソッドを利用できる
$this->cacheMethod(‘key’, ‘value’);
}
}
“`

Cacheableというトレイトを定義し、

元記事を表示

phpMyAdminを手動で導入する方法

![php004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3668800/c8a36a9b-272b-b847-fad8-c1f29c5edffb.png)

phpMyAdminを利用した事はござざいますでしょうか。

phpMyAdminを利用する事でsqlを使用せずに視覚的にデータベースを操作できる便利ツールとります。

そこで、今回はphpMyAdminを手動で導入する方法についてご紹介致します。

下記公式サイトとなります。

https://www.phpmyadmin.net/

下記公式リポジトリとなります。

https://github.com/phpmyadmin/phpmyadmin

## phpMyAdminをダウンロードする

始めにphpMyAdminをダウンロードを実施致します。

下記コマンドを使用しドキュメントルートディレクトリに移動します。

“`
cd /var/www/html/
“`

※上記コマンドの移動パスは用途に合わせて修正下さい。

次に「

元記事を表示

【CakePHP5】自動テスト/CIとかのまとめ

# はじめに

こんにちは、エンジニアのkeitaMaxです。

CakePHPの自動テストとかをいろいろやったのでまとめです。

今までCakePHPの記事を書いてきたので、それをまとめました。

これから紹介するものが全て入っているリポジトリは以下です。

https://github.com/NiheiKeita/cake-example-app

# Docker環境を作成

Dockerを使用してCakePHPの環境を作成しました。

https://qiita.com/keitaMax/items/6152aa9fff66bee4e887

# PHPstanを使った自動テスト

PHPstanを使って静的解析をしました。

https://qiita.com/keitaMax/items/77df412e05a537571549

また、以下記事ではPHPstanをGitHubにPushしたときにテストできるようにGitHubActionsを使用しました。

https://qiita.com/keitaMax/items/6e354b9a0b7c54344fa1

下の

元記事を表示

早期リターンして認知負荷を下げよう

## はじめに
if ~ elseif ~ elseなどで複数条件を処理しているコードを、エンジニアなら誰しも一度は見たことがあると思います。

その条件が何層もネストしているコードにもお目にかかったこともあるでしょう。

今回はそういうコードを、早期リターンを使って読みやすくしてみたいと思います。

## 早期リターン実施前

“`php
/**
* ユーザーの参加資格をチェックする関数
*/
function isUserEligible($user) {
// 18歳以上の場合
if ($user[‘age’] >= 18) {
// アクティブの場合
if ($user[‘active’]) {
// サブスク契約中の場合
if ($user[‘hasPaidSubscription’]) {
return true;
} else {
return false;
}

元記事を表示

Eloquentのgetメソッドとchunkメソッドのパフォーマンスを比較してみる

## はじめに
下記の記事で大量データを扱う際は`chunk`メソッドを使った方が良いといった内容を書きましたが、実際にどれくらい良くなるかを今回は検証してみました

https://qiita.com/t1k2a/items/25f145135a16bc5e3f44

## パフォーマンステストの準備
– データベースの準備
– テスト用のデータベースを用意し、十分なレコード数を挿入します
– 今回は4000件のデータを使用します
– 環境の準備
– 同じ環境でテストを行います
– 今回はDocker+Laravel+MySQLの環境で行います
– 詳しくは下記の記事をご参照ください

https://qiita.com/ucan-lab/items/5fc1281cd8076c8ac9f4

測定項目
– メモリ使用量
– 各メソッド使用時のメモリ消費量を測定します
– 処理時間
– 各メソッドが処理を完了するまでの時間を測定します

## テストデータの使用
テストデータは下記を使用しました

https://dev.my

元記事を表示

【CakePHP5】GitHubのPush時にPHPUnitでテストする

# はじめに

こんにちは、エンジニアのkeitaMaxです。

今回は前回作成したPHPUnitをGitHubActionsでGitHub上でテストできるようにしようと思います。

前回

https://qiita.com/keitaMax/items/7327c83cea938fe124f9

# GitHubActionsのymlファイルを作成

GitHubActionsを作成します。

以前Laravelで作成したものを参考にしようと思います。

https://qiita.com/keitaMax/items/bbfecbdb73322b53bb4c

“`yml:phpunit.yml
name: phpunit

on: [pull_request]

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src
steps:
– uses: actions/checkout@v2
– name:

元記事を表示

Dockerを使ってLaravel(php-fpm + mariadb + nginx) の環境を構築したい!

# はじめに
大学のプロジェクトで環境をDockerに移動しなければいけない機会があったので,Laravelの環境を作成しました!
コンテナ内のartisanコマンド等で作成されたファイルは権限を変更しないとVScodeで直接編集でしたが、今回はVScodeで直接編集ができるように工夫しました!

# やりたいこと
php-fpm + mariadb + nginx のLaravelの環境を作成したい!

# お急ぎの方
以下のリポジトリをForkして作成したリポジトリをcloneしてください!
※ .envファイルを記述する必要あり.

https://github.com/46maru/Laravel_container

# 動作環境
– windows10
– wsl2
– VScode
– docker for windows (4.30.0)

# ファイル構成
“`
project名
┣━ docker/
┃ ┣━ app/
┃ ┣━ Dockerfile
┃ ┣━ php.ini
┃ ┣━db/

元記事を表示

Docker で PHP8.3 + Apache + Laravel + MySQL 8 + phpMyAdmin 環境を構築

[また今度](https://qiita.com/naente/items/d259ea84c172deeff7d8)が来るまでに 5年かかったゾ。

# 対象読者
– 私
– これまで XAMPP インストールして hosts 書いて httpd.conf に VirtualHost 書いてローカル開発環境を構築していたが、そろそろ Docker に移行したい私
– 上記の工程を開発メンバー各自にも行なってもらっていて、今時 Docker じゃなくてゴメンと思っていた私
– 他の Docker 環境構築記事のレベルが高すぎて理解できなかった私

# 動作確認環境
あらかじめ Docker Desktop と Composer のインストールを完了しておいてください。

## Windows
– Windows 10 Enterprise 22H2
– Docker Desktop 4.31.1
– Docker 26.1.4
– Docker Compose v2.27.1-desktop.1
– Composer 2.7.2

## Mac
– macOS Ventura

元記事を表示

AlmaLinuxにComposerの導入してみる

PHPのパッケージ管理システムとして「Composer」を利用している方は多いのではないでしょうか?

今回はAlmaLinuxにComposerの導入する方法をご紹介致します。

## PHPComposerとは

![php001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3668800/e278896c-b093-4436-534d-7ddf9d788d3c.png)

ComposerはPHPのパッケージ管理システムとなります。

依存関係の管理やパッケージのバージョン管理等を行う事が出来ます。

下記公式サイトとなります。

https://getcomposer.org/

下記githubリポジトリとなります。

https://github.com/composer/composer

## 環境

今回インストールを行う環境は以下となります。

“`
cat /etc/almalinux-release
AlmaLinux release 9.3 (Shamrock Pampa

元記事を表示

Threads API for PHP を公開しました。

# 「Thread API by PHP」とは

## 概要

* PHP で「Threads API」を扱うためのクラスとそのサンプルコードです
* GitHub リポジトリ: [mikiakira/threads_api: Threads API](https://github.com/mikiakira/threads_api)
* これは、上記リポジトリの README.md を複製 + 解説記事です

## API 発表から実装に至る経緯

* メタ公式発表: [Threads APIがついに公開](https://developers.facebook.com/blog/post/2024/06/18/the-threads-api-is-finally-here/)
* ※ 現地時間で、2024年6月18日の発表です

おそらく、PHP で実装された記事としては、[threads-Apiで投稿するための雛形 #PHP – Qiita](https://qiita.com/taoka-toshiaki/items/e606e2cfa31c6e2ed771

元記事を表示

パス部分に%2F(/)スラッシュは使えないのでクエリパラメータでパラメータを指定した

下記のようなURLでパラメータをパスで受け取ろうとして、404になった。

“`md
https://example.com/path/hoge%2Ffuga/
“`

“`route.php
Route::get(‘/path/{param}’, ‘HogeController@index’);
“`

パスでパラメータを受け取ろうとしていた。が/(スラッシュ)は予約文字ということでパスには使えないことが判明。
下記がエビデンス。
https://www.ietf.org/rfc/rfc2396.txt#:~:text=2.2.%20Reserved%20Characters

代わりに、

“`route.php
Route::get(‘/’, ‘HogeController@index’);
“`

“`HogeController.php
$request->query(‘url’);
“`

で受け取るようにした。
下記のようなURLで正常に遷移してくれるようになりました。

“`md
https://example.com/path/?url=hoge/

元記事を表示

EloquentのwithCountメソッドでリレーション先のレコード数を取得する方法

## はじめに
「リレーション先のレコードは使わないけど、取得したレコードの数は見たい」という状況が稀にあります
自分はリレーション先のカラムをidにしView側でCountしていましたが、これをModelだけで実現できる`withCount`メソッドに感動したので解説していきます

## withCountメソッドの基本
`withCount`メソッドは、リレーションシップのレコード数をカウントし、結果に追加するために使用されます
例えば、Userモデルが複数の投稿(posts)を持っている場合、各ユーザーの投稿数をカウントして取得できます
これは非常に便利です

## 基本的なwithCountの使用
ユーザーモデルとポストモデルが1対多の関係にある場合、以下のように`withCount`メソッドを使用します

モデルの定義
“`User.php
public function posts()
{
return $this->hasMany(Post::class);
}
“`

クエリの使用例
“`php
$users = User::withCount(‘posts’

元記事を表示

PHPにおける isset と !empty の違い

`isset` と `!empty` はどちらも変数の値をチェックする関数ですが、それぞれ異なる動作をします。

**`isset`**

* 変数が宣言されていて、かつ `NULL` ではない場合に `true` を返します。
* 変数の値が空文字 (“”) や数値の 0 であっても `true` を返します。
* 未定義の変数に対して使用すると **Fatal error** を発生します。

**`!empty`**

* 以下のいずれかに該当する場合に `true` を返します。
* 変数が `NULL` である。
* 変数が空文字 (“”) である。
* 変数が数値の 0 である。
* 変数が `false` である。
* 変数が **未定義** である。
* 変数に値が設定されている場合は、たとえそれが空文字や数値の 0 であっても `false` を返します。

**例**

“`php
$var1 = “”;
$var2 = 0;
$var3 = null;
$var4 = false;

var_dump(isset($var

元記事を表示

【備忘録】CakePHPのよく使うコマンド

# はじめに

こんにちは、エンジニアのkeitaMaxです。

CakePHPのよく使うコマンドを備忘録として残していきます。

# マイグレーション

### マイグレーションファイルを作成

“`
bin/cake bake migration CreateArticles created modified
“`

### マイグレーションファイルを実行

“`
bin/cake migrations migrate
“`

### マイグレーションファイルのロールバック

“`
bin/cake migrations rollback
“`

# コントローラ

### コントローラの作成

“`
bin/cake bake controller articles
“`

# モデル

### モデルの作成

“`
bin/cake bake model articles
“`

# テスト

## PHPUnit

### 全部実行する
“`
vendor/bin/phpunit
“`

### 特定のファイルだけ実行する
`tests/TestCas

元記事を表示

【Laravel】【Vue.js】プロジェクト作成手順①

# はじめに
Laravel(バックエンド)とVue.js(フロントエンド)を組み合わせたシステムを構築する
手順を記述します。

# 事前準備
以下がインストール済み・環境構築済みであること。
手順は別記事でまとめておりますので、ご参考になれば幸いです。
– PHP
– Composer
– PHPデバッグ環境構築(Xdebug・PHP Debug)

# Laravelアプリ作成手順
### ① プロジェクト用のディレクトリを作成
 ※私は「C:\work\demo」のように作成しました。
### ② Laravelプロジェクト作成
**(1) VSCodeで①ディレクトリを開く**
![アプリ作成01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2846445/898fef6d-389d-fa81-c152-e6d86331a4b3.png)
**(2) メニューバー[ターミナル] > [新しいターミナル] でターミナルを起動**
![アプリ作成02.png](https://qiita-ima

元記事を表示

amazon linux2023にphp5.6を入れたい

## 背景
既存のシステムがamazon linux2だったがもうそろそろサービスが終了するということで、amazon linux 2023に移行しますのでとりあえず既存システム同じ環境を用意してください~となり見てみたところPHP5.6が使われてるじゃないですか~~~

ほなじゃあphp入れるのにまずepel君入れますか~
“`
sudo amazon-linux-extras install epel
“`
すると
“`
amazon-linux-extras command not found
“`
amazon-linux-extras君はいないって怒られた(´・ω・`)

なななんとamazon linux 2023には搭載してないらしい…

## やったこと
epelが入れられないのでremiリポジトリからインストールを断念してソースコードを入れてビルドする方針に変えてやります
まずビルドに必要なパッケージを入れるとこから始めよう
“`
sudo yum install -y gcc gcc-c++ make automake autoconf kernel-de

元記事を表示

【PHP】Qiita/RSSフィード解析

QiitaのRSSフィード活用されていますか?
個人サイトや、推しメンの記事を確認するのに結構便利です。

↓↓ Feedの存在知らない方はこちら ↓↓

https://qiita.com/umekikazuya/feed


今回は個人用に提供されているRSSフィードをPHPで解析してみました。

公式からRSSが提供されているのに、わざわざ解析してJSON化する意味がわからない…。って思う方もいると思います。
用途は人それぞれですが、「毎朝Slack通知したい」「記録として残したい」「独自のAPIを用意して、複数のアプリで使いまわしたい」とか、まぁ役立ちそうですよね。

**「HTTP通信」をして「XMLの解析」をして「JSON化」する。**
わりと、初学者の学習にぴったりな題材な気がします。

## 使用ライブラリ
### Guzzle Http Client

HTTP通信のためにGuzzleライブラリを利用します。

https://docs.guzzlephp.org/en/stable/

## 実装例
さっそくですが実装例を紹介。
(※ 記事用に細かい例外処

元記事を表示

bluesky api php で post

参考
https://mgng.mugbum.info/1699

# blue sky で post したい

1 アプリパスワードを作成
https://bsky.app/settings/app-passwords

2 パスワードを設定

“`.env
BLUESKY_APP_PASSWORD = xxx-xxxx-xxx-xxx
“`

“`app.php
‘bluesky_app_password’ => env(‘BLUESKY_APP_PASSWORD’)
“`

続いてモデル

“`bluesky.php
class Bluesky extends Model
{

public $jwt;
public $handle;

public function __construct($handle,$password)
{
$this->handle = $handle;

$ch = curl_init(“https://bsky.social/xrpc/com.atproto.serve

元記事を表示

Laravel にてユニットテスト実行時、DBの外部キー制約を無効化する

よく忘れるのでメモ

というか調べていて初めて知りましたが、いつの間にやらLaravel標準で用意してくれていた模様

“`php
use Illuminate\Support\Facades\Schema;

// 外部キー制約を無効化
Schema::disableForeignKeyConstraints();
// 外部キー制約を有効化
Schema::enableForeignKeyConstraints();
“`

## 以前のやり方

利用しているのが MySQL だったので問題ありませんでしたが、どうやら PostgreSQL では動かないようで…

やはりLaravel標準で用意されていたらそれを使うに限りますね

“`php
use Illuminate\Support\Facades\DB;

// 外部キー制約を無効化
DB::statement(‘SET FOREIGN_KEY_CHECKS=0;’);
// 外部キー制約を有効化
DB::statement(‘SET FOREIGN_KEY_CHECKS=1;’);
“`

## 改めて使い方

元記事を表示

OTHERカテゴリの最新記事