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

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

phpインストールと、composerを使用してphpunitをインストールする

(自身の備忘録用です)
※OSはLinux

### phpをインストール
“`
yum install epel-release
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum install –enablerepo=remi,remi-php70 php php-devel libzip-devel php-mbstring php-pdo php-gd php-xml

# バージョン確認
php –version
“`

### comporserをインストール
“`
# インストーラーを取得
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php composer-setup.php
# PATHが通ってる場所へ移動
sudo mv composer.phar /usr/local/bin/composer

# 実行確認
composer
# 実行問題なければインストー

元記事を表示

CakePHP4 ORM “FROM サブクエリ”

## 環境

PHP 8.1.4RC1
CakePHP 4.3.6

## CakePHP4 の ORM で “FROM サブクエリ” を作る

やりたいこと

“`sql
SELECT base.id
FROM (SELECT h.id FROM hoges h) base
LEFT JOIN moges m ON base.id = m.id
“`

をORMで生成する。

次のコードは最初に書いたもの。

“`php:\App\Model\Table\HogeTable
public function getData()
{
// SELECT h.id FROM hoge h をつくる
$this->setAlias(‘h’);
$subquery = $this->find()->select(‘h.id’);

// サブクエリをFROMに指定する
$this->belongsTo(‘m’, [
‘className’ => ‘Moge’,
‘bindingKey’ => [‘id’],

元記事を表示

PHPで有効数字6桁で収まらない小数を指数表記を使わない文字列に変換するには?

PHPでは整数部が0で、小数第5位以降に初めて0でない数が現れる小数を`(string)0.00001`などで変換すると`1.0E-5`のように指数表記が使われる表現の文字列になる。

有効数字6桁で正確に表現できる小数(C言語とかでいう`float`で表せる数。例:`0.125`)であれば、`rtrim(sprintf(“%f”, $val), 0)`とすれば指数表記を使わない表現の文字列に変換できる。
しかし[sprintfのページにもあるように](https://www.php.net/manual/ja/function.sprintf.php)、小数点の後に表示する桁数はデフォルトで6桁である。これだと、**実際に格納されている値は大抵のプラットフォームでは有効数字14桁ほどの表現力がある倍精度浮動小数点数として格納されているにもかかわらず**、単精度浮動小数点数の範囲で正確に表せない小数では6桁までで打ち切られてしまい丸め誤差が発生してしまう。JSONテキスト内の値として使う場合などに問題になるだろう。

“`php
echo rtrim(sprintf(“%.14f”,

元記事を表示

Laravel 代行ログイン

プログラムでユーザーログインする場合以下でできる。
ただしIDを指定してしまえばどのアカウントにもログインできてしまうので権限チェックなどは必要。

“`php
//セッションIDの再発行
session()->regenerate();

//ログイン
\Auth::loginUsingId($user_id);
“`

元記事を表示

CakePHP4のI18nでpoの代わりにymlを使う

## 環境

PHP
CakePHP 4.3.6

## 目的

[国際化と地域化](https://book.cakephp.org/4/ja/core-libraries/internationalization-and-localization.html) が目的。
CakePHP4のデフォルトでは.poファイルを使うわけですが、個人的には見づらい。
というわけで.yml(.yaml)ファイルを使用したい。

## 準備

[国際化と地域化](https://book.cakephp.org/4/ja/core-libraries/internationalization-and-localization.html) にもあるように、“`YamlFileParser“`を作ればいい。

“`php:\src\I18n\Parser\YamlFileParser.php
namespace App\I18n\Parser;

class YamlFileParser
{
public function parse($file)
{
retur

元記事を表示

【備忘録】PHP継承について

## 継承とは
あるクラスで定義したプロパティやメソッドを、他のクラスに引き継ぐこと。

継承されるクラスを「親クラス(スーパークラス)」、継承するクラスを「子クラス(サブクラス)」と言う。

## 継承の方法
“`
class 子クラス名 extends 親クラス { }
“`

## サンプルコード
“`
name = $name;
}

//名前を返す
public function getName() {
return $this->name;
}

// 名前を表示する
public function introduce() {
echo $this->getName();
}
}

// オブジェクトを生成・初期化
$human = new Human(“tanaka”);

// メソッドの実行
$h

元記事を表示

macOS MontereyでPHPとApache

macOS MontereyではPHPが標準バンドルされなくなってしまいました。
なので、インストール…したところApacheも手入れしなければいけなかったのでメモ書き。

# 1.Homebrewのインストール
まっさらのOSの場合を想定してまずはHomebrewをインストールします。
Homebrewのサイトでインストールするためのコマンドをコピーできます。
“`
$/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

# 2.PHPをインストール
Homebrewのインストールが完了したら、引き続きPHPをインストールします。
入っていない筈ですが、一応PHPのバージョンチェックのコマンド。
“`
$php -v
“`
Command not foundが表示されると思います。
(もし自前で既にPHPを入れていた場合は現行のバージョンが表示されます)

インストールできるphpパッケージを確認します
“`
$brew se

元記事を表示

Laravel キュー

# 概要
通常のWebリクエスト中に実行するのでは時間がかかり過ぎるタスクがある場合、
バックグラウンドで処理したい仕事を**キュー**へ投入する。

(キュー:逐次入出力が繰り返されるデータを一時的に蓄えておくためのデータ構造)

Laravelはそれ用のジョブクラスが作成できる。

# ジョブ作成
全てのキュー用ジョブは `app/Jobs` ディレクトリ配下に配置する。

“`
php artisan make:job HogeProcess
“`

で生成されたクラスは `Iluminate\Contracts\Queue\ShouldQueue` インターフェース を実装する。

# クラス構造
`handle` メソッドのみを持つ。
これはジョブがキューにより処理される際に呼び出される。

`handle`メソッドでは依存関係をタイプヒント(型宣言)できる。

“`php
namespace App\Jobs;

use Illuminate\Contracts\Queue\ShouldQueue;

class HogeProcess implements Shou

元記事を表示

【Laravel】timestamps()とtimestamp()の違い

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

## timestamps()
“`created_at“`および“`updated_at“`TIMESTAMPカラムを作成。

“`php
$table->timestamps();
“`

## timestamp()
“`created_at“`および“`updated_at“`**以外**のカラム名でTIMESTAMPカラムを作成したいとき使える。

“`php
$table->timestamp(‘expired_at’);
“`

## よくありそうなミス
この2つの違いを知らずに、下記のようにしていてmigrationできなかったので教訓にしたい。

“`php
$table->timestamps(‘expired_at’);
“`

元記事を表示

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)

# 条件分岐
これは***もし〜なら〜で処理する***みたいな仮定法みたいなイメージです。
we

元記事を表示

初学者向けにCookieの概念と使い方を説明してみる

#はじめに
本稿は初学者向けにCookieの概念から実際の使い方までを解説した記事になります。

Cookieが何のために存在して、どのように使うのかといったことをざっくり理解して頂ければ幸いです。

実際の使い方だけ学びたい方は、[2 実際のCookieの使用方法](#2-実際のcookieの使用方法)から読んでください。

#目次
[1 Cookieとは](#1-cookieとは)
[1.1 そもそもCookieって何のためにあるの?](#11-そもそもcookieって何のためにあるの)
[1.2 セッションとの違い](#12-セッションとの違い)
[1.2.1 保存先](#121-保存先)
[1.2.2 有効期間](#122-有効期間)

[2 実際のCookieの使用方法](#2-実際のcookieの使用方法)
[2.1 Cookieを保存する](#21-cookieを保存する)
[2.2 Cookieを呼び出す](#22-cookieを呼び出す)
[2.3 設定したCoookieを確認する](#23-設定したcookieを確認する)

#1 Cookieとは
ここでは、そ

元記事を表示

PHPでHTML圧縮 – WordPress対応かも?

### はじめに

WordPressプラグインでHTML圧縮ができるかもしれませんが、
過剰に圧縮するためにうまく動かない場合が存在します。

簡単なコードで HTML圧縮をしてみるのも良いでしょうか

### 先に参考サイトの記載

https://prfac.com/php-minify/

https://manablog.org/php-html-minify/

### 試しに組み込んでみたもの

“`functions.php
function sanitize_output($buffer) {
$search = array(
‘/\s\/\>/s’, // XMLの /> を圧縮
‘/\>[^\S ]+/s’, // タグの後の空白を削除
‘/[^\S ]+\/s’ // コメントを削除
‘/type=\”text\/javascript

元記事を表示

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)

# 配列とは
簡単にいうと***データのかたまり***のことです。
つまり***データをたくさん

元記事を表示

TOAST UI Editor のファイルアップロード機能

# 目次
[1.基本的な流れ](#1-基本的な流れ)
[2.まずはエディターに機能を追加する](#2-まずはエディターに機能を追加する)
[3.実際にアップしてurlを返す処理](#3-実際にアップしてurlを返す処理)

**TOAST UI Editor** というマークダウンエディターでファイルアップロードする方法に苦戦したので、誰かのためになればと思いアウトプット記事を書いてみます。
Laravel + Vue.js を使った開発です!

# 1. 基本的な流れ

今回実装させた TOAST UI Editor でのファイルアップロードは、
**選択した画像をサーバーにアップロードして、返ってきた URL を textarea に表示させるというものです。**
最初の状態だと、下記のように画像の情報がそのまま表示されてしまうため、
アップロードして返ってきたURLを表示できるようにしたいところ。

![スクリーンショット 2022-04-03 16.51.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

CakePHP2で表のカラムの順番を入れ替えるボタンの作り方

## きっかけ
演習でファイルがダウンロードできるサイトを作っていて、そのカテゴリーを管理するサイトで矢印↑↓をクリックすると前後の順番を入れ替えられるようにしたかったです。どのように作ったか記しておきます。

![カテゴリ管理画面イメージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1802093/9b0f7363-c92e-5dd8-44c4-65296197cc08.png)

## 手順
1, Controllerに更新するデータのidを渡す
2, 並び替え用の数値を書き換え
3, データベースに書き換えたデータを保存

## データベース
order_numberは表示順を表わします。表示順を入れ替えて更新することで並び替えできるようにします。
| id | category_name | order_number |
|:———–|:————|————:|
| 1 | カテゴリー1 | 1 |
| 2

元記事を表示

PHP + MySQLフルスクラッチでユーザー認証機能を実装する【ユーザー登録削除編】

PHP + MySQLフルスクラッチでのユーザー認証機能の実装方法を解説します。今回は最終章の【ユーザー登録削除編】です。
開発環境、ファイル構成、ER図はこちらからご確認ください。

https://qiita.com/Michi1090/items/67db6a38bb63752237e7

# 要件定義

– ユーザー登録削除は物理削除で対応
– 削除前にパスワードを入力させ、本人確認を行う
– ユーザー登録削除と同時に、削除ユーザーに紐づくトレーニングログもすべて削除
– 削除完了後は、完了画面にリダイレクト

今回は外部キー連携を行うので、もう一度ER図を掲載しておきます。
`weight_logs`テーブルは色々なカラムがありますが、要するに`users`テーブルと外部連携できるキーがあれば、あとは何でも構いません。

![ER図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2485055/adb788f4-1c27-ef50-6c03-a2e58e6850ed.jpeg)

#

元記事を表示

登録システム

## 会員登録システムの構成
### データベース
データベースは、『登録した会員情報を保存しておく』という役割があります。

### PHPファイル
必要なPHPファイル(仮)
・dbconnect.php – このファイルでは、PHPからデータベースに接続するための処理を行います。
すべてのファイルで、データベースとの接続処理を記述することは無駄が多いので、1つのファイルにまとめておこう、という発想です。

・entry.php – このファイルでは、登録フォールを作成し、会員情報を実際に入力してもらう画面を作ります。

・check.php – このファイルでは、entry.phpで入力してもらった情報の再確認を行います。
要するに、「メールアドレスとか本当にこれでいいの?」って確認するやつです。

・thank.php – このファイルでは、登録が完了した旨を伝え、ログインページへと促します。

### 全体の流れ

![join_system_architecture-1024×543.png](https://qiita-image-store.s3.ap-northea

元記事を表示

PHPでのログイン機能

## フレームワークを使用すれば簡単に実装できるが…
現在、有名なフレームワークというとLaravelやFuelPHPなどがあります。もしフレームワークを使ってログイン機能を実装する場合、大抵は「(フレームワーク名) ログイン機能」などで検索すればヒットすることでしょう。

### フレームワークのみでは応用が効かない場合がある
実は、フレームワークはあまりにも簡単に機能が実装できるため、いざバグが起きたとしても原因がわからず詰まってしまったり、細かな応用が効かない場合が多いです。内部でどのような処理が行われているのかを把握しないまま簡単に実装ができてしまう、というのが逆にデメリットになります。

## phpのログイン機能実装の流れ
### ユーザーに情報を入力してもらう
ユーザーに情報を入力してもらう為に、htmlで入力フォームを作成し、送信できるようにページを作成する必要があります。

### 入力された情報に対してバリデーションを行う
ここで言うバリデーションというのは、「入力チェック」「書式チェック」のことを指します。例えば、Eメールアドレスであれば、
・アルファベット・

元記事を表示

無料の「最寄り駅検索API」を公開した&30msの高速化手段

最寄りの駅を検索して返却するAPIサービス【NeaREST API】を公開してみたのでご紹介します。
※以前zennに投稿した内容と同じです
– 商用利用無料
– 認証制限なし
– 高速応答
– 最大検索件数20件
## 概要・デモ
以下ページにAPIドキュメントと仕様がありますのでご確認ください。

https://station.ic731.net/docs/near

また、簡単なデモとして今いる位置から最も近い駅を検索するアプリを公開していますのでスマートフォンでお試しください。

https://station.ic731.net/demo/nearest

以下のようなJSONを返却します。

“`json
{
“meta”: {
“status”: “success”
},
“data”: [
{
“station_id”: 9930101,
“station_name”: “都庁前”,
“pref”: “東京都”,

元記事を表示

変数に値が入っているか判定 isset

## 用途
変数に値が入っているかを判定したい時に使う

## 使用方法
“`php:php
if (isset(変数名)) {
// 変数がある場合の処理;
} else {
// 変数がない場合の処理;
}
“`

:::note warn
注意
「変数の値がある場合、且つNULLでない場合」に `TRUE` を返す。
「NULL」または、「値がない場合」は `FALSE` を返す。
:::

元記事を表示

OTHERカテゴリの最新記事