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

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

Azure AppService で Nginx と PHP のバージョンを非表示にしてみた

Azure AppService で Nginx と PHP のバージョン非表示を試してみました。

## 検証用 AppService を用意

“`bash:bash
region=japaneast
prefix=mnrwebtest

az group create \
–name ${prefix}-rg \
–location $region

az appservice plan create \
–name ${prefix}-plan \
–resource-group ${prefix}-rg \
–is-linux \
–sku B1

az webapp create \
–name ${prefix}-app \
–resource-group ${prefix}-rg \
–plan ${prefix}-plan \
–runtime “PHP|8.0”
“`

## AppService の SSH で phpinfo を作成

“`bash:bash
echo “

元記事を表示

[オレオレ10] ヘルパー関数

## 解説
この辺で開発効率を上げるために便利なヘルパー関数を作っていきます。
まずは、そのヘルパー関数が使える仕組みを実装していきます。
※ヘルパー関数はグローバル関数として扱われます。関数名は将来的にも重複しない、重複の可能性が低い名前をつけます。

今回はディレクトリのパスを返すヘルパー関数とデバッグ用の関数をつくります。

## 目次
* Helper.php作成
* path.php作成
* app.php作成
* index.php修正
* View.php修正

## Helper.php作成
“`bash
$ cd /opt/project/stampede/
$ touch supplier/stampede/Helper.php
“`
“`php:Helper.php

元記事を表示

Stripe PHP SDK 顧客にデフォルトの支払い方法をアタッチする際の手順で詰まった

## 概要

Stripeの顧客にStripe.jsを使って追加したクレカ情報のPaymentMethodIdを紐づけてデフォルトの支払い方法に設定しようとしていた。一部でめっちゃ詰まったので簡単にまとめておく。

## 前提

本記事で紹介しているコードは「コピペすれば動く」というものではない。

## エラーになるコード

下記はイケてないコードである。

“`php
/**
* 顧客に紐づくデフォルトの支払い方法を更新
*
* @param UserObject $userObject
* @param string $paymentMethodId
* @return void
*/
private function updateDefaultPaymentMethod(UserObject $userObject, string $paymentMethodId): void
{
$this->makeStripeClient();
try {
// NOTE: 顧客と支払い方法を紐づけ
$this->attach

元記事を表示

blueskyの自動投稿を作ってみたくなり即興で作りました。

# blueskyの自動投稿を作ってみたくなり即興で作りました。
#### 因みにblueskyの[開発ドキュメント](https://atproto.com/community/projects#at-protocol-implementations)に記載されていたライブラリを使用しています。トライしてみて案外簡単に作れたのでライブラリに感謝だと感じました🙇。なお、自分のブルースカイアカウントのpost/3khojypfnf62zとpost/3khok6quxgj23が自動投稿(コマンドラインからの投稿)になります。

https://bsky.app/profile/taoka-toshiaki.bsky.social

![bluesky.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779064/e796676b-7d15-7f5a-8607-d9325d60016f.png)

### 動作環境・sakuraれんたるサーバー・PHP8.2

### 作成手順

①アプリのパスワー

元記事を表示

laravel APIのエンドポイントを作成してリクエスト投げたが原因不明のエラーが出る

## 概要

laravelにてエンドポイントを作成し、Thunder Clientからリクエストを投げた。なんのレスポンスもない500が返された。エラーログにも何も出力されていない。laravel.logにも何も出力されていない。かなり詰まったので自分の場合の原因を載せておく。

## 原因

ControllerとRepositoryで間違えて同じクラス(インターフェース)をDIしていた。

具体的に言うとControllerとRepositoryの`__construct()`で下記のような記載が重複していた。

“`php
public function __construct(
private HogeInterface $payment,
) {
}
“`

一時的にRepository側のDIの記述をコメントアウトして当該のエンドポイントにリクエストを送ったところ問題は解決した。

## 作業の背景

本事象はリファクタ中に発生した。今までリポジトリ層でDIして呼び出していたインターフェースをコントローラーで呼び出せるようにリファクタしていた。

元記事を表示

cakephpを簡単に触ってみる

### はじめに
仕事でcakephpを使うことになりましたので、実際にcakephpを使ってみたいと思います!

### cakephpとは
phpで開発されたフレームワーク。MVCアーキテクチャを採用していてRuby on Railsの影響を受けてる。MVCの流れを簡単に確認しましたので備忘録も兼ねてまとめます。

### cakephpをインストール
とりあえず下記のコマンドでcakephpをインストール
composer create-project –prefer-dist cakephp/app:4 BlogApp

ディレクトリ構成はこんな感じです

BlogApp
|-.github
|-bin
|-config
|-database
|-logs
|-plugins
|-resources
|-src
|-templates
|-tests
|-temp
|-vendor
|-webroot
|-.editorconfig
|-gitattributes
|-.ignore
|-.htaccess

元記事を表示

PHPUnit: dataProvider の使い方

こちらと同様のことを行いました。
[PHPUnit入門①](https://note.com/88gram/n/ncbbd02618f5c)

  1. プロジェクトの作成
  2. “`bash
    $ mkdir test01
    $ mkdir test01/src
    $ mkdir test01/tests
    $ cd test01
    $ touch phpunit.xml
    $ touch src/Calculator.php
    $ touch tests/CalculatorTest.php
    $ composer require –dev phpunit/phpunit
    “`

    フォルダー構造

    “`text
    $ tree -L 2
    .
    ├── composer.json
    ├── composer.lock
    ├── phpunit.xml
    ├── src
    │   └── Calculator.php
    ├── tests
    │   └── CalculatorTest.php
    └── vendor
    ├── autoload.php
    ├── bin
    ├─

元記事を表示

[オレオレ09] MVCのC コントローラー

## 解説
前回はフロントコントローラーですべてのリクエストを index.php に集約しました。
結果、index.phpに全ての機能を実装するのは非現実的であることが明らかになりました。
今回はindex.phpから個別の処理部分を分離して各クラス(コントローラー)で管理するようにします。
例としてユーザー管理機能を実装していきます。

## 目次
1. ディレクトリ再構成
1. .htaccess修正
1. Request.php修正
1. ディスパッチャークラス作成
1. Httpクラス作成
1. コントローラー(親)クラス作成
1. ユーザーコントローラー作成
1. create.html修正
1. index.php修正
1. ブラウザで確認

## ディレクトリ再構成
“`:現在の構成
stampede/
public/
.htaccess
index.php
supplier/
stampede/
App/
Http/

元記事を表示

[オレオレ08] フロントコントローラー

## 解説
前回の問題点でほぼ同じ内容のエントリーポイントを機能の数だけ用意しなければいけないというものがありました。
ほぼ同じということは共通部分が多いということです。共通部分を使いまわす仕組みがあれば1回書くだけで済ますことができます。
今回はフロントコントローラーという仕組みを使ってエントリーポイントを index.php に集約します。

## 目次
* .htaccess作成
* index.php修正
* create.html修正
* 不要となったファイルの削除
* ブラウザで確認

## 問題点
* GETパラメータに悪意のある値を埋め込まれる脆弱性がある
* index.phpに全ての機能を実装するのは非現実的

## .htaccess作成
“`bash
$ cd /opt/project/stampede/
$ touch public/.htaccess
“`
“`

DirectoryIndex index.php
RewriteEngine On
RewriteCond %{REQ

元記事を表示

[オレオレ07] 入力フォームから登録完了画面の流れ

## 目的
* 入力フォームから登録完了画面までの流れを実装する
* CSSフレームワークを使う
※ 画面遷移だけでDB等への登録はまだ実装しません

## 目次
* create.php作成
* store.php作成
* thanks.php作成
* create.html作成
* thanks.html作成

## 問題点
* ほぼ同じ内容のエントリーポイント(create.php, store.php, thanks.php)を毎回作らなければいけない。
* HTMLテンプレートの共通レイアウト(head, header, footer)を毎回記述しなければならない
* エントリーポイントをブラウザから直接実行できてしまう
## 参考
* [はじめに · Bootstrap v5.3](https://getbootstrap.jp/docs/5.3/getting-started/introduction/)

## create.php作成
“`php:create.php

元記事を表示

[オレオレ06] 転章 オートローダー

## 解説
前回のディレクトリ再構成の結果 index.php の require で指定するクラスファイルのパスが長くなってしまいました。長い名前は短いものに比べて憶え辛く脳の負担になります。

また、機能が増えるにつれてファイルを require する機会も増えていくことでしょう。requireは呼び出された時点でファイルを読み込みます。スクリプトの分岐などで結果として読み込む必要のないファイルも読み込むことになります。
このような状況はリソースを消費しパフォーマンスの低下の一因となりかねません。

new したときだけファイルを読み込む。… オートローダーの出番です。

## 目次
1. オートローダークラス作成
1. Request.php修正
1. View.php修正
1. index.php修正

## オートローダークラス作成
下記の記事を参考にしました。
[オートローダはなぜ名前空間がいいのか](https://qiita.com/ukkz/items/5608ee951b367327ecff)
“`php:autoLoader.php

元記事を表示

[オレオレ05] 転章 vendorディレクトリ

## 解説
これまでに作ってきたクラス(Request.php, View.php)はウェブアプリケーションにおける基幹部分であって、たいていのウェブアプリケーションに不可欠な処理を実行します。
このような不可欠な処理はプログラマーの脳負担を減らすためにも透過的であることが望まれます。

透過的にする(脳の意識から遠ざける)工夫のひとつとしてディレクトリを分けて管理します。

今回は supplier/ という名前のディレクトリを切ってそこで管理します。
(vendor/ にしないのは名前の重複を避けるためです)

## 目次
1. ディレクトリ再構成
1. index.php 修正

## ディレクトリ再構成
“`:現在までの構成
stampede/
public/
index.php
views/
hello.html
Request.php
View.php
“`
“`:修正後の構成
stampede/
public/
index.php
views/
hello

元記事を表示

[オレオレ04] Viewクラスを作る

## 目的
* htmlとphpのコードを分離して可読性を高める
* htmlをテンプレート化して可用性を高める
* htmlspecialchars()でタグの埋め込みを無効化する

## 目次
1. Viewクラス作成
1. htmlテンプレート作成
1. index.php でViewクラスを使う

## Viewクラス作成
“`bash
$ cd /opt/project/stampede/
$ touch View.php
“`
“`php:View.php

元記事を表示

[オレオレ03] リクエストを処理するクラスを作る

## 目的
* リクエストの処理を分離することでリクエストに起因するエラーを封じ込める

## 目次
1. Requestクラスを作る
2. index.php で GETパラメータを取得する
3. ブラウザで確認する

## Requestクラスを作る
“`bash
$ cd /opt/project/stampede
5 touch Request.php
“`
“`php:Request.php

元記事を表示

[オレオレ02] シンボリックリンク

## 目的
* URLとディレクトリパスを分離することで可用性を高める
* 公開ディレクトリをpublicに絞ることで意図しないファイルの公開を防ぐ

## 目次
* プロジェクトルートを作る
* 公開ディレクトリを作る
* ファイルを移動する
* シンボリックリンクを張る

## プロジェクトルートを作る
“`bash
$ mkdir -p /opt/project/stampede
“`

## 公開ディレクトリを作る
“`bash
$ mkdir /opt/project/stampede/public
“`

## ファイルを移動する
“`bash
$ sudo mv /var/www/html/stampede/index.php /opt/project/stampede/public/
$ sudo chown [user].[group] /opt/project/stampede/public/index.php
“`

## シンボリックリンクを張る
“`bash
$ cd /var/www/html
$ sudo rmdir stampede
$ s

元記事を表示

[オレオレ01] PHPでHelloWorld

## 目的
まずは HelloWorld から!

## 目次
1. 前提
1. index.phpファイルを作る
1. コードを書く

## 前提
* ドキュメントルート: /var/www/html
* URL: https://192.168.56.110/

## index.php ファイルを作る
“`bash
$ cd /var/www/html
$ sudo mkdir stampede
$ cd stampede
$ sudo touch index.php
“`

## コードを書く
“`bash
$ sudo vi index.php
“`
“`php:index.php

元記事を表示

オレオレフレームワークの作り方

## はじめに
当記事はWebアプリケーションのフレームワークを自作することで、下記の達成の一助とすることを目的とします。
* 既成フレームワークの便利さを知る
* Webアプリケーションに対する知見を得る

## 目標
Webアプリケーションに必要な機能を時系列で実装して行き、最終的にMVC型のフレームワークを完成させます。

## 注意事項
* ここに記載する仕組みやコードはあくまで知見を広げるためのサンプルにすぎません。実務で使用しないようお願いします。どうしても実務で使用する場合はセキュリティやパフォーマンスその他をよく検討し、改良したうえで使用してください。

## 参考
* ディレクトリの構成や機能はLaravelを模倣しています。
* 実装を参考にした個所は個別に記載します。

## 目次(随時追加)
* [[オレオレ01] PHPでHelloWorld](https://qiita.com/tonoaki_sato/items/3f9f3914e8242452115e)
* [[オレオレ02] シンボリックリンク](https://qiita.com/tonoaki_s

元記事を表示

【Laravel Sail】PHPMyAdminを開く方法

## docker-compose.ymlにphpmyadminの情報を記述する。
“`docker-compose.yml
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
– mysql:mysql
ports:
– 8080:80
environment:
#PMA_USER: “${DB_USERNAME}”
#PMA_PASSWORD: “${DB_PASSWORD}”
PMA_HOST: mysql
networks:
– sail
“`

## Sailを再起動する。
“`
sail up -d
“`

## PHPMyAdminを開く。
以下のURLをブラウザに入力する。
“`
http://localhost:8080
“`

## PHPMyAdminにログインする。
.envファイルの`

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルアップロード編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/f0e779ed60bff2791a76)の記事で独自Exceptionの設定方法をまとめました。
今回はFlowを用いてファイルアップロードとダウンロードの実装方法についてまとめます。

# 事前知識
今回の記事はFlowにおける基本的なDB操作ができることを前提に記載しています。
以下の記事を読んでから読むことを推奨します。
[【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~](https://qiita.com/nnhkrnk/items/2b9f647d6130a098345f)
[【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~](https://qiita.com/nnhkrnk/items/739ac12036c858525e23)

# Flowにおけるファイル管理
前提として、Flowではファイルを保存する領域が2つ存在します。

|領域|用途|
|–|–|
|Storage|アップロードされたファイルが保存される

元記事を表示

2023の施策をKPTで振り返る

2023年もあっという間でした。
今年できたこと、できなかったことたくさんあります。
書けないこともありますが、振り返ってみましょう。
雑にしか書いてないので、気になるトピックがあれば、教えてください。こっそりお話します。

## PHPアプリケーションエラーの検知
今まで把握できていなかったエラーも全て取得できるようにした。
### Keep
– クライアントより先に検知できる体制に貢献
– ミスが起きやすいポイントが把握できる
### Problem
– 解決せずスルーしている検知がある
### Try
– 検知→即解消できる状態に持っていく
– Datadogとかそういうの入れる

## AWS代理店の選定
後述のAWS移管に際し、改めてゼロベースで選定した。
### Keep
– コストカット
– サポート体制強化
– 合わせて、GCP、Azureも検討し学びが深まった
### Problem
– 選定、条件交渉に悩んだ
### Try
– 活用していく

## PHPstan導入
言わずとしれたPHPの静的解析ツール。
ついに導入・運用開始しています。
### Keep

元記事を表示

OTHERカテゴリの最新記事