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

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

PHPでデータベース操作の基本

はじめに

基本的なデータベース操作(select, insert ,delete)についてまとめました。

データベース接続

PHPからデータベース(MySQL)を操作するために、まずデータベースに対して接続を確立させます。

“`php:db.php
$usr = ‘user’; // 接続ユーザー名
$pw = ‘password’; // 接続時のパスワード
$dsn = ‘mysql:host=localhost; dbname=test; charset=utf8’;

$pdo = new PDO($dsn, $usr, $pw);
“`
①$dsnはデータベース接続文字列で、データベースに接続するための情報(ホスト名やデータベース名など)をまとめたものです。
※接続先のデータベースによって異なるので注意。今回はMySQL

②PDOクラスをインスタンス化します。

SELECT

データベース接続ができたら、テーブルからデータを取得していきます。
今回取得元のテーブルはこんな感じ

元記事を表示

PHPのセッションを安全に破棄する方法(超個人用覚書)

#### 最初に結論のスクリプト
※あくまでも個人用覚書。環境によっては条件やパラメータ等を追加したほうがよい(解説参照)。
“`deleteSession.php

元記事を表示

HumHub公式マニュアルを読む(Database Models)

# HumHub公式Development Guide
## Basic Concepts > Database Models
https://docs.humhub.org/docs/develop/models/
### DBマイグレーション
#### そもそもDBマイグレーションとは?
WEBアプリのフレームワークの文脈で登場する場合は、データベース構造の変更の経過をソースコードに記録する仕組み。
アプリ側でソースコードにDB変更内容を記述して、専用コマンドを実行することで、DB側に変更を適用する。
– マイグレーションを作成する。ファイルにテーブル作成、カラム追加、などのデータベース構造の変更を記述する。
– マイグレーションを実行する。データベースにマイグレーションによる変更が適用される。

### Active Record
#### そもそもActive Recordとは?
Active Recordはデザインパターンを表す言葉。
WEBアプリのフレームワークで登場する言葉で、モデルクラスのこと。
DBの1テーブルがモデルの1クラスと対応する。

元記事を表示

PHP8から追加された新機能「nullsafe演算子」を活用しよう

## nullsafe演算とは
`nullsafe演算子`(`?->`)は、オブジェクトのプロパティやメソッドにアクセスする際に、
nullチェックを簡潔に行うための新しいPHP構文です
従来の方法では、nullチェックを行うために複数の条件文を書く必要がありましたが、
`nullsafe`演算子を使用すると、コードがシンプルで読みやすくなります

基本構文
“`php
$property = $object?->property;
$result = $object?->method();
“`

上記では、`$object`がnull出ない場合にのみ`property`や`method`にアクセスし、nullの場合はnullを返すようになっています

## 実際のコード例と解説
### 従来の方法との比較
従来の方法では、以下のようにnullチェックを行う必要がありました
“`php
if ($object !== null) { // またはisset()、!empty()など
$property = $object->property;
} else {

元記事を表示

Laravel Eloquentで親テーブル小テーブル共に検索対象にする方法

# 概要
Laravel Eloquentにおいて、親子テーブル両方を検索対象にする方法について、この記事では記載する。

# 解決方法
**orWhereHas を使って検索対象に**含めれば、解決することが出来る。

“`App\Models\Player.php

public function team(): BelongsTo
{
return $this->belongsTo(Team::class);
}

static public function findBySearch(string $input)
{
$players = Player::makeBuilder($input)->get()->load(‘team’);
return $players;
}

static private function makeBuilder(string $input)
{
return Player::where(‘name’, ‘LIKE’, ‘%’ . $input . ‘%’)
->orWhere(‘age’, ‘

元記事を表示

1.DOCKERを理解したい – 1day

こんにちは🦎
あかはら。と申します。
この分野は本業であり、いわゆる趣味副業に効果的なものではありませんが、一般的なエンジニアが一日30分から1時間がんばろうという心意気とその記録のためのページです

# ◆今回の目的:Dockerの理解
## ▼参考
・https://qiita.com/kouta222/items/6bcfcd261cfea62238bc
・https://salumarine.com/how-to-prepare-nginx-laravel-development-environment-using-docker-compose/
## ▼作業内容
### ➀docker desktop をインストール
普通にexeファイルを開くだけですね🦎
### ➁Nginxを動作させる
参考のサイトの手順が不十分っぽいので、ここからは試行錯誤
– まずは開発環境を置くディレクトリを作成

mkdir docker-Laravel
cd docker-Laravel

– 下記のようなディレクトリを構築
docker/conf/default.conf

元記事を表示

【PHP】mt_randの精度を調べてみた

# はじめに

ABテストのために組んだスクリプトの精度を計算してみた。

# 問題

本当に50%で結果が出るのか文献が見つからなかったので。
(というか探すより自分で調べたほうが早い)

# 解決方法

下記を実行するのみ。

“`test.php
0,
‘count1’ => 0
];

for ($i = 0; $i < $trials; $i++) { $result = mt_rand(...$arr); if ($result < $arr[1]/2) { $results['count0']++; } else { $results['count1']++; } } return $results; } // 試行回数を指定し

元記事を表示

Yii2フレームワークのエントリスクリプトを理解する。

[前回記事](https://qiita.com/KoheiOgura/items/d16f95a8ea5007f79edf)の`/var/www/html/humhub/index.php`の中身を理解する。

“` index.php

元記事を表示

[PHP] xmlを読み込み、連想配列に格納する

### PHPでxmlを読み込み、連想配列に格納する
– chatGPTだと回答が不安定なので自分用にメモ。
“`
$xml = simplexml_load_string(file_get_contents(‘https://target.xml’), ‘simpleXMLElement’, LIBXML_NOCDATA | LIBXML_BIGLINES);
if ($xml === FALSE) {
die(“Failed to parse XML data.”);
}
$ary = json_decode(json_encode($xml));
“`

元記事を表示

Laravel インストール

# はじめに
こんにちは。@bdrccです。

最近色々ありまして、8年以上使っていた MacboorAir を新調しました。
他のソフトウェアのインストール中、「あ、Laravelいけるかも」と気づき、インストールを試みました。

これから勉強したいという方向けに、メモを残しておきます。

# 環境
– MacbookAir M3チップ
– MacOS 14.3 Sonoma

# 手順
## 1:PHP(MAMP) インストール
下記のサイトからインストールします。
OSの種類が違う場合は、バージョンに合わせてインストールしてください。

https://www.mamp.info/en/downloads/

## 2:Homebrew インストール

下記サイトからコードをコピーして、ターミナル上で実行します。

https://brew.sh/ja/

私の場合は

“`:terminal
% /bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.

元記事を表示

RockyLinuxでPHPをアップグレードする(8.2→8.3)

[PHPに脆弱性が発見された](https://www.ipa.go.jp/security/security-alert/2024/alert_20240705.html “PHPの脆弱性(CVE-2024-4577)を狙う攻撃について”)ということなので、使用中のPHPをチェックしてみた。
“`
# php -v
PHP 8.2.13 (cli) (built: Nov 21 2023 09:55:59) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.13, Copyright (c) Zend Technologies
with Zend OPcache v8.2.13, Copyright (c), by Zend Technologies
“`
上のページによると影響をうけるのが
>PHP 8.1.29より前の8.1系
PHP 8.2.20より前の8.2系
PHP 8.3.8より前の8.3系

らしいので、急遽アップグレードをすることに。
“`
# dnf -y upgrade php

元記事を表示

CakePHP4でDynamoDBを参照する

## はじめに

DynamoDBを利用する際に、CakePHPとDynamoDBの接続に関する記事はバージョンが古かったり、作成するファイルが多かったりして、DB接続に手こずったため備忘録として今回記事にしました。

## この記事でやること
CakePHP4を用いてDynamoDBに接続し、テーブル情報を取得する。

## 前提
– EC2を利用しています
– OSイメージ:Amazon Linux 2 Kernel 5.10
– CakePHPのバージョン: 4.2.12
– nginx: nginx/1.22.0
– PHPのバージョン: PHP 7.4.33 (cli)
– PHP-FPM: PHP 7.4.33 (fpm-fcgi)
– AWS SDK for PHPのバージョン: 3.257

## AWS側での準備

### DynamoDBでテーブル作成

AWSコンソールのホーム>DynamoDB>テーブル>テーブルの作成から適当なテーブルを作成します。

### AWS SDKのインストール

AWSを操作するときはWeb上からコンソールを使って操作してい

元記事を表示

Laravelカスタムバリデーションの基礎と活用方法

## はじめに
今回はLaravelのカスタムバリデーションの基礎と活用方法について解説していこうと思います
Laravelのバリデーション機能は非常に強力ですが、プロジェクトの要件によってはカスタマイズが必要になることもあります
そんな時に作ると便利なカスタムバリデーションを活用してみましょう

## Laravelのバリデーション機能
まず、Laravelの基本的なバリデーションはデフォルトで多くのバリデーションルールを提供しています
例えば`required`、`integer`、`string`、`email`、`min`、`max`などの一般的なバリデーションルールがあります
これによりフォームデータの検証を簡単に行うことができます
“`php
$request->validate([
‘name’ => ‘required|string|max:255’,
‘email’ => ‘required|email’,
‘age’ => ‘nullable|integer|min:18’,
]);
“`

## カスタムバリデーションルールの作成手順
### カス

元記事を表示

CircleCIの公式イメージ「cimg/php:8.0」でImageMagickを使う方法

# 結論
以下を実行前に
“`yml
– run: sudo apt-get install -y imagemagick libmagickwand-dev
– run: sudo pecl install -f imagick
“`

# 背景
ImageMagicを使ったテストがCI上で通らない問題がありました。
その時のエラーがこちらです。
“`
ImageMagick module not available with this PHP installation.
“`
その時の `config.yml` は以下でした。

“`yml
– run: sudo apt-get install -y imagemagick
– run: sudo apt-get install -y php-imagick
“`

# なぜ動かなかったのか
## 1. `libmagickwand-dev` をインストールしていない。
` libmagickwand-dev` は、ImageMagickを他のプログラム(今回だとPHP)から利用するための開発用ライブラリ。これがないと

元記事を表示

Laravelでアクセス制限等を行うミドルウェアの活用法

## はじめに
ミドルウェアはリクエストとレスポンスの処理の間に独自のロジックを挿入することができる便利な機能です
今回はアクセス制限を具体例として基礎知識や活用方法を記事にしていきたいと思います

## ミドルウェアとは
ミドルウェアは、HTTPリクエストからコントローラまでの間に処理を加えることです(例:アクセスする際に権限のないユーザーはアクセスできないようにする)
一般的なミドルウェアの用途には、認証(先述の例)、ログの書き込み、[CORS(Cross-Origin Resource Sharing)](https://qiita.com/att55/items/2154a8aad8bf1409db2b#cors-%E3%81%A8%E3%81%AF)の設定などがあります

## Laravelでのミドルウェアの作成方法
Laravelでは、以下のコマンドを使用して新しいミドルウェアを作成できます
“`bash
php artisan make:middleware {作成するミドルウェアの名前}
“`

今回は下記のように作成します
“`bash
php artisan

元記事を表示

エンジニア2年目!適切なコメントとは? ~クリーンコードを書くために!~

こんにちは!
クリーンコードについて学習している
エンジニア2年生の元公務員エンジニアのガッキーです!

業務中に先輩から

– 「このコメントはコード見ればわかるから要らないよ」

– 「その意図ならコメントしてほしいなぁ」

1年目はこんなことを言われて、
どうしたらいいんだぁーーーっとよく混乱していました
記事として記録したいと思います!

# コメントについて意識すること🖊️

コメントを書く上で意識することは

**できるだけコードで表現して、表現できない場合だけコメントに残す**

ことだと考えています。

なぜならコメントを書いたところで実際の処理に影響しないからです。
実際のプログラムはコメントではなくコードが全てだからです。

さて、ここから具体的に悪いコメント・良いコメントを見ていきましょう!

# 悪いコメント😣

さっそく悪い・不要なコメントを見ていきましょう!

## 当たり前のことは書かない

ついついやってしまいがちなので、
頭に叩き込んでおきたいこと、

**当たり前のことはコメントしない**です。

以下の4つ例は
1. パッとみれば分かる
2. 意味

元記事を表示

【備忘録】【MAMP】PHPのタイムゾーンの設定

MAMPのタイムゾーンを日本時間に設定するやり方をメモしておきます。
※変更する時はサーバーをストップさせた状態でやること。

1. PHPのバージョン確認

MAMPを開いて、「PHP version」からバージョンを確認します。

![スクリーンショット 2024-07-09 15.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827365/15275194-757e-f38d-b6cb-4ac78dd01bce.png)

2. php.iniを開く

ファイルの場所は「Application/mamp/bin/php/php××.×/conf」配下にあります。
※「××.×」は「1」で確認したバージョン

3. date.timezone

「date.timezone」の箇所を「”Europe/Belrin”」→「”Asia/Tokyo”」に変更し、
コメントアウトされてい

元記事を表示

GroupSession WebAPIを使ってPHPで施設の予約内容を取得する

:::note info
APIの概要は「無料版GroupSessionの設計書(WEB API 仕様書)」をダウンロードしてください。
:::
例として今日の設備予約内容を取得する。

※取りあえず動くことだけを目的としているので「ここがおかしい」「こうしたほうがよい」などあればお知らせください。

# 準備
GroupSesseion のインストールや初期設定は割愛。

1\. admin 以外の管理者ユーザーを1つ作成する。

2\. GroupSesseion のプラグインマネージャで「WebAPI」を「使用」にする。

3\. WebAPI の管理者設定 ⇒ Web API基本設定 ⇒ トークン認証を「使用する」

4\. WebAPI の管理者設定 ⇒ Web APIトークン管理 ⇒ トークン発行。1で作った管理者ユーザーを選択してトークンを発行する。生成されたトークン文字列は、このあとすぐに使います。

# 実装
## 施設名と施設SIDを取得する
“`sample1.php

元記事を表示

LaravelでのCSRF除外設定について

# LaravelでのCSRF除外設定について

先日、PHPでLaravelを用いた勉強をしていた際、LINE MessagingAPIを導入した時にwebhookにアクセスが通らないという問題が発生しました。解決まで少し時間がかかったので、備忘録として記事を書いておきます。

## 問題の発生

LINE MessagingAPIを導入する際、POST通信を行うためにCSRFから除外する必要があります。通常、その除外するURLを設定するファイルは `app/Http/Middleware/VerifyCsrfToken.php` の中に記述します。しかし、このファイルが見当たりませんでした。プロジェクトファイルの作成時にミスったかと思い、手動で作成してみましたが、それでも問題は解決しませんでした。

## 解決策

シンプルにリサーチ不足でした。Laravel Ver.11では、デフォルトで `App\Http\Middleware\VerifyCsrfToken` がなくなるとのことです。そのため、`web.php` に直接記述する方法を取りました。以下の通りです。

“`ph

元記事を表示

Google Apps ScriptでPHPのHmacSha256ハッシュを作成しようとしたら沼った話

# はじめに
あと1年ほどでサービスが終了してしまうLINE Pay。

https://pay.line.me/jp/developers/apis/onlineApis?locale=ja_JP

今回焦点を当てたのは、LINE Pay APIの認証方法で使われている「HMAC-SHA256」ハッシュ作成方法です。

この方法を参考にした認証方法をサービスに組み込んだのですが、Google Apps Scriptから利用するときは工夫が必要でしたので、記事を書くことにします。

# LINE Pay APIで利用されているハッシュの作り方
“`
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URL Path + Query String + nonce)))

※ Query String : ?を除いたクエリ文字列(例 : Name1=Value1&Name2=Value2…)
“`

# サービス用にカスタマイズしたハッシュの作り方

“`
Signature = B

元記事を表示

OTHERカテゴリの最新記事