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

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

[オレオレ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 %{REQUEST_FILEN

元記事を表示

[オレオレ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

元記事を表示

【PHP/Slim4】2.軽量フレームワーク(Slim4-skeleton) GET/POSTアクセス設定

## やりたいこと
Slim4でのGET、POSTのアクセス制御を行いたい
ただそれだけだが、調べるのに時間がかかった記憶があるので、備忘録に残しておく

## Step1.サンプル環境の構築
[前回の記事を参照](https://qiita.com/miyaken3381/items/a63f70b65a01c8b77225)

## Step2.GET通信の設定
サンプル環境の初期設定は、GET通信でアクセスできるようになっている

#### app/routes.php
~~~php
$app->group(‘/users’, function (Group $group) {
$group->get(”, ListUsersAction::class);
$group->get(‘/{id}’, ViewUserAction::class);
});
~~~

この例のURL(http://localhost/[プロジェクト名]/public/users/1 )でアクセスすると、以下の実行結果が表示される
#### 実行結果

元記事を表示

【SOLID原則】単一責任の原則

# はじめに
こんにちは!ちびまろです。
SOLID原則(後述)について、**全5回**に分けて紹介していければと思っています。

# 前提条件
この記事を読むにあたり、「クラス・メソッドの意味と基本的な使い方を知っている」レベルであればスムーズに理解することができると思います。

# SOLID原則とは
さてみなさん、**SOLID原則**について聞いたことはありますか?
恥ずかしながら私は最近耳にしました😅
きっかけは[@baby-degu(baby degu)](https://qiita.com/baby-degu)さんのこちらの投稿。
私個人、設計を勉強してこなかったのもそうですが、何よりも耳にしたことがないことに驚いたので早速調べてみました。

https://qiita.com/baby-degu/items/d058a62f145235a0f007

SOLID原則とは、**オブジェクト指向プログラミングとソフトウェア設計のための5つの設計原則**のことです。
簡単に言うと、「オブジェクト指

元記事を表示

LaravelでAPIを叩いた時に[cURL error 60: SSL certificate problem]が出てきた時の対処法(本番環境非推奨)

# 発生環境
– MAMP
– PHP 8.3
– Laravel 10.35
– MySQL
– Apache

# 発生経緯
“`php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;

public function syncPost(Request $request){
$fetched = Http::get(“https://example.com/api/”);
return response()->json([“response” => 200]);
}
“`
Laravelを用いて上記のようなコードでAPIを叩いたところ、以下のようなエラーが出た。
“`
cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) f

元記事を表示

超キツキツ案件を乗り越えるための技術スタック

# 自己紹介
– 大分県生まれ大分県育ち東京都在住(帰省中)
– スタートアップ企業のCTO
– フリーランスエンジニアとしても活動中

# 結論
**案件によって大幅に変わる**

というのは嘘ではありませんが、今回は請負開発かつ社内システム開発(…つまりエンドユーザーが限られている開発)について紹介します。

# 前提
– デザイナーなし
– エンジニアが1人で全て開発
– Web系システムを開発
– 開発期間 1ヶ月~3ヶ月

## 提案1
– フロントエンド
– Typescript
– React
– Material UI

– バックエンド
– PHP
– Laravel

## 提案2
– フロントエンド
– Typescript
– React
– Material UI

– バックエンド
– Django4
– Python3

# React×TypeScript×MaterialUIを採用するワケ
– Material UIを用いることで → 綺麗なUIを最低限の知識で

元記事を表示

【nl2br】Laravel Bladeテンプレートで改行を表示する方法

## 環境
– macOS Ventura 13.6
– PHP(8.1.27)
– Laravel(9.43.0)
– Node.js(18.17.1)
– Visual Studio Code

## コード
bladeテンプレート内で以下のコードを入力すると改行が出力されます。
(ユーザーが送信した情報をvalueという変数で受け取り、textというデータを取得することにします。)
“`
{!! nl2br(e($value->text)) !!}
“`

## 解説

### e関数
`<,>,&` などの特殊文字列を安全なエンティに変換するための関数です。
今回の場合
“`
{!! nl2br($value->text) !!}
“`
でも動きますが、セキュリティリスクの観点から記述する必要があります。

### nl2br関数
PHP標準の関数で、改行文字`\n`を改行タグ`
`に変換するための関数です。

### {{ !! !! }}
Bladeテンプレートの記法でHTMLをエスケープせず、そのまま出力することができます。

元記事を表示

【Laravel】partitionメソッドで配列を分割しよう

## 概要

知らなかったメソッドがあったので紹介
以下のように、条件を満たしている物が格納されている配列と、条件を満たしていない物が格納されている2つの配列が生成されっます

“`php:例
$collection = collect([1, 2, 3, 4, 5, 6]);

[$underThree, $equalOrAboveThree] = $collection->partition(function ($i) {
return $i < 3; }); $underThree->all();

// [1, 2]

$equalOrAboveThree->all();

// [3, 4, 5, 6
“`

## まとめ

自分は今までwhereなど使って冗長に書いてたので使っていこうと思います

元記事を表示

Laravel Breezeを使ったら簡単に認証機能を実装できるらしい

# プロジェクトを作成〜Breezeインストールまで
“`bash
composer create-project laravel/laravel breeze-sample

composer require laravel/breeze –dev
“`

# BreezeをインストールしたらArtisanコマンドでBreezeの動作に必要なコード群を生成する
“`bash
php artisan breeze:install
“`

route/web.phpにコードが生成されているらしいので確認してみる
“`php

元記事を表示

Laravel始めてみる

# Laravelの特徴
– 学習コストの低さ
Laravelの最大の特徴は**学習コストの低さ**です。何がどこに保存されているのかわかりやすいフォルダ構成と、プロジェクトの設定が目的ごとに管理されているので情報を探しやすくなっています。また、公式ドキュメントの情報もバージョンごとにまとまっており、欲しい情報が探しやすくなっています。

# MVCパターン

名前 説明
Model ビジネスロジックやデータベース操作などを担当
View HTMLなどのレスポンスボディの生成を担当
Controller リクエストを受け付け、モデルとビューの橋渡しを担当

# コマンドによるプログラム作成
Lara

元記事を表示

OTHERカテゴリの最新記事