- 1. はじめに
- 1.1. データベース接続
- 1.2. SELECT
- 1.2.1. PHPのセッションを安全に破棄する方法(超個人用覚書)
- 1.2.2. HumHub公式マニュアルを読む(Database Models)
- 1.2.3. PHP8から追加された新機能「nullsafe演算子」を活用しよう
- 1.2.4. Laravel Eloquentで親テーブル小テーブル共に検索対象にする方法
- 1.2.5. 1.DOCKERを理解したい – 1day
- 1.2.6. 【PHP】mt_randの精度を調べてみた
- 1.2.7. Yii2フレームワークのエントリスクリプトを理解する。
- 1.2.8. [PHP] xmlを読み込み、連想配列に格納する
- 1.2.9. Laravel インストール
- 1.2.10. RockyLinuxでPHPをアップグレードする(8.2→8.3)
- 1.2.11. CakePHP4でDynamoDBを参照する
- 1.2.12. Laravelカスタムバリデーションの基礎と活用方法
- 1.2.13. CircleCIの公式イメージ「cimg/php:8.0」でImageMagickを使う方法
- 1.2.14. Laravelでアクセス制限等を行うミドルウェアの活用法
- 1.2.15. エンジニア2年目!適切なコメントとは? ~クリーンコードを書くために!~
- 1.2.16. 【備忘録】【MAMP】PHPのタイムゾーンの設定
- 1.3. 1. PHPのバージョン確認
- 1.4. 2. php.iniを開く
- 1.5. 3. date.timezone
【PHP備忘録】 WordPress関数:”Undefined function”エラー対処法
## 最初に
私はWordPressを使って既存の静的サイトを動的サイトに改修する学習をしていました。
その過程で遭遇したエラーについて、対処法を備忘録として残したいと思います。## ツール・言語
ツール:VSCode(拡張機能”intelephense”)
環境:Local
言語:PHP## 事象
WordPress標準関数`wp_head()` を入力後、以下のエラーが表示されました。
※`wp_head()` ⇒HTMLのheaderを部品化する関数▼エラー
“`
Undefined function ‘wp_head’.intelephense(P1010)
“`▼意味
`wp_head()` は未定義の関数
## 調べた結果
**”PHP拡張機能”intelephense”はWordPressオリジナル関数をサポートしていない。”**
”intelephense”はコード補完やエラーチェックなどをしてくれるPHP拡張機能。
”intelephense”の初期設定では、WordPress関数をサポートしていないとの事。それが原因でエラーチェックに引っ掛か
Laravel Eloquentのupdateの挙動がどうもうまくいかない
# 概要
Laravel Eloquentにおいて、updateの結果をレスポンスとして返すような状況も想定される(特にAPI)と思われるが、
**どうもうまくいかなかった**ので備忘録的に残してる記事である。# 前提知識
## whereとfindでのupdateにおける返り値の違い※ こちらの記事大変参考になりました。ありがとうございます!
# 起こった事
– `find($id)->update($values)`
– 更新成否が不明
– 更新失敗でもつねに返り値trueが返る
– `where([‘id’ => $id])->update($values)`
– 不正なカラムでupdateすると、find()だとtrueを返すのに対し、where()はしっかりエラーを返す。
– しかし、**更新前と同じデータや空の情報で更新処理を行った場合**、実際のデータは更新されないが、更新成功判定(return 1)は出て
一体全体、PHPで配列をどう扱えばいいのか?(配列を扱うニッチなスキルを含む)
# はじめに
## phpの配列の特徴
phpでは、配列とは一つのタイプで、`[1,2,3,4,5]`と`[‘a’ => 1, ‘b’ => 2, ‘c’ => 3, ‘d’ => 4, ‘e’ => 5]`の二つの方式を使用できます。最初のはインデックス付き配列で、2番目は連想配列と呼ばれます。
静的型付け言語では、インデックス付き配列はキーが存在しません。メモリ上の特定の位置にデータを一定のバイト間隔で順次に読み込みます。あるインデックスの値にアクセスする際には、1つの要素が持つバイト数分だけ「インデックス番号 x 1つの要素が占めるバイト数」を飛び越える方式で処理するため、非常に高速です。
phpのインデクシング配列は連想配列と内部処理は同じように処理されます。というのは、`[1,2,3,4,5]`が`[0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5]`と同じであるためです。インデックス付き配列として作成しても、結局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”」に変更し、
コメントアウトされてい