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

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

【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をエスケープせず、そのまま出力することができます。

元記事を表示

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

元記事を表示

EC-CUBE2系で「読み込み専用」のセッションを利用する

## 前書き

EC-CUBE2系を使っていて、結構悩ましいのがセッション周りの制御ですよね。

排他制御周りで、↓の件があったりします。
http://svn.ec-cube.net/open_trac/ticket/571

EC-CUBE 開発フォーラムでも、その関係のやりとりが見当たります。

[セッション変数の排他制御に不具合を見つけたのですが・・・](https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=5090&forum=1)

[セッション排他制御でのバグについて](https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=8247&forum=2&viewmode=flat&order=ASC&start=10)

排他制御する最も簡単な方法は、セッション管理をファイルにして、PHP標準のセッション管理(SessionHandler)に乗っかる方法(少しread周りはいじる)ですが、ファイルではない方法でセッション管理をしたい場

元記事を表示

Laravel Intervention Imageが使えない

Laravelに
“`zsh
composer require intervention/image
“`

Intervention Image
をインストール後、
“`php:config/app.php
‘providers’ => ServiceProvider::defaultProviders()->merge([

Intervention\Image\ImageServiceProvider::class,
])->toArray(),

‘aliases’ => Facade::defaultAliases()->merge([

‘Image’ => Intervention\Image\Facades\Image::class,
])->toArray(),
“`
を追加しましたが、
“`
Class “Intervention\Image\ImageServiceProvider” not found
“`
というエラーが発生し使用できません

元記事を表示

雑記

## 良いコードとは
* 他人が見て理解しやすいコード
* 将来の自分が見て理解できるコード(過去の自分に感謝できるコード)

もちろん、オブジェクト指向の知識がある前提。
ドメイン知識はコードに収めるように書く。つまり、コードを読めばドメイン知識が得られるように書く。
→ ドメイン知識は変化が激しい。よって、ドメイン知識に係る処理も頻繁に変更できるように、アーキテクチャ及びデプロイ環境を整備する必要がある。

## Webアプリフレームワーク
Webアプリに必要な機能は凡そ出揃っている。下記の機能をクラスで明示的に実装すればそれはもうフレームワークと言ってよいと思う。
* URIルート処理・ディスパッチャー(フロントコントローラーや.htaccess)
* リクエストの処理
* バリデーター
* 出力(HTML・JSON・他)の処理(テンプレートエンジンを含むView系クラス)
* セッション管理
* 永続データの制御(ORMを含むModel系クラス)
* 環境別設定管理(.envやconfig)
* 定数管理(Enum含む)
* グローバル関数(Helper系)
* 認証
* 認可

元記事を表示

PHP フレームワーク作成の基礎

## 必要なクラス
* Request.php
* Validator.php
* View.php
* Dispatcher.php
* Route.php
* Config.php
* Helper.php
* Controller.php
* Model.php
* autoLoader.php

## テンプレートエンジンの選択
* 使用しているエディタの整形機能を阻害しないものを選ぶ
* 古いテンプレートなどは整形すると動かなくなる場合がある
* 成型方法が統一されていないとgitなどのバージョン管理システムを導入する場合に、整形方法の違いが差分となって現れ、変更箇所が特定しにくくなる。

## 公開ディレクトリとドキュメントルート
* フレームワーク内で公開ディレクトリはpublicなどとしてディレクトリを分ける
* ドキュメントルートにはpublicのシンボリックリンクを張ると可用性が向上する

## フロントコントローラーとページコントローラー
* フロントコントローラー
* ページコントローラー

## ディレクトリ構成(参考はLaravel)
* a

元記事を表示

2023年のEC-CUBEを振り返る

EC-CUBE コミュニティマネージャーの梶原です。

EC-CUBE Advent Calendar 2023 ラスト(25日目)は、毎年恒例となりました、今年2023年の振り返りをしたいと思います。

コロナも第5類に分類され、かなり日常を取り戻した感のある1年でしたね。
私個人としても、今年はリアルイベントにも複数参加、登壇もさせていただき、リアルで多くの人と会える喜びを大いに感じることができた1年でした。今年の漢字が「税」ということで、なかなか厳しい1年でもあったと思いますが、皆様はいかがお過ごしだったでしょうか。
まあ、そういうことで、ここからEC-CUBEの1年を振り返りをしていきますので、皆様もご一緒にこの1年を是非振り返ってみてくださいませ。

## EC-CUBE4.2

2022年にバグバウンティを行い、セキュアでクオリティの高いEC-CUBEということでVer4.2がリリースされました。今年は、そのVer4.2を更にセキュアでクオリティの高いバージョンにしていくために、3回もバージョンアップしました。EC-CUBEが年に3回バージョンアップすることもなかなかない

元記事を表示

【初心者向け】CRUD機能の責任範囲の考え方

これは[株式会社マイホム アドベントカレンダー2023](https://qiita.com/advent-calendar/2023/myhm)の 25日目の記事です。
記事の内容は会社の業務とは一切関係ありません。

## 前置き

最近、初心者のエンジニアさんとやりとりする機会がありまして、その中で出てきた、そういえば入門書的なものを読んでもこういった部分の考え方をフォローされることってあまりないかもしれないなぁ、という点について書いてみようと思いました。

## 前提とする状況

話の要点を絞るために使用例の多いパターン、MVCタイプのフレームワーク(Laravel)を使って、なるべくシンプルなCRUD(作成、読み出し、更新、削除)操作を行うWeb APIについて考えてみます。
シチュエーションとしては、同じチームに所属したユーザ間で記事を共有、コメントなどができるよくあるWebアプリケーションを想定してみます。

サンプルコードを簡単にするために実用性は一旦横に置いて、ユーザは必ず一つのチームに所属するという単純構造のデータベースで考えます。

![crud_db.png](

元記事を表示

PHPで名前のマスキングをする

# 環境
– php:8.1

# 対象
– 名前のマスキングをしたい人

# 対応
今回は以下のような関数を作りました
“`php:Controller.php
private function nameMasking(string $value)
{
// 正規表現を使用して文字列から空白(半角スペースと全角スペース)を取り除く(名前と苗字にスペースがあると綺麗にマスキングされないため)
$stringValue = preg_replace(“/( | )/”, “”, $value);
// 文字列を配列化
$arr = mb_str_split($stringValue);
$itemCount = 1;
$replaceValue = ”;
foreach ($arr as $item) {
if ($itemCount % 2 === 0) {
// 偶数文字目だったら●に置き換え

元記事を表示

Ubuntu 23.10(Mantic Minotaur) で PHP 3.0.18 の phpinfo を見てみたい

[php.net](https://www.php.net/)で「[Download](https://www.php.net/downloads.php)」→「[Old archives](https://www.php.net/releases/)」とリンクを辿ると、「Unsupported Historical Releases」というページが表示されます。
ふと、このページの一番下にある「3.0.x」が、最新(2023年12月25日時点)のUbuntu環境(Ubuntu 23.10(Mantic Minotaur))で動くのかが気になったので試してみました。

まずは、Ubuntu 23.10(Mantic Minotaur)のDockerコンテナを起動します。

“`
$ docker pull ubuntu:mantic
$ docker container run \
–rm \
-p 127.0.0.1:8080:8080 \
-it ubuntu:mantic \
bash
“`

PHPのインストールに必要なパッケージ群をインストールします。

“`
# a

元記事を表示

[PHP/Laravel] finalやreadonlyなクラスをモックする

# final (継承不可) なクラスをモックしたい!

不必要な継承を防ぐためにfinalキーワードをクラスに対してつけるような運用をしていると、時折テストで困る場合が出てくるかと思います。

例えば、finalキーワードがついているとモックができません。
かといってモックを可能にするためだけにfinalを外すのも気が引ける・・・

“`
$ php artisan test

FAILED Tests\Unit\BookingServiceTest > can send slack message

The class \App\Services\SlackService is marked final and its methods cannot be replaced. Classes marked final can be passed in to \Mockery::mock() as instantiated objects to create a partial mock, but only if the mock is not subject to type

元記事を表示

PHPでEclipse使用時の環境構築とデバッグ設定について

# はじめに
環境構築の手順書がなく、自由に好きなのを使っていいよという現場に入り
VSCodeで、var_dumpを都度都度書いて、デバッグするの面倒だよなーという経緯から、
Eclipseを使って進める事を決意。ただ、前の現場と違い手順書がない為、記憶を辿りながら、進めたところ、躓いたところがあったので、筆者の備忘兼ねて纏めてみました。

# Eclipseを用いた場合のメリット
・リアルタイムでの変数の中身を確認しながらデバッグができる
・var_dumpなどデバッグする為の、記載をしなくて済む

# Eclipseを用いた場合のデメリット
・環境構築が面倒。使うパソコンによって、環境構築時にエラーがでる内容が異なる。
・デバッグ時に、phpMyAdminを立ち上げているとパソコンのスペックが低い場合にフリーズする。

# 構築の手順

①下記からxamppをダウンロードし、インストール
https://sourceforge.net/projects/xampp/files/

②下記からeclipseをダウンロードし、解凍する
https://willbrains.jp/in

元記事を表示

OTHERカテゴリの最新記事