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

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

Vagrant(VirtualBox)でディスクアクセスが遅い問題の対処法

Windows + Vagrant + VirtualBoxでLaravelを動かすと、ローディングにかなりの時間がかかって仕事が進まなかったという問題の対処方法を紹介します。NFSを使用する方法です。

※ これは2020-02-01に個人ブログで公開した記事を移植したものです。

## Virtual Box の共有フォルダ機能は遅い

ホスト側とゲスト側でプログラムファイルなどを共有するためにVirtualBoxには共有フォルダ機能が存在しますが、デフォルトの共有方法を用いるとかなり遅くなります。

仕事でLaravelを使ったWebサイトをVirtualBoxで構築していたところ、Windows環境やMac環境でも1ページ読み込むのに5秒ほどかかり、まともに仕事ができない状態になってしまいました。

![Laravelのデバッグツールのスクリーンショット、Bootingに1.15s、Appに1.03sかかっている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/ac106095-9e40-

元記事を表示

PHP Fatal error: Uncaught Error: Call to a member function prepare() on null

phpでtodoアプリを作っていたら
`
PHP Fatal error: Uncaught Error: Call to a member function prepare() on null
`
というエラーに出くわしたので原因と解決策を記録に残します。
結論から言うと自分の場合は`$pdo = db_connect();`の部分で$pdoオブジェクトが null だったためにこのエラーが発生していました。
# 全体コード
db_connect.phpでDBに接続するコードを書いています。
login.phpでDB接続用の関数を呼び出しています。
“`db_connect.php

元記事を表示

【Laravel】PHPstanを使う

# はじめに

こんにちは、エンジニアのkeitaMaxです。

静的解析ツールのPHPStanのLaravel版のlarastanを使用していこうと思います。

静的解析ツール「Larastan」を導入してみた

この記事を参考に進めていきます。

# larastanをインストールして実行する

まずは下記コマンドでLaravelにlarastanをインストールします。

“`
composer require nunomaduro/larastan –dev
“`

次にcomposer.jsonと同じ階層に`phpstan.neon`を作成します。
“`neon:phpstan.neon
includes:
– ./vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
– app
# The level 9 is the highest level
level: 5
ignoreErrors:

元記事を表示

【PHPフレームワークFlow】パッケージを分けてモジュラーモノリスみたいにしてみる

# 初めに
PHPフレームワークFlowは大規模エンタープライズ向けのWebフレームワークと公式ドキュメントに記載されています。大規模向けと聞くと、モノリシックなソースをイメージしますが、Flowはパッケージを分けることでモジュラーモノリスのような運用も可能なのかなと想像してます。
運用したことがないので想像ベースですが、今回はFlowでパッケージを分ける方法と、そのメリットについてまとめようと思います。

# モジュラーモノリスとは
モジュラーモノリスとはソフトウェアのアーキテクチャの1つです。モノリシックとマイクロサービスの中間に位置し、マイクロサービスのようにランタイムが分かれているわけではないけど、責務や機能ごとにリポジトリ内でモジュールを分割して管理しやすくするというアーキテクチャになります。

以下の記事が分かりやすかったです。

https://r-kaga.com/blog/what-is-modular-monolith

# Flowにおけるパッケージ
Flowでは、パッケージの種類が以下の3つに分けられます。

| 種類 | 説明 |
|:-:|:-:|
| A

元記事を表示

【Docker】PHP(Apache上で動かす)環境を作ってみる

## Dockerの勉強始めた経緯
で、色んなプロジェクトをやってると、
同じ言語やツールでもバージョンが違うとかで、
環境変数を変えたりツールを複数インストールしたりなどで、
PC内がゴチャゴチャしちゃうときってあるよね。
※片付けられない大人なので

### とりあえずPHP環境をDocker化してみる
これまでXAMPP入れてとりあえずで作業してたけど、プロジェクト毎にPHPのバージョンが違ったり、confの設定が違ったり、そもそも本番環境はLinuxなことが多かったりで、Windowsで開発してたりするとなんか違う部分が多いので、当初Hyper-Vで仮想環境作ってとかやってたんだけどISOファイル落として設定してとかっていうのがめんどくさくなったので、Docker流行ってるみたいだし使ってみるかってなったのが経緯。

## とりあえずcompose.yamlを作ってみる
### フォルダ構成
root/
 ├compose.yaml
 ├docker/(他にもNodeとかDBとか入れることを考慮して分けるため)
 │ ├server/
 │ │ ├Dockerfile
 │ │

元記事を表示

PDO(PHP Data Objects)とは?

# PDOとは
PDO(PHP Data Objects)とはデータベースにアクセスするための拡張モジュール、クラスのことです。
PDOを使うことによって、異なる種類のデータベースに対して一貫した方法でアクセスすることが可能になります。
例:MySQL,PostgreSQL,SQLite

# PDOはSQLインジェクションの対策になる
PDOの特徴として**SQLインジェクションを防ぐ**ことができます。
なぜPDOを使うことでSQLインジェクションの対策になるのかよくわからなかったので調べてみました。

PDOを使ったコード例
“`
$pdo = db_connect();
try{
$sql = ‘select * from users where name = :name AND password = :passowrd’;
$stmt = $pdo->prepare($sql);
$stmt->bindParam(‘:name’, $name);
$stmt->bindParam(‘:password’, $password);

元記事を表示

肥大化したバリデーションクラスをちっちゃくしようと改善してみた話

**「なんだかこのクラスめっちゃ触るの嫌だよね」**
という状況よくあると思います。
(もし無いなら良い環境にいらっしゃるんだと思います)

いろんな現場先でいろんなコードを見てきましたが、
非常に修正コストのかかるプログラムがあるのはどこに行っても常にありました。

今回、縁があってそんなプログラムの改善活動をさせていただけたので備忘録的に残しておこうと思います。
フレームワーク的にはLaravelですが他のフレームワークにも応用効く内容じゃかなと思ってます。

# (前提の話)FormRequestってそもそもなんだっけ?
今回の改善対象であるFormRequestクラスについてまずは軽く触れさせてください。

Laravelにはリクエスト内容をバリデーションする仕組みとしてFormRequestを提供しています。
詳しくは公式やreadouble見てもらいたいのですが、
要はバリデーションに関するルールなどをFormRequestをextendsしたクラス内で行うことで
責務を分割しようという仕組みです。

https://readouble.com/laravel/10.x/

元記事を表示

MailHogを使ってユーザーに招待メールを送信する

MailHogの動作確認をしたので、そのメモを残します。

まず、ターミナルを立ち上げ、「mailhog」を実行。

そして、アプリのメール送信画面に移動する。
![スクリーンショット 2023-05-02 10.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/1a402616-3a22-68b0-084b-6963b60e6d56.png)

相手のメールアドレスを入力。
例として、user@gmail.comと入力。
![スクリーンショット 2023-05-02 10.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/5249bb15-3413-4c25-dc92-c9a1288782b9.png)

「送信する」ボタンを押下したら、メールが完了したメッセージを表示させる。
![スクリーンショット 2023-05-02 10.09.17.png](https://

元記事を表示

【phpMyadmin】Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.

## 経緯

Laravelで開発をする準備をしていました。
docker-compose.ymlファイルを編集し、DockerのphpMyAdminにログインしようとしたら、エラーでログインできませんでした。

## エラー内容

![スクリーンショット 2024-02-28 21.41.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/91ac19a9-203b-c35f-ebeb-0bf86269cde6.png)

:::note alert
Google翻訳
セッションCookieの設定に失敗しました。 phpMyAdmin へのアクセスに HTTPS ではなく HTTP を使用している可能性があります。
:::

## 対応

色々と調べて試したことをまとめていきます

– Googleの拡張機能を確認
まだエラー出でいる…

– Laravel Sailを起動する際に –ssl オプションを使用してHTTPSを有効にしてみる
まだエラー出でいる…

– Doc

元記事を表示

intl拡張モジュールが無い環境でCodeIgniter4を動かす方法

# はじめに

CodeIgniter4の動作要件の1つとして、PHPのintl拡張モジュールが有効化されていることが挙げられますが、CodeIgniter4ベースのシステムをレンタルサーバで運用する際、intl拡張モジュールが無い問題にしばしば遭遇します。

intl拡張モジュールが有効化されたレンタルサーバやVPS/IaaSを選択すれば解決しますが、諸般の事情により他サービスを選択できないケースもあり、非常に悩ましい問題であったりもします。(CodeIgniter4に限らず、CakePHPやLaravel等の他のフレームワークやCMS等をレンタルサーバ上で運用する際においても、しばしば悩まされます)

今回、CodeIgniter4のソースコードを書き換えることで、intl拡張モジュールの無い環境でCodeIgniter4を動作させることが出来ましたので、以下に手順を記載します。

# CodeIgniter4のバージョン

CodeIgniter 4.4.6

https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4

元記事を表示

(Mac ARM) ODBCドライバーを利用してPHPでSnowflakeに接続する

# ODBCドライバーについて

Snowflakeへの接続方法としては下記の選択肢があります。

https://docs.snowflake.com/ja/developer-guide/php-pdo/php-pdo-driver

https://docs.snowflake.com/ja/developer-guide/odbc/odbc-mac

私がPHPでSnowflakeに接続しようとした当時(2023-04-13)は、M1 MacでPDOドライバーを利用するにはバグがり、M1 MacユーザーはODBCドライバーを使ってアクセスする必要がありました。
ただし、現在では[release 2.0.0からはARM Macにも対応しているとのこと](https://github.com/snowflakedb/pdo_snowflake/issues/308#issuecomment-1748833910)です!(まだ試していませんが)

ですので、通常はPHP PDOドライバーを利用すれば良いと思いますが、本記事は備忘録として残したいと思います。

# ODBCドライバー

元記事を表示

MAMPが予期しない理由で終了しました。

以前までは普通にMAMPが使えていたのに久々に開いたら
「MAMPが予期しない理由で終了しました。」
!?!?
![スクリーンショット 2024-02-29 8.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655001/3518f01a-33c4-8864-3622-1556adb54daf.png)

# MAMPを再インストールしよう!
macOSがSonomaかつMAMPのバージョンが6.6だとクラッシュする可能性があるらしい?のでMAMPを再インストールしてみたら見事に解消されました。
めでたし。めでたし。
https://x.com/ZeroPlus_Japan/status/1709762126796165192?s=20

元記事を表示

PHP LaravelでRESTful APIを試す

## はじめに
Larvel PHPでRESTful APIのテストをしたときの備忘録です。CRUDの内容は参考URLの通り。

Laravel8で実施しようかとやろうと思いましたが、Laravel10でも同じ書き方でできるのかなと思い、テスト的にLaravel10で実施しています。

## 環境

・Windows11, XAMPP PHP v8.2
・composerのインストール(EXEファイルによりインストール)

https://getcomposer.org/

~~~ powershell:PowerShell
$ php -V
PHP 8.2.12

$ composer -V
Composer version 2.7.1
~~~

## Laravel10 インストール

・Laravel10のインストール
~~~ powershell:PowerShell
$ composer create-project “laravel/laravel=10.*” –prefer-dist (フォルダ名)
~~~

・実行して確認してみる
~~~ powershell:Pow

元記事を表示

CakePHP の beforeSave() で失敗した際、それを何とか検知したい

# はじめに

この前、弊社 CakePHP4 プロジェクトにて beforeSave() で失敗してしまう不具合がありましたが「見かけ上は save() で失敗しているのに Entity の errors には何のエラーも保存されていない…」という困った状態でした。

しかも beforeSave() の処理そのものは Behavior に書いており、 Table クラスには何も書いてなかったので、beforeSave() の存在に気付くのも遅れました。

なので beforeSave() での失敗を何とか検知したいなと思って調べた結果をメモ。

## cookbook を読んでみる

CakePHP4 の [cookbook](https://book.cakephp.org/4/ja/orm/table-objects.html#beforesave) によると

> ### beforeSave
> Cake\ORM\Table::beforeSave(EventInterface, EntityInterface, ArrayObject)
> Model.beforeSa

元記事を表示

サーバー監視アプリを作ろう

## PHP版サーバー監視アプリ

#### はじめに
データセンターのサーバー監視ツールとは「どのようなもの」、
「どのようなことを」をするのか学習させるためにPHPで監視アプリを作ってみました。
最初はWindowsのXAMPPを使用し、データはMysqlで保存、その後Linuxへ移植しています。

#### 必要な機能は
* 監視対象ホストの状態を一目でわかるビジュアルな画面にできる
* イベント発生のログを出力およびメールで通知できる
* 監視対象ホスト群のレイアウトの画面構成がカスタマイズできる
* 監視対象ホストの追加、変更ができる
* Ping死活監視のほか、SNMP監視ができる
* 統計資料としてのグラフが作成できる

#### カスタマイズ例
![visualmonitor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714448/e4911d15-1917-3acb-1919-ebd45a312d1a.png)

#### 画面フレームは
* ヘッダフルーム
上辺部に画像、時計、

元記事を表示

AWS Cloud9でメールを送る方法

# 結論: SESを使え
「Cloud9 メール」でググると、Cloud9はGmailしか送れない、という情報が真っ先に出ると思います。
そう信じて、ローカル環境はGmailでメールを送っていた時期が僕にもありました。

でもそれはAWSに買収される前の話であって、AWSのメールサービスであるSESが使えないわけないだろ、と最近の私は思い直し、
改めて調査してみたところ、SESでもメールが送れました。
# 実装
PHPMailerを使うことで、SESを使ってsmtpプロトコルでメールが送れます。
“`php:_lib/MailSender.class.php

元記事を表示

CodeIgniter3でAWS SESを使ってメールを送る方法

# はじめに
https://qiita.com/qwe001/items/b340628c2aaffbb12e7a

以前、上記の記事を書いたのはCI3でSESを使ってメールを送る方法がわからず、調べる時間もなかったためでした。
phpMailerで送れるならCI標準機能でも送れるはずだと思って、改めて調査しなおしました。
# 実装
以下のようにすれば、CodeIgniter3の標準機能を利用してSESからメールが送れます。
“`php:application/config/email.php
‘CodeIgniter’,
‘protocol’ => ‘smtp’, // AWS SES の場合は smtp を指定すること
‘mailpath’ => ‘/usr/sbin/sendmail’, // Sendmail への

元記事を表示

unset関数を使用して引数の値を消そう

## はじめに
unset関数を使用すれば引数で渡した変数の値を消すことができます。(未定義扱いになります。値がnullになることはありません)

## 使ってみる
“`php
$num = 12345;
var_dump($num);
unset($num);
var_dump($num);
“`
“`
int(12345)
Warning: Undefined variable $num in sample.php on line
NULL
“`
値がないと警告がでました。3行目にNULLが出力されていてなぜかと調べてみると値がない場合NULLを格納してくれるそうです。

ということは値の無い変数を使用してif文を実行した場合elseが処理されるはずです。
“`php
if($num){
echo ‘trueです。’;
}else{
echo ‘falseです。’;
}
“`
“`
Warning: Undefined variable $num in sample.php on line
falseです。
“`
nullが入っている扱いなのでe

元記事を表示

Diving into the World of PHP Web Development

PHP, or Hypertext Preprocessor, is a powerful open-source scripting language that reigns supreme in the realm of web development. Its ability to seamlessly blend with HTML code empowers it to craft dynamic and interactive web experiences. This article delves into the essence of PHP web development, exploring its functionalities, advantages, and the exciting possibilities it unlocks.

## Unveiling the Magic: How PHP Works

Imagine a website that greets you by name, remembers your preferences, and

元記事を表示

PHPのcurl拡張モジュールでDNSやhostsを使わずに名前解決する方法

# はじめに
コマンドラインのcurlでは、`–resolve` オプションを利用することで、DNSやhostsを利用せずに指定されたドメイン(FQDN)の名前解決を行うことができます。

※`-H ‘Host: example.jp’` のようにリクエストヘッダとしてHostを渡すことでも同様の対応は可能ですが、HTTPSの場合SNIを考慮する必要がある(リクエストヘッダとしてHostを渡す方法だけではSNIを考慮することができない)ため、 基本的にはリクエストヘッダではなく `–resolve` オプションを使うのがベターです。

https://everything.curl.dev/usingcurl/connections/name

この方法は、本番環境移行時におけるDNS切替前のリリース前確認(バックエンド内のAPI通信の動作確認)のような場面において非常に役立ちます。また、DNSやhostsの変更が行えない開発環境・検証環境においても有効です(レンタルサーバ、PaaS/FaaS、自分が管理者ではないサーバ等)。

# PHPのcurl拡張モジュールで `–reso

元記事を表示

OTHERカテゴリの最新記事