PHP関連のことを調べてみた2023年11月05日

PHP関連のことを調べてみた2023年11月05日
目次

MVCモデルについて

## はじめに
今回「MVCモデル」を取り上げたのは、Vue+Laravelに関わり勉強することとなったためです。まず初学者ののためMVCについて問われましたが、全く理解わかりませんでした。調べたことをまとめたいと思います。なお、ソースコードを追いながら学習したため、この記事にはソースコードはありません。

## MVCモデルとは
プログラムを役割ごとにModel(モデル)・View(ビュー)・Controller(コントローラー)の3つの機能に分けて管理するソフトウェア設計モデルのこと。MVCは、アプリケーションフレームワークでよく使われているアーキテクチャです。
`MVCは、ユーザーインタフェースをもつアプリケーションソフトウェアを実装するためのデザインパターンである。 アプリケーションソフトウェアの内部データを、ユーザーが直接参照・編集する情報から分離する。そのためにアプリケーションソフトウェアを以下の3つの部分に分割する。Model、View、Controller。
`(Wikipedia)

### Model
データ処理全般を担当します。
– データベースとデータのやりとり

元記事を表示

PHPの新機能Fiber(Fibers)を使ってみる

# 突然ですがPHPのFiber/Fibersってご存知でしょうか?
言うまでもなくPHPというプログラムは、基本的に上から下に向かって記述された順に処理が行われます。
途中で下から上に戻ることや、条件式に従って途中でループを離脱することはありますが、その動作は同期的であって、何らかの応答を待つ場合はその場でプログラムは待機します。
つまり概ねシングルスレッドで逐次処理なわけです。
当たり前ですが、ここで **ごっつ重たい処理(自分の場合は画像変換)を走らせると非常に遅い** です。
それでいてPHPが動作するサーバーのCPUリソースは余っています。
(ここまではPHP初心者がある程度PHPを書けるようになった時の感想です)
さて、PHPは古い言語なので、この同期的でシングルスレッドなプログラムを非同期的に動かす知見がインターネットの各所に転がっています。
代表的なのは **「バッチ処理をexecでバックグラウンドに投げる」** だと思います。
しかしこの方法だとバックグラウンドに投げられた処理の終了をPHP側から知るには、投げられた処理の方でログなりデータベースなりにその旨を記録して

元記事を表示

Laravel8+PHP7.4のプロジェクトを構築

# 課題

PHP7.4も終了しましたが、まだまだ、動いている環境があり、そこに追加したいサービスがあるため、環境構築を行った。

ほとんど、[今更Laravel8+PHP7.4のプロジェクトを構築する](https://zenn.dev/kij/articles/7e6697e6c046bf)を参考にしていますが、

Nodejsのバージョンでsailがビルドできなくなってしまった!

# TL;DR

作成された、“`docker-compose.yml“`ファイルで、“`laravel.test“`の“`build“`の“`args“`に“`NODE_VERSION“`を追加する

“`docker-compose.yml
# For more information: https://laravel.com/docs/sail
version: ‘3’
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/7.4

元記事を表示

routeの分割について

## 前置き
初学者です。
調べながらコードを書くことが大半な自分ですが、「理解も大切だけど手を動かして指に覚えこませることも重要」と考えているので、2、3分で確認しきれることを念頭に書いています。
執筆する時もスピード重視なので、かなり崩して書いています。
知識も虫食い状に習得していると自覚しているので、それおかしいぞという部分があれば、ご指摘いただけますと幸いです。

## routeファイルの分割
routeを一つのファイルにまとめる→routeがいっぱいになって可読性が最悪
⇒じゃあrouteをわかりやすい名前のファイルでわけて、すっきりさせちゃえばいいじゃない
 \\\ routeファイルの分割 //

## やり方

`app/routes`配下にファイルを作る。
routeファイルを作るコードは知らんので手作業でえっちらおっちら
routeファイルにcontrollerファイルをuse。

※webとapiでファイルをわけること。
 ファイルは名前を見ただけで何をやってるのかどういった役割を持っているのかわかるようにしよう。

例)
“` php
// ここはapp/

元記事を表示

Docker PHP:8.1 ImageMagick で PDFを画像に変換

# やろうとしていること
・Docker環境内にImageMagickをインストール
・PHP(Laravel)でPDFを画像に変換

# 環境情報
PHP:8.1
Laravel:10.22.0

# Dockerfileへの記述

Docker環境内にimagemagickをインストール
phpのモジュールにImagickを追加

“`Dockerfile
RUN apt-get update \
&& apt-get install -y \
libmagickwand-dev imagemagick \
&& pecl install imagick \
&& docker-php-ext-enable imagick
“`

# Dockerの起動し直し

“`terminal
// 起動しているコンテナを停止
docker-compose stop

// 過去のコンテナを削除
docker rm docker ps -a -q

// dockerイメージの一覧表示
docker images

// 削除するイメージを選んで削除
docker rmi 【IMAGE

元記事を表示

[PHP] 「Fatal error: Class ‘…’ not found」に陥ったときのチェック項目

さっきまで快適に作業してたのに、ちょっとファイルいじったら Class not found になったんです!

というときの対処方法です。

# 基本のチェック

まずは以下の記事からの抜粋です。

https://qiita.com/suin/items/752f3721c4b9084fef4e

## vendor/autoload.phpをrequireしているか?

「さっきまで動いてたんです :joy:」 → 該当せず

## composer.jsonにautoloadの定義を忘れていないか?

「さっきまで動いてたんです :joy:」 → 該当せず

## vendor/composer/autoload_*.phpの内容が最新になっているか?

以下のコマンドを実行……

“`console
$ composer dump-autoload
“`

……解決せず

## スペルミスは無いか?

「クラス名変えてません :joy:」 → 該当せず

## いま作業しているディレクトリは実行環境のものか?

「さすがに大丈夫っす :joy:」 → 該当せず

# さら

元記事を表示

Livewireでバイディングされる値が表示されない時の解決法

# 【結論】値が表示されないのはバリデーションの設定がないから
毎回かどうかわからないが、フォームコンポーネントを作っていて、前にもこんなんあったなとなったやつ。
以下のように、wire:modelの指定は間違いないし、`dd()`や`dump()`を使って値がきちんと渡ってきているところまで確認ができているのにテキストボックスの初期値が表示されない。
“`



@error(‘model.name’)

元記事を表示

rockylinux8.8のコンテナイメージでapache2.4+PHP7.4でサンプルページを表示させるまで

## コンテナ起動~apache導入まで

### イメージの取得
“`docker
docker pull rockylinux:8.8
“`

### コンテナの起動およびbashで接続
“`docker
docker run -dit -p 80:80 –name rocky rockylinux:8.8
docker exec -it rocky /bin/bash
“`

### パッケージの更新
“`bash
dnf -y upgrade
“`

### apache/PHPのインストール
“`bash
dnf -y module install httpd
dnf -y module install php:7.4
“`

### ssl.confのリネーム
そのままapacheを起動しようとするとSSL関連ファイルが無いと怒られる。
“`
[root@95c8a58dc340 /]# httpd -k start
AH00526: Syntax error on line 85 of /etc/httpd/conf.d/ssl.conf:
SSLCe

元記事を表示

手っ取り早くVSCodeでPHPファイルをブラウザ実行

# 準備

この手順は1回だけ行います。ファイルを実行しようとする際に毎回行うものではありません。

1. [PHP Extension Pack](https://marketplace.visualstudio.com/items?itemName=xdebug.php-pack)をインストールします。
1. VSCodeでphpファイルが入った**フォルダ**を開きます。このとき、ファイルではなくワークスペースとして開きます。
1. サイドパネルから**実行とデバック**タブを開き、`launch.jsonファイルを作成します`を押します。
1. PHPを選択します。
1. 以下の内容で`launch.json`を保存します。

“`json
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “Launch Built-in web server”,
“type”: “php”,
“request”: “launch”,

元記事を表示

Livewire3にアップグレードすると、ページネーションのクリック後のスクロール動作を指定できる

# Livewire3でそのままページャーを実装するとTOPにスクロールされてしまう
[前回記事](https://qiita.com/limtae/items/c5ea2ad6e48ba0baa62b “Livewire3.0にアップグレードするとモデルのプロパティを直接バインドできない件”)でも書いたが、Livewire3にアップグレードする際は色々と落とし穴が多いので、しっかりアップグレードガイドを読んでおいた方がいい。

今回遭遇したのは、ページネーションのボタンをクリックするとページTOPにスクロールされてしまう現象。これは、実際のページネーションのテンプレートを見ると一目瞭然。

“`
@php
if (! isset($scrollTo)) {
$scrollTo = ‘body’;
}

$scrollIntoViewJsSnippet = ($scrollTo !== false)
? <<

元記事を表示

【画像処理ソフト】ImageMagickとImagickインストールに関する備忘録的な何か

こんにちは。
一日一回OOM killer システムソリューション部のかわです。

先日LinuxマシンにImageMagickをインストールすることがあったんですが、
初見というのもあってこれがなかなか苦労しました。まず情報があんまり落ちてない。
落ちててもOSが違ったりバージョンが古かったり方法が全く違ったり。
パッケージ依存関係でエラーが出るたびに縺�o縺ゅ≠縺ゅ≠縺ゅ≠縺ゅ≠

これは、AlmaLinux8環境でうまくいった際の備忘録である。後世の誰かの役に立ちますように

▼ブログの詳細はコチラ▼

【画像処理ソフト】ImageMagickとImagickインストールに関する備忘録的な何か

***

■ 株式会社ビヨンド
・コーポレートサイト:https://beyondjapan.com​​​
・採用サイト:https://recruit.beyondjapan.com
・Youtube(びよまるチャンネル):https://www.youtube.com/@beyomaruch
・X(Twitter):https://twitter.com/beyondjapa

元記事を表示

GitHub Copilot と一緒にPHPでガチャAPIを作ってみた!

初めまして。

記事を開いていただきありがとうございます。

システム開発部のしんたです。

ここしばらく ChatGPT などのAI技術の発展がすさまじく面白い時代になってきましたね。

そんな大AI時代に取り残されないために、今回は GitHub Copilot を使ってコーディングを行ってみました!

▼ブログの詳細はコチラ▼

GitHub Copilot と一緒にPHPでガチャAPIを作ってみた!

***

■ 株式会社ビヨンド
・コーポレートサイト:https://beyondjapan.com​​​
・採用サイト:https://recruit.beyondjapan.com
・Youtube(びよまるチャンネル):https://www.youtube.com/@beyomaruch
・X(Twitter):https://twitter.com/beyondjapaninfo
・Instagram:https://www.instagram.com/beyondjapan_24365

・クラウド予約システム EDISONE(エジソン

元記事を表示

[Laravel] シングルアクションコントローラで責務を分割する

# 導入

Laravelでルートに関する処理を記述する場合、以下のように操作する対象のオブジェクト毎にコントローラクラスを生成し、ルート毎にメソッドを作るのが一般的かと思います。

“`php
namespace App\Http\Controllers;

use App\Models\User;
use Illuminate\View\View;

class UserController extends Controller
{
/**
* Show the profile for a given user.
*/
public function show(string $id): View
{
return view(‘user.profile’, [
‘user’ => User::findOrFail($id)
]);
}
}
“`

ルート定義は以下のようになります。

“`php
use App\Http\Controllers\UserControl

元記事を表示

PHPでよく起こるエラーと対処方法

プログラムを書いていると必ず出会うのがエラーです。
エラーはちゃんとログを読めば、何が原因でエラーが起きているか分かるので怖いものではないです。
(ただ、初心者の頃はエラーが出ると、分からなくて困っていた記憶があります)

このあたり慣れると感覚でできますが、慣れるまでは難しいと思ってしまうところです。
**なので、日本語ベースでだいたい「どういうエラーが起きるのか?」を知っておくと、解決するのが早くなります。**

前提として、どんなエラーが起きているか分かっているのと、分からないのとでは、全く違いますからね。
(これはプログラミング以外のことでも同様です)

## PHPでよく起こるエラーと対処方法

### 文法的に書き方が間違っている

初心者にあるあるなエラーですが、ネストが深くて分からなくなってしまうケースもあります。
**基本的に、始めたら閉じるのがプログラミング言語の書き方では重要です。**
({}とか()とか””とか;とか)

あとは、変数の宣言やコードの途中に全角で文字が入ってしまっているケースですかね。
スペースが全角になっていると見つけるのが大変なので、VSCo

元記事を表示

数値、文字及び文字列リテラルなしでHello Worldを出力する

出題当時に盛り上がっていたのを思い出しました
改めて回答してみました

# 問題文

https://github.com/cielavenir/codeiq_problems/blob/master/q431/editorial.md

> 標準出力に Hello World と出力するプログラムを作成して下さい。
>
> ただし、数値、文字及び文字列リテラルを解答に含めることはできません。 Perlのqqやqw、Rubyの%Q、%q、%wなども避けたほうが評価が高くなります。 言語仕様をフル活用して下さい!

ご自身で考えてみる方向けに、解答例の記述までにいくらか行を空けておきます

よろしいですか

# 解答例1

“`php

元記事を表示

【PHP・Laravel・Rails】これまで学んだフレームワーク・言語でのsessionの使い方振り返ってみた

# 概要
この記事では私がこれまで学習してきたPHP、Laravel、Ruby on Railsでのsessionの使い方について紹介していきたいと思います。
# 対象とする読者
– 様々なフレームワークや言語でのsessionの使い方の違いについて知りたい方
– PHP、Laravel、Ruby on Railsでのセッションの基本から詳細な使い方を学びたい方
– 初学者の方
# PHP
以下がPHPでのsessionを使う際のサンプルコードです。
“`php
session_start();//sessionのスタート
if (!isset($_SESSION[‘count’])) {
$_SESSION[‘count’] = 0;
} else {
$_SESSION[‘count’]++;
}
“`
`session_start()`関数でセッションのスタートをします。
セッションを開始すると、PHP はスーパーグローバル`$_SESSION`にすべてのセッションデータを格納します。
通常は、PHP がスクリプトの処理を終了するときに、セッションは自動的に終了します

元記事を表示

PHPの時間や日付について基本的な点

## time()
今の時間(サーバーの時間)を返す。
返り値はUNIXタイムスタンプ(1970年1月1日からの秒数)。

引数は設定できない。
また、現在の時間しか取得できない。

## date()
引数なしはエラーになる。
第一引数にフォーマット(表示形式)を指定する。
“`demo.php
date(‘Y-m-d H:i:s’); // 2015-07-12 17:41:00
“`
第二引数にUNIXタイムスタンプの変数を指定すれば、「指定した時刻の日時を取得」することができる。
“`demo.php
$foo = strtotime(‘2015-07-12 17:41:00’);
date(‘Y-m-d H:i:s’ , $foo);
“`
ここで使われている’strtotime()’は、引数に日時を指定すると、UNIXタイムスタンプの値を取得できる。
“`demo.php
strtotime(‘+30 day’ , $foo); // $fooの30日後の値を取得
“`
ただしstrtotime()の挙動はつかみづらい。
+1 month などの「1ヶ月」の概念

元記事を表示

PHPUnit 9のデータプロバイダメソッドに引数の指定ができるぞ!(でも、PHPUnit 10では非推奨、PHPUnit 11以降は使えない)

## はじめに

PHPUnit9までのデータプロバイダメソッドに引数の指定ができる事にたまたま気づいたので調査結果を残しておきます。

## 環境

– PHP 8.2.12

## さっそく確認してみる

つぎの検証用コードで確認してみます。

“`php:PHPUnit9DataProviderMethodTest.php

元記事を表示

【PHP】億単位の数値を綺麗にする。一部漢字表示を使う

# コード
“`PHP
0 ? number_format($oku). ‘億’ : ”),
($man > 0 ? number_format($man). ‘万’ : ”),
($sen > 0 ? number_format($sen) : ”)
])) ?: ‘0’;
echo $result.PHP_EOL;
}

“`

# 結果
“`javascript
1億2,000万1
2,00

元記事を表示

SPIRAL v1の「マイエリア」エラーページ

スパイラル株式会社(旧:株式会社パイプドビッツ)のローコード開発プラットフォーム「SPIRAL® ver.1」を利用した開発のハック(工夫)。
https://www.pi-pe.co.jp/spiral-series/spiral-suite/

SPIRALでは一部ページはPHP 7.4で実装が可能。
「マイエリア」Webオブジェクトでは①ログイン画面、②エラー画面、③カスタムページなどが設定できるのだが、
②のエラー画面が曲者で、 **エラー画面はPHPが利用できない静的ページ** で、一部Javaサーブレット差替えキーワードによって置換されるのみとなる。
且つ、「ログインエラー」「ログインロック(連続PW誤り)」「セッションエラー」など複数のエラー画面に分かれていて「同じ文言を繰り返し記述」する必要がありヒューマンエラーを誘発する作りとなっている。
実装したからには確認・テストが必要で、複数の設定は修正漏れ等も発生しやすいため、極力まとめてしまうのが一番でシンプル化を推進したい。

よって、対策として、以下のように「ログインページのURLにPOSTリダイレクト」して、ログイン画

元記事を表示

OTHERカテゴリの最新記事