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

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

Laravel Eloquent 不要なデータは取得しないようにしよう!

現在、Laravelの使用経験が半年を越えた学生エンジニアです。

Laraelには非常に便利な「Eloquent ORM」という非常に便利な概念が存在します。
主に以下のような解釈ができると思います。

1. SQLの簡略化
1. データベースへのインターフェース

ざっくりとご説明したいと思います。

## 「Eloquent ORM」と「Model」
LaravelはMVCモデルと呼ばれています。

**Model View Controller**の略です。
1. Modelを用いてテーブルからデータ取得
1. Controllerを用いてデータを処理
1. Viewで処理されたデータを表示

上記の流れで運用されるためです。(厳密にはもっとたくさんありますが!)

上記の1の工程がModelですが、
**Eloquent ORM と Modelはほぼ同義と考えて構いません**

では実際に効率的に書いていきましょう!

## なるべく不要な値を取得しない

“`
$attendances = Attendance::all();
“`
まず、Atten

元記事を表示

vscodeでDocker上のXdebug2を動かす

# 概要
VscodeでXDebug2を使うための設定を行いました。
Dockerを使っています。

※macでの確認はしていません。

githubのリポジトリは以下の通り。

https://github.com/RYA234/php-xdebug2-docker-vscode

# 開発環境

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710623/578a9062-15f0-1e2d-0be4-c0e0102bcfba.png)

名称|バージョン|説明
—|—-|—-
Docker|24.0.6|コンテナ型仮想環境
Windows|10|OS
XDEBUG|2.2.5|PHP用のデバッグ用の拡張機能
VSCODE|1.85.1|IDE
PHP Debug|1.34.0|VSCODEでXdebugを使えるエクステンション。

# dockerの起動方法

“`bash
# dockerコンテナをビルドする
docker-compose build

# do

元記事を表示

今までの業務にて経験したこと

広く浅く今まで触れてきたが、これよりは深く利用するようにキャリアを積んで行く予定。

# プログラミング言語
1. C
組み込み開発プロジェクトの際に利用
1. C#
デスクトップアプリの開発プロジェクト時に利用
1. HTML,CSS,JS,PHP
Webサービス開発プロジェクト時に利用

# 開発ツール
1. eclipse
1. Visal Studio
1. PhpStorm
1. Visual Studio Code

# ツール
1. Redmine
1. Redmine
1. Backlog

※本内容について後日更新を予定しています。

元記事を表示

【PHP/Slim4】3.軽量フレームワーク(Slim4-skeleton) Twig

## やりたいこと
Slim4のテンプレートエンジンを使ってみる
Twigがメジャーっぽいので、なんとなくTwigを使ってみようと思う

## Step1.サンプル環境の構築
[前回の記事を参照](https://qiita.com/miyaken3381/items/a63f70b65a01c8b77225)

## Step2.Twigのインストール
プロジェクトフォルダに移動後、以下のコマンドを実行
~~~js
composer require slim/twig-view
~~~

## Step3.Twigの依存関係を設定
dependencies.phpにTwigの依存関係を注入する
またsettings.phpでパス等の設定を切り替えられるようにしておく
#### app/settings.php
~~~php
return function (ContainerBuilder $containerBuilder) {

// Global Settings Object
$containerBuilder->addDefinitions([

元記事を表示

【2024年版】LaravelでIntervention Imageを使う方法

## 概要

PHPの画像処理ライブラリである**Intervention Image**の**バージョン3**を**Laravel**で使う方法について解説します。

先日、Qiitaの質問で「Intervention Imageがエラーで使えない」というものがありました。私も使ったことがあるので調べてみたのですが、どうやら2023年12月にバージョン2から3へアップデートされたようです。そして、それによって「Laravel Intervention Image」といったキーワード検索でヒットする記事の情報では導入できなくなってしまったので、この記事を執筆することにしました。

https://image.intervention.io/v3

## Intervention Imageのバージョンアップについて

https://image.intervention.io/v3/introduction/upgrade

上記のアップグレードガイドを参照すると、次のように記載されています。

> Intervention Image 3 は、以前のバージョンから引き継がれたコードが

元記事を表示

PHPでMySQLデータベースに接続

# PHPでMySQLデータベースに接続

### プリペアードステートメントとは
実行したいSQLをあらかじめ用意して、可変となるパラメーターは後から渡す仕組み

– プリペアードステートメントでパラメーターを可変にして名前で検索する場合
“`php:sample.php
“山田”)

// プリペアードステートメント
$stmt = $pd

元記事を表示

CakePHP2系の環境構築手順

# はじめに
この記事では、CakePHP2系の環境構築手順を解説します。
以前、私はCakePHP2系の案件に参画しておりました。
案件参画前にプライベートで学習しようと思い、下記の手順で自身のPCにCakePHP2系の環境を構築しました。
記事投稿時点(2024年時点)では、CakePHPの最新バージョンは5系で、2系は既にサポート終了しております。
非常にレガシーな技術であるため、正直下記の情報は役に立たない可能性が高いと予想しておりますが、念のため備忘録として残しております。

# 各技術とバージョン

– PHP 5.6
– MySQL 5.7
– CakePHP 2.10
– MacOS

# ゴール設定

Dockerを用いてCakePHP 2系の環境構築を行い、ウェルカムページが正常に表示されている状態を目指す。
↓ エラーありのウェルカムページと、エラーなしのウェルカムページの比較
【Qiita】ひとりアドベントカレンダー完走率を調査してみたよ

2022年から人数上限なしの[ひとりアドベントカレンダー完走賞](https://qiita.com/advent-calendar/2023/present-calendar#qiita_award)が新設されたことに伴い、2023年はひとりで[アドベントカレンダー](https://qiita.com/advent-calendar/2023/categories)を走る人がそこそこ見受けられました。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/28bbf8e6-6951-8fe3-bbe5-8ceaf8569ada.png)

ということでこれは、何名がひとりアドベントカレンダーに挑戦し、そのうちどれほどが完走したかを調べてみたという嫌がらせ記事になります。

なお調査のためのデータ抽出は2023/12/30に行っています。

# 調査結果

全アドベントカレンダー数、1203件。

うち、参加者がひとりのカレンダー、320件。
うち、完走数、98件。
うち、完走賞ぬ

元記事を表示

取得したページネーション内のデータを逆順で表示したい

### 取得したページネーション内のデータを逆順で表示したい

ページネーションしたデータの、中身を逆に表示したいとき、つまり下を最新のチャット、上を古いチャットにしたい時の方法です。

“`ChatController.php
$chats = Chat::where(‘channel’, $chid)
->orderBy(‘created_at’, ‘desc’)
->paginate(10); // 1ページあたり10件のメッセージを表示
“`
これでデータを取得してBladeに渡します。

bladeでは表示の際に、

“`chat.blade.php
@foreach ($chats->reverse() as $chat)

@endforeach
“`

foreachの中でreverseをするのですね。

#### よく考えると、、
ただよく考えると、foreachの中で$chatを上に追加していけばいいのかと。

参考:ChatGPT

元記事を表示

Webサーバのバージョン隠ぺいの方法及びメリット。

# 概要

Webサーバのバージョンを全世界に公開してしまっていると、セキュリティ上よくない。
例えば、機器の脆弱性は色々なサイトから公表されているが、(以下はZabbix)

https://support.zabbix.com/browse/ZBX-23388

該当のバージョンに対応する脆弱性を検索されてそれを実行されてしまうという恐れがある。

*上記の例だと、ZabbixAgentのバージョンが外から見れてしまうと問題になりそう。
そのため、各サービスのバージョン情報は外部から見れないようにするとよい。
今回は、**apacheとphpのバージョン情報をcurlで見れないようにしていく**手順を記載する。

## 事前確認
対象のWebサーバ宛てにcurlコマンドを実行する。

“`
curl -v –head url
“`
何も対処していないと以下のようにバージョンが表示される。
200OKのすぐ下に、Apacheのバージョンが表示されているのが確認できると思われる。

“`:出力結果
PS C:\Users\daigo.ito> curl -v –head h

元記事を表示

Ubuntu22でNginx+PHP-FPM+Zabbixを使用する

# 方法
“`console
user@dc01:~$ sudo su –
[sudo] password for user:

root@dc01:~# apt install -y nginx php8.1 php8.1-mbstring php-pear php-fpm
root@dc01:~# vi /etc/nginx/sites-available/default
↓下記内容をserver{}内に記載
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
root@dc01:~# systemctl restart nginx php8.1-fpm
root@dc01:~# apt remove -y apache2
root@dc01:~# apt autoremove -y
“`
ここでhttp://<サーバのIP>/info.phpにアクセスして下記画面のようになることを確認してください。

元記事を表示

【Ver6.4対応】zabbixのスクリプトでslackに通知する

## 概要
[以前Macにzabbixサーバを立てた](https://zenn.dev/zuzuzu/articles/mac_zabbix_install)のでそれにslackに通知する機能を持たせる。しかし、1番簡単なwebhookからの通知設定を実施すると[zabbix_serverがクラッシュしてしまう事象](https://www.zabbix.jp/node/1036)が発生する。(ソースインストールした時のオプションが不足していた?)

そこでスクリプトを用いてslackに通知する機能を実装したのでその手順について説明する。

## 手順

### Slackの「Incoming Webhooks」を作成してチャネルに通知するアプリを作る
slackの左下の**アプリを追加する**を押下

![](https://storage.googleapis.com/zenn-user-upload/de95deed8cde-20231230.png)

検索窓で**Incoming Webhooks**と入力してアプリを探し、**追加**を押下
![](https://sto

元記事を表示

【Ver6.4対応】Macへのzabbix installで苦労した話

## 概要
色々あってMacにzabbix_serverを入れて監視サーバをたてる事になった。
Linux系であればパッケージインストールできるが
Macではそういうわけにもいかないのでソースインストールすると
たくさんの罠があったので今後同じ様なタスクが発生した際の備忘録を残す。

## 前提
“`
Host: macOS 13.5
BuildVersion: 22G74
Zabbix version: 6.4

Web: Apache/2.4.58 #後述しますがMac標準のapacheは使いません
Front: PHP/8.3.1
DB: postgreSQL 14.10
“`

## 手順
参考:https://www.zabbix.com/documentation/current/jp/manual/installation/install

### ソースアーカイブのダウンロード
以下のURLから必要なzabbix versionのソースをダウンロードします。
https://www.zabbix.com/download_sources

### ソースアーカイブの

元記事を表示

Azure AppService で Nginx と PHP のバージョンを非表示にしてみた

Azure AppService で Nginx と PHP のバージョン非表示を試してみました。

## 検証用 AppService を用意

“`bash:bash
region=japaneast
prefix=mnrwebtest

az group create \
–name ${prefix}-rg \
–location $region

az appservice plan create \
–name ${prefix}-plan \
–resource-group ${prefix}-rg \
–is-linux \
–sku B1

az webapp create \
–name ${prefix}-app \
–resource-group ${prefix}-rg \
–plan ${prefix}-plan \
–runtime “PHP|8.0”
“`

## AppService の SSH で phpinfo を作成

“`bash:bash
echo “

元記事を表示

[オレオレ10] ヘルパー関数

## 解説
この辺で開発効率を上げるために便利なヘルパー関数を作っていきます。
まずは、そのヘルパー関数が使える仕組みを実装していきます。
※ヘルパー関数はグローバル関数として扱われます。関数名は将来的にも重複しない、重複の可能性が低い名前をつけます。

今回はディレクトリのパスを返すヘルパー関数とデバッグ用の関数をつくります。

## 目次
* Helper.php作成
* path.php作成
* app.php作成
* index.php修正
* View.php修正

## Helper.php作成
“`bash
$ cd /opt/project/stampede/
$ touch supplier/stampede/Helper.php
“`
“`php:Helper.php

元記事を表示

Stripe PHP SDK 顧客にデフォルトの支払い方法をアタッチする際の手順で詰まった

## 概要

Stripeの顧客にStripe.jsを使って追加したクレカ情報のPaymentMethodIdを紐づけてデフォルトの支払い方法に設定しようとしていた。一部でめっちゃ詰まったので簡単にまとめておく。

## 前提

本記事で紹介しているコードは「コピペすれば動く」というものではない。

## エラーになるコード

下記はイケてないコードである。

“`php
/**
* 顧客に紐づくデフォルトの支払い方法を更新
*
* @param UserObject $userObject
* @param string $paymentMethodId
* @return void
*/
private function updateDefaultPaymentMethod(UserObject $userObject, string $paymentMethodId): void
{
$this->makeStripeClient();
try {
// NOTE: 顧客と支払い方法を紐づけ
$this->attach

元記事を表示

blueskyの自動投稿を作ってみたくなり即興で作りました。

# blueskyの自動投稿を作ってみたくなり即興で作りました。
#### 因みにblueskyの[開発ドキュメント](https://atproto.com/community/projects#at-protocol-implementations)に記載されていたライブラリを使用しています。トライしてみて案外簡単に作れたのでライブラリに感謝だと感じました🙇。なお、自分のブルースカイアカウントのpost/3khojypfnf62zとpost/3khok6quxgj23が自動投稿(コマンドラインからの投稿)になります。

https://bsky.app/profile/taoka-toshiaki.bsky.social

![bluesky.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779064/e796676b-7d15-7f5a-8607-d9325d60016f.png)

### 動作環境・sakuraれんたるサーバー・PHP8.2

### 作成手順

①アプリのパスワー

元記事を表示

laravel APIのエンドポイントを作成してリクエスト投げたが原因不明のエラーが出る

## 概要

laravelにてエンドポイントを作成し、Thunder Clientからリクエストを投げた。なんのレスポンスもない500が返された。エラーログにも何も出力されていない。laravel.logにも何も出力されていない。かなり詰まったので自分の場合の原因を載せておく。

## 原因

ControllerとRepositoryで間違えて同じクラス(インターフェース)をDIしていた。

具体的に言うとControllerとRepositoryの`__construct()`で下記のような記載が重複していた。

“`php
public function __construct(
private HogeInterface $payment,
) {
}
“`

一時的にRepository側のDIの記述をコメントアウトして当該のエンドポイントにリクエストを送ったところ問題は解決した。

## 作業の背景

本事象はリファクタ中に発生した。今までリポジトリ層でDIして呼び出していたインターフェースをコントローラーで呼び出せるようにリファクタしていた。

元記事を表示

cakephpを簡単に触ってみる

### はじめに
仕事でcakephpを使うことになりましたので、実際にcakephpを使ってみたいと思います!

### cakephpとは
phpで開発されたフレームワーク。MVCアーキテクチャを採用していてRuby on Railsの影響を受けてる。MVCの流れを簡単に確認しましたので備忘録も兼ねてまとめます。

### cakephpをインストール
とりあえず下記のコマンドでcakephpをインストール
composer create-project –prefer-dist cakephp/app:4 BlogApp

ディレクトリ構成はこんな感じです

BlogApp
|-.github
|-bin
|-config
|-database
|-logs
|-plugins
|-resources
|-src
|-templates
|-tests
|-temp
|-vendor
|-webroot
|-.editorconfig
|-gitattributes
|-.ignore
|-.htaccess

元記事を表示

PHPUnit: dataProvider の使い方

こちらと同様のことを行いました。
[PHPUnit入門①](https://note.com/88gram/n/ncbbd02618f5c)

  1. プロジェクトの作成
  2. “`bash
    $ mkdir test01
    $ mkdir test01/src
    $ mkdir test01/tests
    $ cd test01
    $ touch phpunit.xml
    $ touch src/Calculator.php
    $ touch tests/CalculatorTest.php
    $ composer require –dev phpunit/phpunit
    “`

    フォルダー構造

    “`text
    $ tree -L 2
    .
    ├── composer.json
    ├── composer.lock
    ├── phpunit.xml
    ├── src
    │   └── Calculator.php
    ├── tests
    │   └── CalculatorTest.php
    └── vendor
    ├── autoload.php
    ├── bin
    ├─

元記事を表示

OTHERカテゴリの最新記事