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

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

Laravel11.x HttpファサードとFakeを使って外部サービスのモックテストをする

## 結論
Httpのファサードをテストしたい時は下記のようにする

### 被テスト側
“`php:HogeController.php
json($response->json());
}
}
“`
→そのまま実行すると、404エラーになる
Routeは割愛

### テスト側
※PestPHPで記載しています
“`php:HogeTest.php

元記事を表示

【Laravel11】Roach PHPの The current node list is empty. エラーについて

# はじめに

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

今回はRoach PHPを使用していた時に`The current node list is empty.`というエラーが出た時の話をします。

# エラー内容について

スクレイピングを実行した時に以下のエラーが出ました。

“`
The current node list is empty.
“`

実際のコードは以下のような感じです。

“`
$subtitle = $response
->filter(‘main> div:nth-child(2) p:first-of-type’)
->text();
“`

サンプルと同じですが、指定しているURLを修正したので、`’main> div:nth-child(2) p:first-of-type’`ここでしている要素では` ->text()`がとれずにエラーになってしまっているようです。

# 解決策

解決策は簡単で、エラーが出ている箇所が以下のようにInvalidArgumentExceptionをthrowしているため、エラーをキャ

元記事を表示

Docker Compose を使って App / DB / Mail コンテナの開発環境を構築する

# はじめに
この記事では、Docker Compose を使って App / DB / Mail コンテナの開発環境の構築手順について記載します。

https://docs.docker.com/compose/

以下の記事では、 Docker Compose を使わずに構築する手順を記載しています。
また、構築する開発環境の要件や各種リソース情報もこちらの記事に記載があります。

https://qiita.com/Yasushi-Mo/items/6a4d1af9c7cdb3c68ce1

# 開発環境
開発環境は以下の通りです。

– Windows 11
– Docker Engine 26.1.1
– Docker Compose 2
– PHP 8.3
– MySQL 8.4.0
– Mailpit 1.18

# compose.yaml を作成する

## ファイルを作成する
まずはプロジェクト直下に `compose.yaml` を作成します。

“`powershell
├─compose.yaml
├─docker
│ ├─app
│ ├─db

元記事を表示

新たに気づいたissetとemptyの違い(PHP)

タイトルのとおりですが、emptyとissetの違いで今さらながらに気づいた部分があったので、メモとして残しておきます。

## やりたかったこと

– $hogeが空の配列
– falseにしたい
– $hoge[‘foo’]がtrue
– trueにしたい
– $hoge[‘foo’]がfalse
– falseにしたい

上記の条件を満たしたかった
## 結論

“`php
$hoge = array(‘foo’ => false);
if (!empty($hoge[‘foo’])) {
echo ‘true’;
} else {
echo ‘false’;
}
// falseが表示される

$hoge = array(‘foo’ => false);
if (isset($hoge[‘foo’])) {
echo ‘true’;
} else {
echo ‘false’;
}
// trueが表示される
“`
`isset`だと`$hoge[‘foo’]`がfalseのときでも`true`が返ってしまいます…
`!empty`だ

元記事を表示

PHPでX APIを利用してフォロー数、フォロワー数を取得

XのAPIが有料化されてから初めて触りました。
今となっては、なかなか使う機会もないけどメモ。

# ライブラリ
https://github.com/abraham/twitteroauth

“`
composer require abraham/twitteroauth
“`

## XのAPI関連キーが4つ必要
①APIキー
②API Key Secret
③Access Token
④Access Token Secret

## プログラム
“`
$connection = new TwitterOAuth(①, ②, ③, ④);
$connection->setApiVersion(‘2’);

$response = $connection->get(‘users/by/username/yu_takashina’, [
‘user.fields’ => ‘profile_image_url,public_metrics’,
]);

// フォロー数
$response->data->public_metrics->following_count;

//

元記事を表示

Shifterの強みとハマりどころ

## Shifterとは

Shifterとは株式会社デジタルキューブが提供するWordPressを静的に活用できるSaaSサービスです。

Front Page

「Shifter Static」と「Shifter Headless」がありますが、私は「Shifter Static」の方を利用しました。

「Shifter Static」を平たく言うとWordPressはShifterの管理サービス上に閉じ込めてしまって、実際の一般エンドユーザはこのサービスから静的ファイルとして生成されS3に設置されたファイルをCloudFront経由で閲覧させるといったものです。

「Shifter Headless」の詳細は詳しくわかりませんが、microCMSなどを使ったときの構成と似たイマドキっぽいJamstackなサイトが作れそうですね。

:::note
デジ庁が色々とやってみた結果、脱Jamstackしたこと等とても共感が持てますし、[WordPressを扱うエンジニアに対する質問事項](https://qiita.com/koji-yamauchi/it

元記事を表示

開発環境を改善するためにチームに提案して実践したこと

## 導入

### 何について話すのか

開発環境を改善して、効率化することでアプリケーション開発に注力するため行った(行っている)取り組みについてお話します。

本記事はQmonus Value Streamの投稿キャンペーン記事です。

### 想定読者

– レガシーな環境を改善している(していきたい)人
– 開発環境改善のアイデアが欲しい人
– CI/CDやDevOpsよりな仕事に関わる人

### どんな人が書いているか(自己紹介)

– 3年目のエンジニアでバックエンドを中心に担当(最近インフラも担当するようになりました)
– メインで扱う技術はPHP・TypeScript・AWS
– アプリケーション開発とAWSインフラ構築を担当する
– 受託開発が中心の企業に従事

## 記事で触れる取り組み(取り組んだ順)

1. Dockerの導入
2. テスト・静的解析の導入
3. CI/CDの導入・整備による効率化
4. Gitフローの変更・整備・周知
5. フロントエンド側へTypeScript・Vueの導入
6. AWSサービスの活用

## Dockerの導入

###

元記事を表示

Docker Compose を使わずに App / DB / Mail コンテナの開発環境を構築する

# はじめに
この記事では、App / DB / Mail コンテナの開発環境の構築手順について記載します。
今回は Docker Compose を使わずに構築します。

# 開発環境
開発環境は以下の通りです。

– Windows 11
– Docker Engine 26.1.1
– PHP 8.3
– MySQL 8.4.0
– Mailpit 1.18

# 要件を整理する
まず今回構築するコンテナの要件を整理します。

## 全体
– コンテナ停止時に自動削除
– コンテナはバックグラウンド実行
– 日本標準時で動作
– コンテナ間通信可能

## App コンテナ `app`
– ブラウザでアクセス可能
– ソースコードはホストマシンで実装

## DB コンテナ `db`
– デバッグ用にホストマシンから接続可能
– データはコンテナを削除しても残す
– 初期データを用意

## Mail コンテナ `mail`
– ブラウザでアクセス可能
– メールデータはコンテナを削除しても残す

# ディレクトリを準備する
今後 Dockerfile や各種設定ファイルなどを作

元記事を表示

【Laravel11】スクレイピングを定期的に実行する

# はじめに

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

前回の記事でスクレイピングすることができました。

前回の記事

https://qiita.com/keitaMax/items/0b433c7037dad0eda733

今回はスクレイピングを定期的に実行できるようにしたいと思います。

# スケジューリング作成

`src/app/routes`フォルダの`console.php`ファイルに以下の記述をします。

“`
Schedule::command(‘roach:run Laraveldocsspider’)->everyFiveSeconds();
“`

# 確認

以下コマンドで確認します。

“`
php artisan schedule:list
“`

“`
root@1460808f039b:/app# php artisan schedule:list

0 * * * * php artisan inspire ………………………………………………

元記事を表示

FactoryMethodパターンを理解した気になる

※前提
PHP(Laravel)で実装しています。

デザインパターンを勉強するときに、[こちらの記事](https://refactoring.guru/ja/design-patterns/factory-method)をよく参考にするのですが、今回はFactory Methodパターンについて学ぶ機会があったのでまとめます。

デザインパターンの書籍や記事は体感Javaで書かれていることが多いイメージですが、私は業務でJavaをほとんど書いたことがないので、今回は言語はPHPで動かしてみます。

## Factory Methodパターンってなにもの?
Factory Methodパターンは23種類あるデザインパターンのうち、生成系に分類されるデザインパターンの一種です。一言で言うと、

**スーパークラスでオブジェクトを作成するためのインターフェースが決まっている。 しかし、 サブクラスでは作成されるオブジェクトの型を変更することができる。**
とか、

**具体的なオブジェクトの生成をサブクラスに任せることで、親クラスとサブクラスの間の疎結合を実現する。**

といった説明が

元記事を表示

PHP / Nginxにおけるタイムアウト値の変更手順

# PHPのタイムアウト値変更
### 方針
**max_execution_time**の値を変更する

以下は phpinfo() をプログラムで呼び出した php.ini の出力結果
![スクリーンショット 2024-05-31 12.57.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3123079/422fbfed-ca2b-d010-7543-bd360c6f7a08.png)

### 変更方法
プログラムによる設定変更
– https://www.php.net/manual/ja/function.ini-set.php
– https://www.php.net/manual/ja/function.set-time-limit.php

### 注意点
https://www.php.net/manual/ja/function.set-time-limit.php
> 関数 set_time_limit() と設定ディレクティブ [max_execution_time](h

元記事を表示

WordPressでアコーディオンパネルを自作する(プラグインなし)

WebサイトのUIで何かと便利な**アコーディオンパネル**。

アコーディオンパネルは今のところWordPressの標準ブロックに備わっていません。
一応最近新しくWordPressに「詳細ブロック」なるものが追加されましたが、クリックでスライドして出現するようなアニメーションが適用できません。

やっぱりクリックでにゅるっと出てきてこそのアコーディオンパネルでしょう。

WordPressでそういうアコーディオンパネルを実装するには、アコーディオンパネルがあるテーマを選んだり、プラグインを導入したりするのが一般的かと思います。

でもアコーディオンパネルのためだけに、テーマやプラグインを新しく入れるのは嫌だなぁ。
そんな人のために、プラグインやjQueryに依存せず、WordPressにアコーディオンパネルを実装する手順を紹介します。

## ①グループブロックを作成
アコーディオンパネルを**ブロックパターン**として登録します。ブロックパターンとして登録することで、何度も同じレイアウトを組む必要がなくなり、効率的に作業を進めることができます。

参考:[ブロックパターン

元記事を表示

PHP/JavaScriptで相互に動作する暗号復号関数

## 概要
任意のパスワードと暗号化したいテキストのみでPHPとJavaScriptで相互に暗号←→復号できる関数を示します。

## PHP
“`encrypt.php
function encrypt(string $plaintext, string $passphrase) :string
{
$cipher = “aes-256-cbc”;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipher));
$key = hash(‘sha256’, $passphrase, true);
$encrypted = openssl_encrypt($plaintext, $cipher, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = base64_encode($iv . $encrypted);
return $encrypted;
}
“`

元記事を表示

【Laravel11】Roach PHPでスクレイピングをする

# はじめに

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

今回はLaravel11とRoach PHPでスクレイピングしてみようと思います。

# Roach PHPとは

>Roach is a complete web scraping toolkit for PHP.
(引用:https://roach-php.dev/docs/introduction)

Roach PHPはスクレイピングをするためのPHPのライブラリです。

# インストール

以下のコマンドでインストールします。

“`
composer require roach-php/laravel
“`

# ファイル作成

スクレイピング用のファイルを以下のコマンドで作成します。

“`
php artisan roach:spider LaravelDocsSpider
“`

すると、`src/app/Spiders/`に`LaravelDocsSpider`ファイルが作成されます。

![スクリーンショット 2024-07-03 11.21.26.png](https://qiita-im

元記事を表示

ふーん、で、君はPHPのフレームワークで何が好きなの?

オウフwwwいわゆるストレートな質問キタコレですねwww
おっとっとwww拙者『キタコレ』などとついネット用語がwww
まあ拙者の場合PHPフレームワーク好きとは言っても、いわゆる一般的な開発用途としてでなく
メタプログラミング的観点から見ているちょっと変わり者ですのでwwwFunctional PHPの影響がですねwwww
ドプフォwwwついマニアックな知識が出てしまいましたwwwいや失敬失敬www
まあファサードパターンの実装としてのLaravelは純粋によく設計されてるなと賞賛できますがwww
私みたいに一歩引いた見方をするとですねwwwポストSymfonyのパラダイムと
モダンPHPの実用主義を引き継いだフレームワークとしてのですねwww
Laravelのパイプライン処理はですねwwww
フォカヌポウwww拙者これではまるでデザインパターンオタクみたいwww
拙者はギークではござらんのでwwwコポォ

元記事を表示

PHPのアクセス修飾子について

PHPには、public、private、protectedの3つのアクセス修飾子があり、これらはクラスのプロパティやメソッドに対するアクセス制限を設けるために使用されます。それぞれ異なるアクセスレベルを定義し、クラスの設計と使用を適切に行うために重要な役割を果たします。

### 目次

1. public
2. private
3. protected
4. アクセス修飾子の違いと使用例
5. アクセス修飾子の適切な使用方法

### 1. public

### 定義

クラスのプロパティやメソッドがクラスの外部からもアクセス可能になる。

### 使用ケース

クラスの機能を外部に公開し、外部からの利用を容易にするために使用。

### 例

“`php
class MyClass {
public $publicProperty = ‘I am public’;

public function publicMethod() {
echo ‘This is a public method’;
}
}

$instance = new

元記事を表示

IPAのアイコン画像が壊れているように見える問題のメモ

# IPAのアイコン画像が壊れている!?

自作ツールで、IPAからアプリアイコンを保存したファイルをブラウザで表示すると画像が読み込めない!
PhotoShopで開こうとするとCgBIチャンクが壊れているという。
普段、画像をIrfanViewを使用しているので気が付くのに時間が掛かった。

調べると、どうもIPAないのファイルにはPNGにCgBIチャンクを追加される場合があるようです。
CgBIチャンクをビルド時に入れたくない場合は、他のサイトでも沢山解説されているのでここでは割愛します。

## CgBIは不要

今回実装中の機能は、サーバーにあるアプリのアイコンを表示する機能なのでCgBIチャンクのあるアプリアイコンは表示できませんとかは出来ないので頑張ります。

CgBIのあるPNGを標準のPNG戻すライブラリを探します。
PHPでは、全く見当たらないです。
いつくかありましたが、怪しいコードだったりそもそも正しく動かないものも多かったです。
辛うじて、pythonのライブラリが見つかりました。
https://pypi.org/project/PyiPNG/
ありがとうござ

元記事を表示

[Laravel]文字と数字が混在する場合のsort

## はじめに
こんにちは!

2024年新卒で無事エンジニアデビューしたものです。

私は私立の文系大学を卒業後、現在、株式会社ダイアログに入社し、エンジニアチームに配属されました。

自社では1ヶ月の全職種研修を終え、さらに1ヶ月のエンジニア研修を終えたのち案件にアサインされる形となっております。

そこで今回は私が初めてアサインしていただいた案件でつまづいた箇所を記載できればと思っております。

## 案件内容
衣類を扱う会社の帳票の改修

## 文字と数字が混在している場合のサイズ名の昇順
衣類を扱う中で色々なサイズ表記があります。
S・M・Lのような文字表記の場合もあれば70・100・115のような数字表記の場合、また3Lのような数字と文字の混在している表記の場合もあります。

この場合、昇順をつける上では文字列または数列のどちらかに表記を合わせる必要があります。

### 文字を数字に置き換える
例えば
サイズ表記の種類がsz_nm = [SS,S,M,L,XL,4L,90,100,120]あったとします。
・今回は[SS,S,M,L,XL,4L,90,100,120]とい

元記事を表示

【Docker Network】PHP コンテナから MySQL コンテナに通信する

# はじめに
この記事では、Docker のネットワーク機能を利用して、PHP コンテナから MySQL コンテナへ通信できるようにする手順について記載します。
ネットワークへの理解促進の一環で行っています。

https://docs.docker.com/network/

# 開発環境
開発環境は以下の通りです。

– Windows 11
– Docker Engine 26.1.1
– MySQL 8.4.0
– PHP 8.3

# ネットワークの作成 `docker network create`

`docker network create` でネットワークを作成します。

https://docs.docker.com/reference/cli/docker/network/create/

“`powershell
docker network create my-network
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318188/a37cd0

元記事を表示

オブジェクト指向の世界に入門

# はじめに
エンジニアになりたての頃、なにも考えずにコーディングをしていたところ、ベテランエンジニアの友達から「現場で役立つシステム設計の原則」という本を勧められ読んでみました。
将来のことを考えたシステム設計のことなど考えたこともなかった私には目からウロコの内容ばかり書いてありました。

なので今回は、学んだことの備忘録と、少しだけオブジェクト指向について触れる記事になります。

**※記事内の言語はPHPで書いています**

#### 今回参照した書籍

「現場で役立つシステム設計の原則」(増田亨さん著)

初学者の方にもおすすめです。

# この記事の目的

オブジェクト指向は、正直ネットで調べても意味がわからず、初心者の私にはさっぱりでした。
難しい概念ばかり出てくるし、これだけやればOKみたいな単純なものでもないし、概念や思想だという記事まで出てきてより混乱してしまいました。

この難解さが、私のような初心者が「オブジェクト指向」を怖がる原因になってしまいます。
が、しかし今回は、「現場で役立つシステム設計の原則」を読んでみて、オブジェクト指向に少しでも

元記事を表示

OTHERカテゴリの最新記事