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

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

PHP 定数について

# 対象読者
[こちらの記事と同様](https://qiita.com/bpg_ts/items/1a25f6bd3d4656fb0bda#%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85 “対象読者”)

# 定数とは
### 定数
「データを入れるための箱」、「名前を付けることができる」という点は、変数と役割は一緒。**変数との大きな違いは、「再代入が不可能」であること**。

### 定数を使う場合、使わない場合の比較
一度定数を定義すると、プログラム中で使い回せる。また、メンテナンス性が向上するのも便利な点だ。以下に、定数を使わない場合と使う場合のコードの比較を示す。実行結果は同じ。
##### 定数を使わない場合
“`php:定数を使わない場合
‘;
print (200 * 1.1).’
‘;
print (300 * 1.1).’
‘;

/* 実行結果
110
220
330
*/
?>

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/003a21f31bc8d0546c08)の記事でFlowの環境構築を実施しました。
今回はJson形式のレスポンスを返す簡単なAPIを作成してみたいと思います。

# さっそく作ってみた
プロジェクト構成は以下です(今回の話で出てこないものは割愛しました)。
“`Neos.Welcome“`の下にTestControllerを新しく作成していきます。

“`
Quickstart
└ Packages/
├ Application/
| └ Neos.Welcome/
| ├ Classes/
| | └ Controller/
| | ├ StandardController.php
| | └ TestController(★)
|

元記事を表示

ScoopでPHPをインストールする

勉強するためにWindows環境でXAMPPを利用していて、Macユーザーになったので、Dockerを使いだし、Windowsの方でもDockerを主に利用していたのですが、諸事情でScoopでPHPだけインストールすることにしてみた走り書き。

# とりあえずScoopのアップデート
“`
scoop update
“`

“`
Updating Scoop…
Updating ‘main’ bucket…
error: Your local changes to the following files would be overwritten by merge:
bucket/amass.json
bucket/bombardier.json
bucket/drmemory.json
bucket/dynamorio.json
bucket/gitleaks.json
bucket/gosec.json
bucket/grype.json
b

元記事を表示

良いユニットテストって何だろう

# はじめに
私が今所属しているチームでは、バックエンドをPHPとLaravelで開発しています。
今までチームとしてユニットテストを書いていなかったのですが、これから機能開発をする際にはユニットテストを書いていこうということになりました。

ユニットテストに対する知見がチームとして薄いので、いい機会だと思い社内で勉強会を開催しました。
この記事は、その第一回目でチームに共有した内容です。今回はあくまで理論的な話で、具体的なコードはでてきません。

参考にした書籍は、[Good Code, Bad Code ~持続可能な開発のためのソフトウェアエンジニア的思考](https://www.amazon.co.jp/Good-Code-Bad-%EF%BD%9E%E6%8C%81%E7%B6%9A%E5%8F%AF%E8%83%BD%E3%81%AA%E9%96%8B%E7%99%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%82%A8%E3%8

元記事を表示

【Laravel】大文字・小文字・数字が1文字以上含まれるパスワードの生成方法

## 概要

下記の条件を満たすパスワードの生成

– 大文字が1文字以上含まれる
– 小文字が1文字以上含まれる
– 数字が1文字以上含まれる
– 文字数は8文字

### 環境

– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12

## 実際の記述

“`php
private function generatePassword(): string
{
$password = Str::password(8);

if (preg_match(‘/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$/’, $password)) {
return $password;
}

return $this->generatePassword();
}
“`

## 補足

– `Controller`内のprivateメソッドに定義した際の記述
– ハッシュ化(`Hash::make()`)はメソッドの呼び出し先で処理
– 他の文字

元記事を表示

【Laravel】ログイン済みの特定ユーザーのみが閲覧できるページの作成方法

## 概要

– adminユーザーとデフォルトユーザーでテーブルを分けるのではなく、1つのユーザーテーブルのみを作成
– それぞれのユーザーが持つ`admin_id`の値で権限をチェックして、ログイン済み、且つadmin権限を持つユーザーのみが閲覧できるページを作成

### 前提

– Laravel Breezeがインストール済
– `admin_id`カラムを持つUserテーブルを作成
– `admin_id`が1の場合、adminユーザー
– `admin_id`が1以外の場合、デフォルトユーザー

### 環境

– Laravel Sailでの環境構築
– Laravel 10.30.1
– PHP 8.2.12
– Laravel Breeze

## 実際の記述

“`php:app/Models/User.php
// 既存ファイルに以下を追記

public function isAdmin(): bool
{
return $this->role_id === 1;
}
“`

“`php:app/Http/

元記事を表示

YouTube Data API V3で動画情報を取得する方法: プロジェクト作成からAPIキーの発行まで

## はじめに
Youtubeの動画リストサイトを構築する際に、Youtubeの動画情報を取得するYoutube Data API V3を利用しました。YouTube Data API V3は、YouTubeのデータをアプリケーションで利用するための強力なツールです。この記事では、Google Cloud Platformでのプロジェクト作成からAPIキーの発行までの手順を、初心者の方にもわかりやすく説明します。

## Google Cloud Platformでのプロジェクトの作成

#### Google Cloud Platform(GCP)にアクセス
[Google Cloud Platform](https://console.cloud.google.com/?hl=ja)にアクセスし、アカウントにログインします。

#### プロジェクトの作成
左上のプロジェクトボタンから「新しいプロジェクト」をクリックし、新しいプロジェクトを作成します。プロジェクト名と請求先アカウントを入力し、「作成」ボタンをクリックします。

![スクリーンショット 2023-11-17 14.0

元記事を表示

formDataでデータを送信するとLaravel(PHP)側で空配列になる原因

## はじめに
Laravelとフロントエンド(例えばReactやNext.js)の間で画像ファイルを送信する際にバイナリデータの送信ではなく、マルチパートフォームデータで送信する際は、`formData`で送らないといけないのですが、AxiosでAPIを叩いてFormDataを送信する際になぜかLaravel側でデータが空配列になってしまう現象です。

https://apidog.com/jp/blog/form-data-content-type-introduction/#:~:text=form%2Ddata%E3%81%A8%E3%81%AF%E3%80%81Web,%E3%81%A6%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E5%BD%A2%E5%BC%8F%E3%81%A7%E3%81%99%E3%80%82

## エラー内容
問題の典型的なシナリオは、フロントエンドからLaravelのAPIへフォームデータを送信しようとすると、Laravel側で`$request->all()`や`$request->input()`が空の配列を返す

元記事を表示

【個人開発】お金貸借り管理BOT作ってみた(Laraevl ✖️ Line Messaging API ✖️ LIFF)

25卒でエンジニアのインターンをやっている者です。

現在はベトナムのダナンで半年間のエンジニアインターンに参加をしています。

エンジニアを始めてからこれまで、業務以外でオリジナルのアプリを作ってリリースしたことがなかったのですが、作りたいものがあり、結構すぐ作れそうだなと思い今回作成してみましたのでそちらの紹介をします。

これからポートフォリオの開発をしたい人とかの助けになれば良いなと思います。

## 制作動機

作成の動機はここら辺です。
主に自分のお金周りの管理をちゃんとしたいなーという思いが動機としては強いです。

– 現在海外のインターンでルームメイトと同居しており、お金の貸し借りが増えたから。
– 返した・返してないが曖昧になりがちだから。
– 自分が適当すぎて不快にさせる可能性があるなと思ったから。
– お金貸し借り管理系のアプリはあったけど、自分の携帯のストレージが逼迫しているからインストールはしたくなかった。
– アプリインストール より使うにあたって心理的ハードルが低いかなと思った。
– インターン先でLINE BOT や telegram BOTの開発に関わ

元記事を表示

【OCI】Dockerで作成したイメージをOCIコンテナインスタンスで動かしてみる

# はじめに

今回はOracle Cloud Infrastructure(OCI)が提供している
コンテナインスタンスにNginx + PHPが動作するDockerコンテナを
立てて動かしてみたいと思います。

コンテナであれば、VM(Compute)にDocker環境を作って動かせますが、
わざわざそのためにVMを立てて管理するのもスマートではなく
コンテナインスタンスを使ったら手間もかからず利用できるので
そのあたりの簡単な手順を紹介したいと思います。

■参考
コンテナ・インスタンスの概要
https://docs.oracle.com/ja-jp/iaas/Content/container-instances/overview-of-container-instances.htm

OCI Container Instances概要 / OCI Container Instances

ローカル環境に設定したDockerコンテナでNginx +

元記事を表示

symfony2.8 => 3.4 にアップグレード後、キャッシュクリアが出来ない

前提

ローカル環境(xampp)で、Symfony v2.8 を v3.4.49 にアップグレード後、PHP 8.2.10 で動かそうと検証している最中に出会ったエラーです。

動作環境

Windows 10 Pro
XAMPP Version: 8.2.4
PHP 8.2.10
Symfony v3.4.49

エラー内容

キャッシュをクリアしようとすると、
“`
php app/console cache:clear –env=dev
“`
エラーになります。
“`
[Semantical Error] The annotation “@Route” in method AppBundle\Controller\DefaultController::indexAction() was
never imported. Did you maybe forget to add a “use” statement for this annotation? in C:\xampp\htd

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~環境構築編~

# 初めに
PHPの「**Flow**」というフレームワークをご存じですか?
おそらくこのフレームワークを知っている人は少ないと思います。自分もその一人でした。

先日たまたまFlowを触る機会があり、とりあえずQuickstartを試してみるかと思ったのですが
* **公式ドキュメントの手順が省略されていて、PHP初心者には難しい**
* **マイナーすぎて参考資料が出てこない**

ということに苦しめられ、なかなか環境構築が進みませんでした。

github-copilotに助けられながらなんとか完了することができたので、今回は公式ドキュメントの[Quickstart](https://flowframework.readthedocs.io/en/stable/Quickstart/index.html)のソースを元に環境構築方法をまとめてみました!

# Flowとは
Flowとは[flownative](https://www.flownative.com/)社が出しているオープンソースのPHPフレームワークです。

**ドメイン駆動設計**(DDD)を中心原理として設計され

元記事を表示

[小ネタ]PHPで数値を先頭空白埋め・右揃え・桁区切りして表示したい

### やりたいこと ###
要は、数値をこうやって(↓)出力したいってことです。
sprintf関数を使って何とかできないか、ググったり試行錯誤しましたが、(ニーズはあるはずやのに)なかなかしっくりくる答えは見つからず・・・:frowning2:
“`
入力件数 : 12,000件
エラー件数 : 1,000件
スキップ件数 : 200件
出力件数 : 10,800件
“`
***
### 何てことなかった ###
が、そのうちひらめきました。
Max百万台を表示する例です。
“` php
echo “入力件数 :” . sprintf(“%9s”, number_format($cnt_inrec, 0)) . “件”;
“`
sprintfで文字列フォーマット指定するのがミソでしょうか。
Smartyで対応する場合は、左から右にオプションが評価されるので、次のようになります。
“`
入力件数 :{$cnt_inrec|number_format|string_format:”%9s”}件
“`

元記事を表示

【PHP8.4】全角スペースをtrimできるようになるぞー

なんとなく[RFC](https://wiki.php.net/rfc)を見ていたら[Multibyte for trim function mb_trim, mb_ltrim and mb_rtrim](https://wiki.php.net/rfc/mb_trim)というRFCが投票に入っていました。

というわけで、以下はこのRFCの紹介です。

# PHP RFC: Multibyte for trim function mb_trim, mb_ltrim and mb_rtrim

## Introduction

PHPには、マルチバイトのtrim関数がありません。
`preg_replace(“/^\s+|\s+$/u”, ”, $string)`で概ね想定した挙動になりますが、関数を予め用意しておくことでコードの可読性とわかりやすさを向上させることができるでしょう。
また、トリッキーになりがちなこの処理を標準化することができます。
この機能は多くのPHP開発者にとって有用であり、mbstringモジュールはこれで完成にまた一歩近づきます。

ユースケースのひとつとし

元記事を表示

Laravelの`Collection`におけるPHPDocの設定

こんにちは,ご覧いただきありがとうございます。

## はじめに

Laravelをお使いの皆さんはプログラミングする際にPHPDocを使われていますか?
私はいつも使っているのですが,`Collection`の際の使い方がいまいちわかっておりませんでした。
ググってもほしい情報はヒットしませんでした(キーワードの問題?)

今回,プログラミング中にたまたま書き方がわかったので共有します。
といってもシンプルに`array`と同様でした。笑

## `Collection`におけるPHPDoc

“`php
/** @var \Illuminate\Database\Eloquent\Collection<, \App\Models\Model> */
// あるいは
/** @var \Illuminate\Database\Eloquent\Collection */
“`

## 結論

ものは試しですね!

元記事を表示

PHP 変数について

# 対象読者
[こちらの記事と同様](https://qiita.com/bpg_ts/items/1a25f6bd3d4656fb0bda#%E5%AF%BE%E8%B1%A1%E8%AA%AD%E8%80%85 “対象読者”)

# 変数とは
### 変数
一言で言えば、「**データを入れるための箱**」。変数を宣言すると、メモリ上に領域が確保される。

変数(箱)を使うメリット
* **名前を付けることができる**
* **再代入が可能**

### 変数の宣言
以下は、`$wallet`(変数:財布)に、1000(1,000 円)を入れて変数を宣言する例。**イコール** (`=`) は、**代入**を表す。
“`php:PHP

“`
:::note info
PHP は **動的型付け** 。`$wallet`(財布)という **変数名** として名前を付与することで、人間が直感的に理解しやすいものとなっている。
:::

### 変数の命名規則
* 「`$ ~`」

元記事を表示

WordPressオリジナルテンプレートでポートフォリオサイトを制作しました

![スクリーンショット 2023-11-09 21.49.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618748/b679dcb6-c1e6-fcf2-9a67-5e63818e9019.png)

## はじめに
はじめまして。閲覧いただきありがとうございます。
WordPressオリジナルテンプレートでポートフォリオサイトを制作したのでご説明させていただきます。

## サイトのの概要
学習や行動した実績をポートフォリオサイトです。

・制作実績、私について、ブログページ、コンタクトフォームの4つの構成。
・”親しみやすさ”、”温かみ”をコンセプトとして制作。
・自分のできることを詰め込みつつ、サイトから人柄が少しでも伝わるよう制作しました。

## 想定ユーザー
・採用担当者様
・WEBディレクター様

## 機能一覧

| | 機能 |
|:-|:—————–|
| 1 | Swiper3種(FV、制作実績セクション、その他の記事) |
| 2 | カスタム

元記事を表示

Laravelでの安全なウェブサイトの作り方。

## 作成動機

Webアプリケーションの脆弱性と対策について理解を深めたかったため、個人的に好きなLaravelでの対策をまとめた。

### 作成にあたって

作成する際に主にLaravelの公式ドキュメントとIPAの「安全なウェブサイトの作り方 改訂第7版」を参考にしながら作成した。
[参考資料](#参考資料)

また、対策例はあくまで一例です。

コードはGitHubにあげてます。

https://github.com/kk0128jp/SecProLaravel9.git

## 環境

– PHP 8.0.6
– Composer version 2.3.7
– Laravel Framework 9.52.12
– mysql Ver 8.0.29

## 前提

### 根本的解決と保険的対策

IPAでは脆弱性対策について、その性質を基に「根本的解決」と「保険的対策」の2つに分類している

#### 根本的解決

「根本的解決」は「脆弱性を作りこまない実装」を実現する手法。
根本的解決を実施することにより、その脆弱性を狙った攻撃が無効化されることを期待できる。

元記事を表示

N+1問題の概要と解決方法 (Cakephp4)

# N+1問題とは

データベースから情報を取得するときのパフォーマンスの問題。

具体的には、SQLがN+1回発行されてしまうことでパフォーマンスが低下する問題。

## **N+1問題の具体例**

– データベースの構造

N+1問題は、子テーブルの中に親テーブルに紐づく情報が複数存在するときに現れる。

例えば、学校テーブル(親)と生徒テーブル(子)があるとする。学校には複数の生徒が所属しているので、学校テーブルと生徒テーブルは1対多の関係にある。

![スクリーンショット 2023-11-11 11.33.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527059/c9b811fd-8580-8a3e-f9aa-8ce1408c016d.png)

田中ひめ、鈴木ひなは西高校に所属しており、それ以外の3人は中央高校に所属していることがわかる。

– 典型的なコード例でのN+1問題の発生

冒頭に示した通り、N+1問題はSQLがN+1回発行されてしまうことでパフォーマンスが低下する問題

元記事を表示

Laravel クイズ ~Qiita Night PHP 2023 Winter~

本スライドは**フルスクリーン**,倍率 **50%** での閲覧を推奨します

## 自己紹介

通算 Qiita 9 位らしい。
(最近あんまり書いてなくてごめんね…)

# 今日のテーマ

Laravel クイズ ~For Qiita Night 2023 Winter~

## 以前の問題

https://quiz-maker.site/quiz/play/1QT

元記事を表示

OTHERカテゴリの最新記事