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

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

【最強のプルリクレビュー環境】 GitHub ActionsとPHPStanを繋げてPRのコード上に自動で静的解析のエラーが出てくる仕組みを作る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41743/c2042aa9-b266-2af3-213f-21e5d1f772e7.png)

GitHubでプルリクをレビューするとき、こんな風にコード上に勝手にエラーがあるよ!って表示されたら嬉しいなあということがあります。

わざわざCIの実行結果を見に行ってひとつひとつエラーを確認するのは面倒ですからね。

というわけで、今回は上の画像のように自動でエラーがコード上に現れて教えてくれる環境をGitHub Actionsで作りたいと思います。

## 大前提
– PHPStanがプロジェクトに導入されている
– 今回はPHPStan 1.5.4を使用して検証しています

PHPStanが入ってないと話が始まらないので、まずは入れておきましょう。

https://phpstan.org/user-guide/getting-started

## GitHub ActionsからPHPStanが走るようにする
以下の設定を入れ

元記事を表示

[ポートフォリオの技術選定について] Laravel Docker AWS GitHubActions

## はじめに
今回ポートフォリオとして、自宅の食品や日用品を管理できるような在庫管理アプリを作りました。
以下の技術を使って作成しました。
この記事では各技術の選定理由についてまとめていこうと思います。

## 使用技術
フロントエンド:HTML5、CSS、Tailwindcss2.2.15、Livewire
バックエンド:PHP7.4.15、Laravel8.34.0、Jetstream1.0
インフラ:Docker20.10.2、nginx1.18、MySQL8.0.23/phpMyAdmin、AWS EC2 ALB S3 RDS
デプロイ:GitHubActions(CI/CD) Deployer

## 技術選定理由
### フロントエンド
フロントエンドは主にTailwindcss(テイルウィンドシーエスエス)を使って実装しました。
TailwindcssはCSSのフレームワークです。

以下のような理由から技術選定。
・`ユーティリティファースト`
→CSSは使わずに`TailwindCSSが提供しているクラスのみを使用して実装`する考え方で、`クラスを追加するだけで定義

元記事を表示

PHPのexec()で正しくPythonを実行してるのに、なんかModuleNotFoundErrorになるんですけど!?

## はじめに
みなさま、PHP使っていますか。

PHPからPythonを呼び出す用事があり、やむなくPHPで外部プログラムを実行できるexec()を使いました。
自称PHPerとしては断腸の思いの決断です。

cronやシェルスクリプトなど、こういう系では**フルパス**を使うのが定石と存じ上げています。
なので
“`php
$path=”/usr/bin/python3 /…フルパス/.py”;
“`
として、exec()に渡しました。
“`php
exec($path,$output);
“`
## パスは正しいのに、動かないときがある?
ちゃんとPythonのコードは実行されていて、print文だけみたいな**簡単なコード**なら動くんです。
ちゃんと$outputにprint()などで入れた標準出力が帰ってきています。

でも本来動かしたい、少し規模の大きいコードを動かすと$outputがすっからかんに……

これはどこかでエラーが出ている可能性大なので、エラーを出させてみます。

このような形で
“`php
$path=”/usr/bin/python3 /

元記事を表示

【Laravel】SAML認証を実装する

## この記事に書いてあること
LaravelアプリケーションにSAML認証方式のSSO(シングルサインオン)を実装する

## 前提条件
Laravel側での認証機能が既に作成されていることが必須です。

## シングルサインオンとは?
1度のユーザー認証によって複数のシステム(業務アプリケーションやクラウドサービスなど)の利用が可能になる仕組みです

## SAML認証とは?
SAML(Security Assertion Markup Language)とは、SSO(シングルサインオン)環境を構築できるプロトコル(規約)のひとつです。
SSO環境を構築する方法として、有名なものにOAuth2.0認証やOpenID Connect認証などがあります。

認証方式による細かな違いは[他の技術記事](https://tech-blog.rakus.co.jp/entry/20210930/auth)などで確認してください。

また、SAML認証はOASISによって2002年に策定されたXMLベースの標準規格です。
現在の主流バージョンは2.0です。

## 実装するために使うライブラリ

元記事を表示

PHPの外部ファイルを読み込み

# 外部ファイルの読み込み
PHPでは違うファイルで書いたものを別のファイルで読み込んで出力させることができます。
その際にrequireとincludeを使います。

### requireとinclude
外部ファイル読み込み失敗したときにエラーで終了するか警告で継続するかの違いがそれぞれあります。

⚫︎“`require“`はエラー(Fatal)となり処理を停止します。
⚫︎“`include“`は警告(Warning)となり処理は継続します。

基本はrequireは処理が止まるのでこちらの方が良さそうです。

require_once();とinclude_once();というものがあり
これは1回のみ読み込むのに使います。

## requireを使う

ここでは“`common.php“`を作ります。
“`php
$practice = “外部ファイルの読み込み練習”;

function filePractice(){
echo “外部ファイル読み込み関数”;
}
“`

別のファイル“`sample.php“`を作ります。
“`

元記事を表示

PHPの関数

# PHPの関数の種類
関数とはいくつかの処理を入れておくためのものです。
PHPには2種類の関数が存在します。
組み込み関数とユーザー定義関数があります。

## 組み込み関数
***あらかじめPHPで用意されている関数***です。

ex)計算,文字の整形,配列,データベースなど
下のリファレンスで色々調べることができます。

### PHP関数リファレンス
https://www.php.net/manual/ja/funcref.php

### 注意
関数の数が多すぎて、覚えることがほぼ不可能です。
覚えるのではなくやりたいことを言語化してすぐに調べられるようになる必要があります。

## 文字列関数
それぞれの文字列関数をみていきます。

⚫︎“`strlen“`
string(文字列)とlength(長さ)を合わせて、文字列の長さです。

“`php
//文字列の長さ
$test = “test”;
echo strlen($test);

//4
“`
しかし日本語にすると9と出力されます。

“`php
//文字列の長さ
$test = “テスト”;
ec

元記事を表示

CakePHP4 部分テンプレート

ちょっとだけ悩んだのでメモ。

## 環境

PHP 8.1.4RC1
CakePHP 4.3.6

## 部分テンプレート

“`tempates/element“`以下のファイルをレンダリングする。

“`PHP:templates/content.php
element(‘content/parts’) ?>
“`

元記事を表示

Laravelで標準のUsersテーブルからテーブル名を変更して認証を行う際に修正が必要なファイル

# 環境
Laravelの公式ドキュメントの`macOSで始める`に従って環境構築。
https://readouble.com/laravel/8.x/ja/installation.html?header=Laravel%25E3%2582%25A4%25E3%2583%25B3%25E3%2582%25B9%25E3%2583%2588%25E3%2583%25BC%25E3%2583%25A9

“`console
// PHPバージョン
$ sail php –version
PHP 8.1.4 (cli) (built: Apr 4 2022 13:30:33) (NTS)

// Laravelバージョン
$ sail artisan –version
Laravel Framework 9.6.0

// npmバージョン
$ sail npm –version
8.6.0
“`

# 背景
新規システム開発でベテランエンジニアのアドバイスで、
「標準のUsersテーブルを現場で使うことはほぼない。」と言われた。

そして次のようなテーブルに変更することにな

元記事を表示

Laravel環境にPHP-CS-Fixerを導入する

# 概要

– Laravelの開発環境にPHP-CS-Fixerを導入する方法をまとめる。

# 方法

1. アプリ名ディレクトリに移動して下記コマンドを実行してtoolsディレクトリとその直下にphp-cs-fixerディレクトリを設置する。

“`terminal
$ cd アプリ名ディレクトリ
$ mkdir -p tools/php-cs-fixer
“`

1. アプリ名ディレクトリで下記コマンドを実行して、先に作成したディレクトリを指定してphp-cs-fixerのライブラリ本体をインストールする。(docker環境の場合、`$ docker-compose exec php composer require –working-dir=tools/php-cs-fixer friendsofphp/php-cs-fixer`を実行するか、PHPのコンテナに入り、アプリ名ディレクトリに移動して下記コマンドを実行する。)

“`terminal
$ composer require –working-dir=tool

元記事を表示

環境別Xdebugの設定メモ

3つの環境別の設定について書いていきます。

# 手順
※便宜上ローカル環境を「ローカル」、コンテナ内を「リモート」と表現しています。
## ①. MAMP(XAMPP):ローカルでデバッグ
MAMP(XAMPP)に基本Xdebugも付属しています。していない場合は別途インストールする必要があります。
ローカルのVSCode(PHPStorm)とローカルのXdebugでデバッグを行う方法です。

### 1. MAMP(XAMPP)のXdebug設定
php.iniに以下のコードを追加

“`php.ini
[XDebug]
zend_extension = C:\pleiades\xampp7.4.23_mb\php\ext\php_xdebug.dll
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_port = 9003
“`
※zend_extension の設定値は一例です。環境によって変わります。

### 2. VSCode(PHPStorm)の設定
VSCodeは拡張機能「PH

元記事を表示

PHPの引数、関数(初学者向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 関数
“`関数“`とは英語で“`function(機能)“`と言います。
書き方は

元記事を表示

WordPressのテーマをコーディング標準チェックできるようにする(phpcs)

# はじめに

WordPress でもコーディング標準チェックを行いたい!と思ったので、導入することにしました
~~本当は 1週間後の IPA の応用情報技術者試験の勉強から逃げたくなったからですが~~

# バージョン

| | バージョン |
| ————– | ———– |
| docker desktop | 4.6.1 |
| Windows 11 Pro | 22H2 |
| Ubuntu | 20.04.4 LTS |
| PHP | 8.0.11 |
| WordPress | 5.8.1 |

# 前提

以下の記事の続きです

https://qiita.com/rowpure/items/cc71c6885979bc592251

環境は Docker + NGINX + WSL2 とします
今回紹介するソースは、以下のリポジトリにあります

https://github.com/q23isl

元記事を表示

【Laravelエラー】Failed to open the referenced table

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況
“`php artisan migrate“`実行したときに下記のエラー。

“`
Failed to open the referenced table ‘users’ (SQL: alter table `posts` add constraint `posts_user_id_foreign` foreign key (`user_id`) references `users` (`id`))
“`

## 原因
外部キーを設定しているmigrationファイルがあるときに、「“`posts“`テーブルが“`user_id“`を持っている状態で、“`users“`テーブルを参照したいけどできない」というエラー。
migrationファイルを生成したときの日付が“`users“`テーブルより“`posts“`テーブルが先になってしまっていた。

## 解決法
migrationファイルの日付を親ファイルが子ファイルより先になるように修正する。

元記事を表示

PHP トレイト

# 概要
コードを再利用するための仕組み。

# 例
## 定義
“`php
trait Move {
function fowerd() {
// 処理
}

function backwerd() {
// 処理
}
}
“`

## 使用
“`php
class Human extends Animal {
use Move;

public function walk() {
$this->fowerd();
}
}
“`

# 詳細
トレイトは単一継承の制約を減らすために作られたもの。
メソッド群を異なるクラス階層にある独立したクラスで再利用できるようにする。
**多重継承**や**mixin**にありがちな問題の回避ができる。

クラスに似ているが、トレイトは単に機能をまとめるだけもの。
**インスタンスを作成することはできない**。

トレイトを活用すれば、継承しなくてもクラスのメンバーに汎用メソッドを追加できるようになる。

# 参考
[PHP: トレイト](https://www.php.net/manua

元記事を表示

PHPで連続して出現してくる文字列を成敗する方法

# 正規表現??とか意味わからん
やりたいこととして、連続して出現してしまう文字列を一つに統一したかった。
↓みたいなやつを….
“`
$fuck = ‘test1,,,test2,,,,,test3,,test4,test5,,test6’;
“`
こうしたい
“`
$fuck = ‘test1,test2,test3,test4,test5,test6’;
“`
preg_replaceってやつを使ったらいけた。
[preg_replace](https://www.php.net/manual/ja/function.preg-replace.php)
読んでみたけどなんか難しいことばっかり書いてあるで
なんとか喰らいついて書いてみた

“`
$fuck = preg_replace(‘|,+|’, ‘,’, ‘test1,,,test2,,,,,test3,,test4,test5,,test6’);
“`

こんな感じでやればカンマ区切りで配列にできたのでうれしい。

“`
$fuck = explode(‘,’, preg_replace(‘|,+|’,

元記事を表示

PHP 任意の文字、文字数でランダムな文字列を生成する

## コード

“`php:random.php

元記事を表示

ブログ編集画面での画像表示

# 目次
[1.元の記事にサムネイルがあるかどうかで分岐する](#1-元の記事にサムネイルがあるかどうかで分岐する)
[2.条件付きレンダリング](#2-条件付きレンダリング)
[3.削除後の動き](#3-削除後の動き)

Laravel + Vue.js を使ったブログ開発で、
**ブログ編集画面に編集前記事のサムネイルを表示させる機能**を作ったのでアウトプットとして記事を書いてみました。

編集画面で、やっぱりサムネイルを別の画像に変更したい!という時ってありますよね!
**編集画面に画像を表示させ、削除して別の画像に変更する**という機能を付けてみました。

# 1. 元の記事にサムネイルがあるかどうかで分岐する

まずは元の記事にサムネイルがあるかどうかで条件分岐します。
**サムネイルがないのに、サムネイル変更ボタンがあったら不自然ですよね**

というわけで、
**サムネイルが無い場合 -> サムネイル選択ボタン**
**サムネイルがある場合 -> サムネイル表示 & サムネイル変更ボタン**
という仕組みにしていきます!

# 2. 条件付きレンダリング

Vue を使

元記事を表示

dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicudata.69.dylib で動かなくなったmacのPHPを救出した

もともと[個人ブログ](https://blog.from-garage.com)に書いてた記事ですが、一問一答系の内容なのでQiitaに逆輸入。

## PHPがバージョンすら返してくれないんだが

普段の業務や個人開発ではもっぱらdockerを使っていて、PCに直に入っているPHPとかはあまり触ることがありませんでした。
一方で、当方vimを使っていて、たまに単純なコードを確認するのに[quickrun](https://github.com/thinca/vim-quickrun)を利用しています。
vimはdocker内で起動しているのではなくてホスト側から起動しているので、quickrunをするとホストのPHPが使用されます。

今回もなんの気なしに新規バッファにコードを貼り付けて`:Quickrun`を実行しました。
すると

“`bash
dyld[77982]: Library not loaded: /usr/local/opt/icu4c/lib/libicuio.69.dylib
Referenced from: /usr/local/Cellar/php/

元記事を表示

PHPの繰り返し処理(初学者の方向け)

# はじめに
PHPの基本をこの記事で書いていきます。
PHPの初学者の方向けの記事です。実際にコードを書いたりして
実際の挙動などを確認してみてください。

# 環境
MAMPをインストールします。
エディタはVScodeです。

# 環境構築方法
MAMPの環境構築が動画でわかりやすく載っていました。
PHPで出力する時はMAMPで出力するのでこちらを確認してください。

# バージョン
以下のバージョンで挙動を確認しました。

![スクリーンショット 2022-03-31 1.32.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/a3a83f23-1ba1-6e36-7d77-7d8531989048.png)

# 繰り返し処理
繰り返し何度も処理がされる処理のことです。

## for文
繰り返し処理の代

元記事を表示

Laravelのログをstderrからdocker logsに出力する

# 概要
Dockerコンテナ上で動作しているLaravelのログを`docker logs`コマンドで表示させる場合の設定

# docker logs
[dockerドキュメント](http://docs.docker.jp/v19.03/engine/reference/commandline/logs.html)によると、
標準出力`STDOUT`と標準エラー出力`STDERR`にログを出すことで
docker logsにログが出てきそう。

# ロギングドライバ
Dockerにはログを外部のログ記録ソフトウェアに転送する機構が用意されている。

`docker logs`コマンドで確認できる内容は`/var/lib/docker/containers/<コンテナID>/<コンテナID>-json.log`というファイルにJSON形式で記録されている。
このJSONファイル内には`STDOUT` `STDERR`の情報も記録されている。

# 記述
config/logging.phpの`stack`の`channels`に「stderr」を記述することで、
標準エラー出力にL

元記事を表示

OTHERカテゴリの最新記事