PHP関連のことを調べてみた2022年05月23日

PHP関連のことを調べてみた2022年05月23日

オブジェクト指向 自分用メモ

# 概要

– オブジェクト指向の考え方を簡単に図にしたので自分用のメモとして残す。

# 簡単なまとめ

![other__Online_Whiteboard_for_Visual_Collaboration.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/b39ee9f1-852c-6392-561a-dc577c6d01a5.png)

元記事を表示

PHP_CodeSnifferのコーディング規約をカスタマイズする方法

## 最初に
この記事は[PHP_CodeSnifferの導入方法と解説](https://qiita.com/Ken_tk/items/7c8681bf5a78f86db965)の続きになります。

## コーディング規約をカスタマイズする
コーディング規約をカスタマイズをするには
下記の場所から**各種規約ルールを書き換える**必要がある。

– [**CakePHP Code Sniffer**](https://github.com/cakephp/cakephp-codesniffer)
`vendor\cakephp\cakephp-codesniffer/CakePHP`

– [**PHP_CodeSniffer**](https://github.com/squizlabs/PHP_CodeSniffer)
`vendor\squizlabs\php_codesniffer\src\Standards`

“`xml:ruleset.xml

元記事を表示

PG見聞録 ~DB編 プリペアードステートメント~

プリペアードステートメント

プリペアードステートメントという用語について少しおさらいしておきます。
まず何らかのクエリをPrepareというメソッドを呼んだ時点でデータベース側はそのクエリをデータベース上に事前準備します。
送られてきたクエリが正しいか、またどんなものなのかをチェックしておきます。
そうすることで実行命令がきたら、準備できてますよーってすぐ実行してくれるんですね。
この状態をプリコンパイルといいます。
こうやって事前準備しておくことで、送られてきた更新の命令が準備と異なるもの(数字しか受け付けないのに文字列が飛んできたとか)が来た場合、実行はしません。
これはSQLインジェクション対策ですね。文字列が紛れ込んで不正にデータベース操作されることを防ぎます。
また事前準備したクエリは覚えておいてくれるので、同じ構文が飛んできた場合は「ああ、さっきのやつね」て感じで演算処理をいちいち行うことはないのでパフォーマンスの向上になります。
何度も同じような内容の更新処理を行う場合などは事前準備させてお

元記事を表示

[Laravel migration]開発途中で削除カラム追加になった時も同じファイルで対応したい場合の方法

## この記事について
よくLaravelの開発でDBカラムの変更を行う際に、
プロジェクトが始まった時はA〜Cのカラムだけだったんだけど、
開発を進めていくうちにDのカラムも変更しないといけなくなった・・・
だから開発開始当初につくったマイグレにカラムを追加したい。
でもマイグレをもう流してしまってDBに変更が反映されているので、
`php artisan migrate:rollback` -> `php artisan migrate`
でマイグレ流し直すと既に変更のあったカラムとマイグレに齟齬があり、
マイグレーションがエラーになる。。。
なんてことが良くある人もいるかと思います。
そんな時に思いついた解決策を今回は載せてみようと思います!

## コード
今回はカラムを削除した場合の例で記載させていただきました。
以下は製品テーブルの不要なカラムを削除するという例です。
カラムがあったら削除するという様な判別用のClosureを用意しておきそのClosureに削除対象カラムを指定してあげることで
開発中に削除カラムが追加になったとしてもこのファイルにそのカラムを追加して

元記事を表示

PG見聞録 ~php編 例外処理~

続いて例外処理について復習。
何か例外(エラー)が発生した場合次の処理に流してエラーを表示させるコードです。
エラーの持つ階層というのが肝心のようです。

“`php
method(); //tryブロックでエラーが発生するとcatchに進む

} catch(PDOException $e) { //DB関連の例外はPDOException

echo ‘PDOException’;
echo $e->getMessage();

} catch(Throwable $e) { //Th

元記事を表示

PG見聞録 ~php編 DB更新~

DBの更新処理

今回はデータベースの更新処理について書きます。
DBから情報を取ってくるのがfetchメソッドなのに対して
DBの情報をphpから更新したりするのがexecメソッドです。
execution(実行する)という意味ですね。

“`php
setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

$result = $conn->exec(‘update mst

元記事を表示

初ポートフォリオ

ポートフォリオとして作っていたブログサイトが完成したので、少し解説してみます。
YouTubeなどに載っているブログサイトだとあまり実用性がなかったので、
実際に自分でも使えるような機能を色々と付けてみました。

# 目次

[1.ブログサイト](#1-ブログサイト)
[2.使用技術](#2-使用技術)
[3.機能一覧](#3-機能一覧)
[4.ER図](#4-ER図)
[5.工夫した点](#5-工夫した点)
[6.苦労した点](#6-苦労した点)
[7.これからの課題](#7-これからの課題)

# 1. ブログサイト

完成系はこんな感じです。
ブログとしての基本的な機能は備わっています。

# 2. 使用技術

* *PHP 8.1.3*
* *Laravel Framework 8.73.2*
* *Vue.js

元記事を表示

PG見聞録 ~php編 DB操作~

DB関連の復習ということでやっていきます。
phpから操作できるPDOという機能やMySQLのクエリの書き方など、まだ不慣れなので。
twitterで見かけたエンジニアのやらかし募集のリプずーっと辿ってたんですが
やはり圧倒的に多いのはデータベース操作ミスでデータ全部吹っ飛ばしたとか
データベース関連の事故が多かったですね。そんなんやったら心臓止まりますわ。
何にしても必須スキルだと思うのでしっかり勉強しましょう。
データベース関連の知識もFEでやりましたので用語はすんなりと入ってきましたね。

phpでデータベースの値を取得する

PDO(php database object)を使うことで接続したデータベースの値を取得できる。

“`php

元記事を表示

php7.3 → php8.1へバージョンアップする方法

## 相当詰まってようやく解決
[解決した記事](https://zenn.dev/yuzuyuzu0830/articles/347b76de0ced70)

### やった事
1.“`php -v“`
現状のバージョン確認
2.“`brew install php@8.1 && brew link –force php@8.1“`
php8.1のインストールとHomebrewを8.1にリンク
3.“`open ~/.zshrc “`
パスを通すために.zshrcを開く。
開いたら、以下を追記しパスを通す。
“`zsh
export PATH=”/usr/local/opt/php@8.1/bin:$PATH”
export PATH=”/usr/local/opt/php@8.1/sbin:$PATH”
“`
4.“`source ~/.zshrc“`
パスを反映させる。

上記を行うと、“`php -v“`を再度行うとphpのバージョンが8.1へ上がっている。

元記事を表示

Laravel8 大きい変更点(ルーティング)

ふい、豚野郎です。
今日はLaravel8の大きい変更点について書いていきます。
個人的にルーティングが大きいと思うので見て行ってください。
おまけとして、CSRF対策も書いていきます。
(環境構築は事前に済ませてください)

参考:https://e-seventh.com/laravel8-call-controller/
使わせていただきます。

## 1. ルーティング
以下が従来までのルーティングファイルの記述です。

“`routes/web.php

元記事を表示

nl2br関数使用時のブラウザ画面の挙動まとめ

# 経緯
nl2br関数を文字列に適用させる際に、”と””で囲んだ際のソースコード画面およびブラウザ画面の挙動の違いを整理したかったため。

# 環境

* 言語 php 7.4.29
* ブラウザ Google Chrome
* macOS Monterey 12.1 (M1チップ)

# 検証結果まとめ

|テストケース|テスト文字列|nl2br適用|Webページでのソースコード表示|ブラウザ画面|
| :—: | :—: | :—: |:—: | :—: |
| 1 | ‘\n’| なし | 改行なし(\nがそのまま表示)|改行なし(\nがそのまま表示)|
| 2 | ‘\n’| あり | 改行なし(\nがそのまま表示)|改行なし(\nがそのまま表示)|
| 3 | “\n” | なし| 改行あり(\nが消失) |改行なし(\nが消失し、半角スペースが入る)|
| 4 | “\n” | あり| 改行あり(\nが消失し、\
タグが出現) |改行あり(\nが消失)|

# 検証コード

“`php5:検証テスト1〜4

元記事を表示

PHP 絵文字を削除

## 用途
PHPで絵文字を削除したいときに使う。
データベースに絵文字を保存したくない時などに、あらかじめ値から絵文字を削除したい時などに使う。

:::note info
4バイトの絵文字を削除するものです。(3バイトの絵文字は今回のコードでは削除できません)
:::

## 使用方法
“`php:4バイトの絵文字を削除
preg_replace(‘/[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]/’, ”, $hoge);
“`
第1引数 → 4バイトの絵文字の正規表現
第2引数 → 空にするためにクオーテーションのみ
第3引数 → 対象の値

元記事を表示

WordPress JSなしで投稿記事のループをアコーディオン表示する方法 備忘録

いちばん最初に参考にした記事:
https://webdesignday.jp/inspiration/technique/css/5316/

困ったこと

チェックボックスをフラグにするのですが、input(id=””)とlabel(for=””)を同じにしないと、チェックボックスを消した時に動作しない・・・。foreachで回している記事に連番を付けるには・・・
あれこれ試行錯誤して、できたのがPHPのループを使ってしまうこと。

解決法



[PHP/Laravel]やろうぜ、静的解析

# はじめに

## きっかけ

この話題を話そうと思ったきっかけは主に2点

– 主催している勉強会で話題になった。
– 意外と導入している企業少ない?
– 結構PHP Conferenseで定期的に話題になってる
– 2021 [https://youtu.be/-XcpNC-5P4I](https://youtu.be/-XcpNC-5P4I)
– 2021 [https://youtu.be/jDtlylId9Gk](https://youtu.be/jDtlylId9Gk)
– 2020 [https://youtu.be/1A75v3gsjZE](https://youtu.be/1A75v3gsjZE)

## 想定読者
– PHPで既存のコードによるバグに悩んでいる人
– これからプロジェクトの基盤を作る人(僕はこれだった)

# 静的解析とは?

https://ja.wikipedia.org/wiki/%E9%9D%99%E7%9A%84%E3%82%B3%E3%83%BC%E3%83%89%E8%A7%A3%E6%9E%90

>

元記事を表示

Alma Linux 8にPHP 8.1, PHP-FPM 8.1をインストール(Remi’s RPM repository)

# はじめに

Remi’s RPM repositoryを利用してAlma Linux8にPHP8.1をインストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考:[Remi’s RPM repository](https://rpms.remirepo.net/wizard/)

## サポート

本手法で導入した場合、[PHP: Supported Versions] (https://www.php.net/supported-versions.php) / [PHP: Unsupported Branches](https://www.php.net/eol.php)より、2024-11-25がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## note

– 他のPHPモジュールを入れていた場合、下記コマンドでモジュールのリセットが必要

“`shell-session
#

元記事を表示

RockyLinux 8にPHP 8.1, PHP-FPM 8.1をインストール(Remi’s RPM repository)

# はじめに

Remi’s RPM repositoryを利用してRockyLinux8にPHP8.1をインストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考:[Remi’s RPM repository](https://rpms.remirepo.net/wizard/)

## サポート

本手法で導入した場合、[PHP: Supported Versions] (https://www.php.net/supported-versions.php) / [PHP: Unsupported Branches](https://www.php.net/eol.php)より、2024-11-25がEOLになると思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。

## note

– 他のPHPモジュールを入れていた場合、下記コマンドでモジュールのリセットが必要

“`shell-session
#

元記事を表示

Alma Linux 8にPHP 8.0, PHP-FPM 8.0をインストール(AppStream)

# はじめに

Application Stream(AppStream)を利用してAlma Linux8にPHP8.0をインストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考:[RHEL8のパッケージ構成 – BaseOSとApplication Stream – 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
   [第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languag

元記事を表示

RockyLinux 8にPHP 8.0, PHP-FPM 8.0をインストール(AppStream)

# はじめに

Application Stream(AppStream)を利用してRockyLinux8にPHP8.0をインストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)
参考:[RHEL8のパッケージ構成 – BaseOSとApplication Stream – 赤帽エンジニアブログ]( https://rheb.hatenablog.com/entry/rhel8_baseos_and_appstream)
   [第4章 新機能 Red Hat Enterprise Linux 8 \| Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.3_release_notes/new-features#enhancement_dynamic-programming-languag

元記事を表示

Ubuntu 22.04にPHP 8.1をインストール(OS標準)

# はじめに

Ubuntu22.04にPHPを標準インストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## LOG

### インストール

“`shell-session
# cat /etc/os-release
PRETTY_NAME=”Ubuntu 22.04 LTS”
NAME=”Ubuntu”
VERSION_ID=”22.04″
VERSION=”22.04 LTS (Jammy Jellyfish)”
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/”
BUG_REPORT_URL=”https://bugs.launchpad.net/ubuntu/”
PRIVACY_POLICY_URL=”https://www.ubunt

元記事を表示

CakePHP4でbelongsToManyのアソシエーションのモデルに条件を記載してデータを取得する方法

# はじめに
CakePHP4を実務で仕様した際、タイトルの内容の対処法がわからず困ったので、備忘録としてこの記事に記載したいと思います。
タイトルの内容以外にも、CakePHP4のデータの結合に関してまとめておりますので、CakePHPを実務で利用している方、特に初心者の方で公式ドキュメントを読んだだけでは理解が難しいと思った方向けの記事になりますのでよろしくお願いします。

# ER図
![20220413_ER図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/419781/5841e445-a890-45ec-5dab-a66dcc7c1104.png)

私が書いた下記記事と同じものになります。
[CakaPHP4でユーザ追加時に関連するテーブルも同時に追加を行う方法](https://qiita.com/aktwelve/items/5f1844d3637b9d32bd88 “CakaPHP4でユーザ追加時に関連するテーブルも同時に追加を行う方法”)

今回は、ユーザの一覧を表示する際に、**

元記事を表示

OTHERカテゴリの最新記事