PHP関連のことを調べてみた2021年12月23日

PHP関連のことを調べてみた2021年12月23日

PHP の各バージョンを検証するための docker-compose

PHPのアップグレードのために細かい動作を確認したくて、
1つの docker-compose に検証用環境全部詰め込んでみました

## 検証用の docker-compose ファイル

“` docker-composel.yml
version: ‘3’
services:
php-8.1:
image: “php:8.1-cli”
stdin_open: true
php-8.0:
image: “php:8.0-cli”
stdin_open: true
php-7.4:
image: “php:7.4-cli”
stdin_open: true
php-7.3:
image: “php:7.3-cli”
stdin_open: true
php-7.2:
image: “php:7.2-cli”
stdin_open: true
“`

ファイルはこれだけ
`stdin_open: true` をつけているので

“`
inspect_php
– docker-com

元記事を表示

Symfony版Livewireこと、Live Componentさん

[Symfony Advent Calendar 2021の](https://qiita.com/advent-calendar/2021/symfony)記事です。
今回はSymfony UXの新機能、Live Componentについて書きます。

## Symfony UXとは
なるべくサーバサイドのことに注力できるように、フロントエンドのUXに関するJavaScriptとサーバサイドをうまいこと繋ぎ込んでくれるライブラリ群です。
composerでサーバサイド側のプログラムとnpmパッケージをダウンロードして利用します。
2021年12月現在、以下が用意されています。

| name | 内容 |
|—|—|
| UX Chart.js | Chart.jsがいい感じにつかえるやつ |
| UX Cropper.js | Cropper.jsがいい感じにつかえるやつ |
| UX Dropzone | ドラッグ&ドロップでファイルアップロードできるようにしてくれるやつ |
| UX LazyImage | 画像遅延読み込みをいい感じにしてくれるやつ |
| UX Sw

元記事を表示

【PHP】データベースを使わずにログイン機能を作ってみる

# はじめに
「**データベースを構築して運用するほどではないけど、ログイン機能を実装して簡単なシステムを作りたい**」と思ったことはありませんか?
実装したいシステムのユーザ数がそれほど多くない(~数十程度)なら、データベースを作らなくても、「**BASIC認証のしくみ**」×「**テキストベースのユーザーデータ保存**」を使えば、最低限のセキュリティを考慮したログイン機能が作れます。
セキュリティ対策を万全にするにはデータベースを使うのが通例だと思いますので、実装したいシステムとユーザーが扱うデータに機密情報が含まれるようなものは作らないでください。

PHPでログイン機能を作るときデータベースと連携してユーザー情報を扱う方法はたくさん紹介されているので、あえてデータベースを使わずにログイン機能を実装する方法を紹介します。

# どんな方向けの記事か

– PHPが動作するレンタルサーバを契約し、**自前のHTMLを作成してWebサイトを運営している方**
– サーバのデータベースに利用制限があるがログイン機能を実装したい方
– データベース構築の知識があまりない方
– さくっと簡

元記事を表示

【Laravel5系】同じテーブルの外部キーを2つ持つテーブルのリレーション

#やりたかったこと
ツイッタークローンのアプリを作成中。
ユーザのフォロー・フォロワーの管理をするfollowsTableから、ログイン中のユーザのフォロー人数、フォロワー人数がほしい。

#マイグレーション
usersのidをずっと「increments」にしててmigrateでエラーになってた。
→followsの「unsignedBigInteger」に合わせたら解消した。(合ってるのかな?)

– usersTable

“`create_users_table.php
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘users’, function (Blueprint $table) {
$table->unsignedBigInteger(‘id’)->auto

元記事を表示

CarbonのSetTestNowの仕様変更

`Carbon::setTestNow()`で現在時刻を固定し、`Carbon::now()`で固定した値になっているかを確かめる以下のようなテストがあります。

“`php
format(‘Y-m-d H:i:s’),
Carbon::now()->format(‘Y-m-d H:i:s’)
);
}
}

“`

つい最近まではこのコードで問題なかったのですが、最近の`Carbo

元記事を表示

PHP 真偽値の判定 個人メモ

# 目的

– PHPにおける真偽値の判定方法をメモ的にまとめる

# 真偽値の判定アレコレ

– そのままif文の判定箇所に入れる。

“`php

元記事を表示

PHP8.1で利用可能になった$_FILESのfull_pathを試してみた

随分前に「[<input type=”file”>でディレクトリを丸ごと送信したい](https://qiita.com/akase244/items/f5f7287cfe28bebe00fc)」という記事を書いたんですが、この時点ではディレクトリ構造をサーバー側で受け取るには送信時にクライアント側で別途対応する必要があり少々面倒でした。

[PHP 8.1.0がリリース](https://www.php.net/archive/2021.php#2021-11-25-1)され、その新機能の中でスーパーグローバルの `$_FILES` に `full_path` という項目が追加されました。これによりアップロードしたファイルのディレクトリ構造の情報を取得することができるようになりました。

– 参考URL
– [複数ファイルのアップロード](https://www.php.net/manual/ja/features.file-upload.multiple.php)
– [Directory Uploads in PHP 8.1](https://php.

元記事を表示

docker-laravel の Docker 構成をちゃんと理解する【Dockerfile 編 – PHP】

昨日は[ブッチ](https://zenn.dev/t_kitamura)さんのミライトデザインに入ってからの1年を振り返る記事でした。

https://zenn.dev/t_kitamura/articles/3b85d2c331f0ad

ブッチさんとはお互いがミライトデザインに入る前から知り合いだったので、今同じ会社で仕事をしているのが不思議な感じですね。

## この記事について

@ucan-lab さんの [docker-laravel](https://github.com/ucan-lab/docker-laravel) をちゃんと理解したいので調べるという目的の記事です。

https://qiita.com/tkek321/items/9c0c5cec1dc349c67f5f

前回の記事では飛ばしていた Dockerfile について調べていきます。

docker-compose.yml の他の記述に関しては前回の記事で解説しています。

## Dockerfile のコマンド

各 Dockerfile の詳細を見る前に docker-laravel で使わ

元記事を表示

Laravelのログを一日より早くローテーションさせる

「[PONOS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ponos)」22日目の記事です。
昨日は[@abcdeff](https://qiita.com/abcdeff)さんの記事でした。
# ログがスゴイ貯まる
最近Laravelのログがすぐインスタンスを圧迫するサービスが出てきたので、毎日ローテーションするかつ1日分のログしか残さない運用をしていました。
しばらくは順調だったのですが今度はローテーションする前に満杯になるようになってきました。
Laravelデフォルトのログ設定では`daily`しかない、困った。
というわけで時間毎にローテーションさせるための設定を作成しました。
# Hourlyローテーション
Laravelのログ設定で`daily`を選ぶと`Monolog\Handler\RotatingFileHandler`クラスが使われるので、これを少しいじって1時間毎にローテションされるようにします。
まずは`RotatingFileHandler.php`を適当な場所にコピーしてきて以

元記事を表示

[MySQL] too many placeholders の解消

##php/Laravelでのクエリ発行はEloquent/Query Builderを使用してDB処理を行うことが多い
と思います。

それを使用するとクエリで使用する文字列をインジェクションができないようにクリーンにすることなくSQLにバインドすることができるので、非常に便利。シンプルなSQLであれば直感的に記述しやすいですね。
__使いやすい反面、SQLデータにバインドするデータの量は注意が必要__ です。

##MySQLのプリペアドSQLで使用できるplaceholderは65,535 (2^16-1)個までしか使えない
という制約があります。制約の数を超えてSQLは実行エラー`Prepared statement contains too many placeholder`になります。

リストをフィルタしたとの結果に対して全チェックして処理をしたい場合に、対象データの数、更新対象カラムが多いとMySQLを利用したアプリケーションだと対応が必要になります。
***
今回の事象は一括更新処理にて発生しました。
記述されている処理の内容、対象データとしては下記のような状態でした

元記事を表示

PHP で簡単なインタプリタをつくる

この記事は [オープンロジアドベントカレンダー](https://qiita.com/advent-calendar/2021/openlogi) の5日目の記事です。

## はじめに

最近読んだ [Go言語でつくるインタプリタ](https://www.oreilly.co.jp/books/9784873118222/) という書籍がとても面白かったので、復習も兼ねて弊社のサーバーサイド開発で利用されている PHP で再実装してみようと思います。インタプリタといっても、今回は四則演算のみをサポートする簡易なものに留めます。

例えば、 `1 + 2` という入力を受けると、`3` という出力を返します。スペースは含まれていても無視されます。

“`bash
$ ./run.sh
> 1 + 2
3
“`

また、優先順位もサポートします。例えば `1 + 2 * (3 + 4)` を受けると `15` を返します。

“`bash
$ ./run.sh
> 1 + 2 * (3 + 4)
15
“`

完成したソースコードは [こちら](https://github.c

元記事を表示

LAMP環境で「?(つちよし)」をDBに格納するのに手こずった話。(MariaDB)

## 初めに

こちらの記事は、私が「寿司ビール問題」を解決した方法です。
サーバーの設定を触っておりますので、お試しの際は開発環境などで正常な動作を確認後に行なってください。
いきなり本番環境でサーバーの設定を変更しないようにお願いします。(そんな人いないと思いますが一応)

## 似て非なる問題寿司ビール問題
寿司ビール問題は結構有名なので調べていただいたらすぐにたくさん記事が出てくると思います。

簡単に言うと、以下の絵文字が同じモノとして扱われる的なことです。
?=?
ちなみに僕は、吉野家の「?(つちよし)」をDBに格納したくて試行錯誤しました。

エンジニア初学者の僕は
「文字コードはUTF-8やろ」
ぐらいに思っており、深く考えたことはありません。。。(だめだめです。)

調べてみると、文字コードは符号化文字集合、文字符号化方式の二つの要素があるらしい。
▼符号化文字集合
用いる文字の集合のこと、またその文字の対応する識別子のこと。Unicode,JIS X 0213などのこと。

▼文字符号化方式
上記の文字集合で得た識別子を符号化するときに用いる方式のこと。つまりエンコ

元記事を表示

Carbonの「CarbonPeriod」を使ってみたよ。

## まず初めにCarbon とは

phpで日付処理を行う時にとっても便利なのがCarbonです。
今日の日付や指定した日付など、支持してあげれば欲しい日にちを持ってきてくれます。

### 使えるようになるまで(インストール)
“`
composer require nesbot/carbon
“`

“`
//Laravelなら、利用したいファイルでuseしよう
use Carbon\Carbon;
“`

## 基本的な利用法

“`php
$date = new Carbon();
$date = Carbon::now(); // 現在時刻
“`

とまぁ、こんな感じで便利に利用できるのがCarbonさんです。
今回は、Carbonさんを利用して以下のような配列を作ってみようと思います。

“`
現在 2021年12月14日
array:49 [▼
0 => “2019年12月”
1 => “2020年01月”
2 => “2020年02月”
3 => “2020年03月”
4 => “2020年04月”
5 => “2020年05

元記事を表示

Laravel5.5にて、Authのログイン後にアクセス元にリダイレクトする処置

さっと書きます。
今回実装したいのは、
ログインが必要なページにアクセスした際ログイン画面にリダイレクト
↓
ログイン
↓
アクセスした元のURLにリダイレクトされる
といった簡単な内容です。

すぐ答えです。以下です。
Laravel 5.5の場合、LoginController.phpを更新するだけで次のコードが機能しました

“`php
public function showLoginForm()
{
session([‘link’ => url()->previous()]);
return view(‘auth.login’);
}

protected function authenticated(Request $request, $user)
{
return redirect(session(‘link’));
}
“`

セッションに残して、それにリダイレクトさせる簡単なコードで実装できました。
参考文献
https://www.it-mure.jp.net/ja/php/laravel-5%E3%83%AD%E3%82%B0%E3%

元記事を表示

PHPで期間(日時)に応じて表示内容を自動的に切り替える

日時によって表示内容を変える

“`

2021年12月21日 13時前です。

2021年12月25日 17時半前です。

2021年12月25日 17時半前を過ぎました

“`

元記事を表示

PHP

ユーザー定義関数
渡された値を指示通りに処理し、結果を吐き出す
処理の材料となる値を引数(パラメータ)、結果を戻り地(返り値)という。

function seiza($a, $b){
if((($a == 3) && (21 <= $b && $b <= 31)) || (($a == 4) && (1 <= $b && $b <= 20 ))){ return "牡牛座"; function → 関数の書き始めを宣言 seiza → 関数名。自分でつける。 ($a, $b) → 引数とする変数。 { } → 実行される処理 $m = isset($_POST['month']) ? $_POST['month']:''; $d = isset($_POST['day']) ? $_POST['day']:''; if($m && $d){ $s = seiza($m, $d); print "$m 月 $d 日生まれは $s で

元記事を表示

Laravelでコメント機能を実装する

# はじめに
Web系自社開発企業への転職を目標にLaravel+VuejsでWebアプリケーションを作成しています!
今回は、Laravelでコメント機能を実装するまでの流れを解説していきます。

# 目次

1. [モデルを作成](#Chapter1)
2. [リレーションを設定](#Chapter2)
3. [ルーティングを追加](#Chapter3)
4. [コントローラーを作成](#Chapter4)
5. [ビューを作成](#Chapter5)
6. [参考教材](#reference)



# モデルを作成

– Commentモデルとマイグレーションファイルの作成

“`
php artisan make:model Comment –migration
“`

– マイグレーションを編集

“`php

元記事を表示

VSCodeのPHP Intelephenseで構文エラーが消えない問題

## 環境

– MacBook Pro(Catalina 10.15.7)
– VSCode(1.63.2)
– PHP(8.0)
– Docker Desktop(4.3.1)

## はじめに

普段はフロントエンドメインの開発を行なってますが、Laravel で API 周りの実装もしないといけなくなったので、使い慣れてる VSCode にいくつか PHP の Extension を入れてみました。
その中で、ハイライト、コード補完、構文チェックなどなど、開発にあたり一通りの機能が揃ってて、評価の良い [PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client&ssr=false#overview) も導入しました。
機能としては申し分なく期待通りだったんですが、なぜか、PHP8.0 から導入されたであろう名前付き引数で、変数名が補完されるにも関わらず構文エラーが発生。

![スクリーンショット 2021-12-21 9.27

元記事を表示

【Python・PHP】SQM-LEを用いて夜空の明るさを測ってみた

#初めに
夜空の明るさを計測するために、[Sky Quality Meter – LE](http://unihedron.com/projects/sqm-le/)を使用する。
マニュアルやサンプルコードは[公式サイト](http://unihedron.com/projects/darksky/cd/SQM-LE.html)からダウンロードした。
設置やIP固定はマニュアルや[国立天文台の公開しているPDF](http://globeatnight-network.org/presentations/03%20configuration%20and%20installation%20of%20SQM-LE%20unit%206.pdf)を参照すること。

>SQM-LEとは:[国際光器](https://www.kyoei-osaka.jp/SHOP/unihedron-sqm-le.html)より引用
>リモート制御が可能な「SQM-LE」夜空の「暗さ」を測定しましょう!
しかもこの「SQM-LE」は、インターネット回線を通じてリモート制御で「星空」の暗さを数値化出来てしまいます

元記事を表示

Apache2.4 + Laravel6 + PHP8 + Windows サーバーで 502エラー

#はじめに
Windowsサーバーで、Apache + laravelの502エラーのときの対処方法についてまとめます

#環境
– Apache2.4
– Windows10
– laravel6
– PHP8.1

#502のエラーログ
以下のエラーログが`C:\Apache24\logs\error.log`ファイルで確認されていました。
windows環境では、「子プロセスの最大数は1」、この子プロセスでは、デフォルトで64のスレッドを生成可能とのことだが、これだと足りないため、再起動している?という意味かと推測しました。
windowsとApacheの組み合わせ特有のもののようです。

“`C:\Apache24\logs\error.log
#Webサーバは再起動処理を開始します。
[mpm_winnt:notice] [pid 1964:tid 760] AH00428: Parent: child process 2560 exited with status 3221225725 — Restarting.

[mpm_winnt:notice] [pid 196

元記事を表示

OTHERカテゴリの最新記事