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

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

PHPでの文字列追記は結合(.)より結合代入(.=)が圧倒的に早い

あまりにマニアックな情報

### まとめ
* 文字列追記は結合演算子(.)より結合代入演算子(.=)の方が圧倒的に早い
* つまり “`$a = $a . $b“` より “`$a .= $b“` が早い
* 文字列が大きいほど、結合回数が多いほど顕著に差が出る
* Webアプリならいずれも小さいので、ほとんどのケースでは気にしなくて良い
* エクスポートなど大量のデータを吐き出す処理では顕著に影響する(簡単に何百倍、分単位で差が出る)
* PHPはちゃんと最適化されてる

### 結合演算子(.)より結合代入演算子(.=)の違い
ほとんどの場合は結合演算子(“`$a = $a . $b“`)と結合代入演算子(“`$a .= $b“`)は同じで、単にショートハンド位の認識をされていると思う。[マニュアル](https://www.php.net/manual/ja/language.operators.string.php)でも特に違いには触れていない。
というか自分がそう思っていたが、想定以上に重いコードがあり、その調査で内部的には大きく違うことに気づい

元記事を表示

PCとスマホで投稿記事の件数を変える

## やりたかったこと

WordPressの投稿記事を
・PCでは10件表示
・SPでは3件表示

funtions.phpではなく、メインループで。

“`php:PHP
‘post’,
‘posts_per_page’ => $num,
‘order’ => ‘DESC’
);
$new_query = new WP_Query($args);
if ($new_query->have_posts()) :
while ($new_query->have_posts()) : $new_query->the_post();
?>

// ループの中身


“`

元記事を表示

🐘【Mac】今更ですがPHPのバージョンアップしてみた(7.3=>7.4)

Vue.js、Javaの勉強の区切りがついたので、LaravelでECサイトの作成をすることにしました。
[【Laravel】マルチログイン機能を構築し本格的なECサイトをつくってみよう【Breeze/tailwindcss】](https://www.udemy.com/share/104J4k3@r6f9ON2_g6qv_dpex43_A2XqngnWwGvkO4PVsoL17-rWmt4VL6uNndxzfewoF3z9Kw==/)
推奨環境が**PHP 7.3**以上だったので、この機会に**7.4**にアップデートすることにしました。

※MacOS Big Sur11.6.2です。Montleyは怖くてアップデートしてません笑

### アップデート前にバージョン確認
“`bash
% php -v
PHP 7.3.29-to-be-removed-in-future-macOS (cli) (built: Sep 6 2021 05:14:39) ( NTS )
“`
### PHPのバージョン指定してインストール(アップデート)
“`bash
% brew i

元記事を表示

ECS上に構築したreact+laravel環境でCSRF token mismatch。

## laravelからCSRF token mismatchを解決せよ

### 原因1
ECSはEC2三台構成なので、セッション情報が分散するから。

### 対策
ALBの分散設定を「sticky session」にするか、セッション情報をredisやdatabaseに入れて共有できるようにする。
今回はredisへセッション情報を保存することにした。
ただそれだけでは解決しなかった

### 原因2
フロントエンドのURLと、APIのURLのドメインが違うと、Laravelがセッションを認識できない。

例えばよくあるこんなURL
フロント www.example.com
バックエンド api.example.com

開発中はどっちもlocalhostだから動く、サーバーに上げた途端に動かなくなるやつ。

### 対策
Laravelの環境変数、SESSION_DOMAINを設定する。

デフォルトでは完全一致でないとダメらしい。
サブドメインも含めてワイルドカードにするためSESSION_DOMAIN=.example.comとした。

そしたら動いた。
ECS難しい。

元記事を表示

【最強のプルリクレビュー環境】 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

元記事を表示

OTHERカテゴリの最新記事