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

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

【Laravel】PHP CodeSniffer を使ってコーディングチェクをする

# はじめに

こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。

今回はPHP CodeSnifferを使ってみようと思います。

https://zenn.dev/yokozawa_0701/articles/4d1816b9e5b2c9

この記事を参考に行っていきます。

# インストール

以下のコマンドで各ライブラリをインストールします。

“`
composer require –dev squizlabs/php_codesniffer
composer require slevomat/coding-standard –dev
composer require sirbrillig/phpcs-variable-analysis –dev
“`

# phpcs.xmlの作成

そして、プロジェクトディレクトリ配下に`phpcs.xml`を作成します。

内容は記事で紹介されているものをそのまま使ってみます。

“`xml:phpcs.xml

【Laravel】PHPStanをGitHub上でDockerの中で実行する

# はじめに

こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。

前回、PHPStanをGitHubActionsでGitHubにPull Requestを出した時に、テストできるようにしました。

前回の記事

https://qiita.com/keitaMax/items/46102fd5a07e7c86168c

ymlファイルでGitHubのテスト環境のPHPバージョンなどの記載をしたら、PHPバージョンアップの対応をした時に修正し忘れそうだ思ったので、

今回は、それをGitHub上でDockerを立ち上げて、PHPStanがDocker上で動くように修正したいと思います。

# GitHubActionsのymlファイルの修正

“`yml:phpstan.yml
name: LaraStan
on: [pull_request]

jobs:
phpstan:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src

元記事を表示

Laravel Reverb 101

https://reverb.laravel.com/

https://github.com/laravel/reverb

# 導入

[Laravel Reverb](https://github.com/laravel/reverb) は、超高速でスケーラブルなリアルタイム WebSocket 通信を Laravel アプリケーションに直接提供し、Laravel の既存の[イベント ブロードキャスト ツール](https://laravel.com/docs/11.x/broadcasting)スイートとのシームレスな統合を提供します。

# インストール

`install:broadcasting`Artisan コマンドを使用して Reverb をインストールできます。

“`bash
php artisan install:broadcasting
“`

# 構成

バックグラウンドで`install:broadcasting`Artisan コマンドが`reverb:install`コマンドを実行し、適切なデフォルト設定オプションのセットを使用して Reverb

元記事を表示

Laravel OctaneをDockerで動かす

### Laravel Octane

Laravel Octaneは、アプリケーションの起動後全ての処理をメモリ上にロードした状態を維持しリクエスト間で使い回すことによって、高速なアプリケーションを提供するツールです。

SwooleやOpenSwooleなどを使った非同期処理のアプリケーションサーバーに載せることができます。またApacheやNginx不要でWebサーバーを建てることができます。

https://readouble.com/laravel/9.x/ja/octane.html

そこで今回はこの「Laravel Octane」をDockerで動かしてみました。

### やってみる

ディレクトリ構成
“`
├── octane-server
│ ├── app
│ ├── bootstrap
│ …

└── Dockerfile
“`

とりあえず公式の手順に従ってLaravelのプロジェクトを作成します。

“`shell
$ composer create-project laravel/laravel octane-ser

元記事を表示

Vue.js でPHPの連想配列を出力するときのたった一つのコツ

# はじめに
.phpファイル上でVue.jsを動かしていて、ブラウザ上でのアクションに合わせてPHPの変数を出力したくなり、はてどうやるんだ?と調べた結果、うまくいったものを紹介します。

# 問題
筆者の環境
・CDNでVue.jsを導入
・PHPファイルで、HTMLを記述
・Vue.jsのv-forディレクティブで、PHPの連想配列を出力したくなった

# 解決方法
PHP標準の、json_encode関数を用いることです。
PHPの連想配列そのままでは、Vue.jsで出力することができません。
実例
“`index.php

1,
“name” => ‘John’
“age” => ’15’
),
array(
“id” => 2,
“name” => ‘Mary’
“age” => ’15’
),
array(
“id” => 3,
“name” => ‘Tom’
“age” => ’16’
),

元記事を表示

base64でエンコードした画像をデコードした後にlaravel上で正しいMIMEを取得する方法

# 遭遇した事象
クライアントからサーバーに画像ファイルをアップロードするAPIで、クライアントで画像ファイルをbase64にエンコードしてAPIのリクエストとして送信する処理がある
“`javascript
const reader = new FileReader();

reader.onload = (e) => {
let base64 = e.target.result;
const requestBody = {
file: base64,
}

axios.post(“/api/upload”, requestBody, {
headers: {
“Content-Type”: “application/json”,
},
})
.then((res) => {
// 事後処理
}
}
“`
これを受けてバックエンド(laravelで構築)では下記のデコード後にMIMEを調べて画像じゃなかったらエラーを返すという処理をしてい

元記事を表示

短縮url作成webアプリ「kari」を作成しました

# 簡単な紹介
**技術スタック**
フロントエンド: HTML、CSS、JavaScript, tailwindcss
バックエンド: PHP
データベース: MySQL
を採用した**短縮url作成&url解析(ログイン時のみ)機能があるwebアプリです。**

## 「kari」を作ったきっかけ
[kutt](https://github.com/thedevs-network/kutt)というossのものがあるけど実際phpじゃないからレンサバでホストできないよな。
あと[公式インスタンス](kutt.it)でユーザー登録ができないから実際の使い勝手が分からない。
じゃあ自分で作ろう!!っていう深夜テンションで作った。
最初は
**golang & supabase**
を使って書こうとしてたけどライブラリがなくて
**python(flask) & supabase**
で作ってたけどsupabaseより普通にmysqlあるレンサバでホストできたほうがいいと思っていまの
**php & mysql**
になった。

## なんでtailwindcsをつかっているか
これは単純

元記事を表示

MyBBをDebianにインストールする方法

今回は MyBBをインストールする方法です。
Debian 11で動くはずです。
インストールしたてのDebianを利用してください。

# Let’s do it

Apache2やcertbot, php7.4(8.1では動作しないため)とMariaDBをインストールします。
以下のコマンドを実行することで可能です。

“`
sudo apt update -y
sudo apt install -y apache2
sudo rm /var/www/html/index.html
sudo apt install -y certbot python3-certbot-apache
sudo apt install -y software-properties-common python3-launchpadlib
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update -y
sudo apt install -y php7.4
sudo apt-get install -y php7.4-cli php7.4

元記事を表示

Livewire\Exceptions\CorruptComponentPayloadException: Livewire encountered corrupt data when trying to hydrate the [abcdefg.index] component. Ensure that the [name, id, data] of the Livewire component wasn’t tampered with between requests.

超悩まされていたこのエラー
“`
Livewire\Exceptions\CorruptComponentPayloadException: Livewire encountered corrupt data when trying to hydrate the [abcdefg.index] component.
Ensure that the [name, id, data] of the Livewire component wasn’t tampered with between requests. in file hijk.php on line 21
“`
何をやってもエラーになるので対処できずになやんでいたが、
どうもJavascriptで扱える整数を超えている値を扱った場合、出る様子。

例えばこんな感じのコード。

“`
public function mount()
{
$this->datalist[2902364376262391407]=”AAAAA”;
$this->datalist[290246481

元記事を表示

PHPとMySQLの接続〜登録〜取得

1)**mysqli_connect**
  PHPからMySQLに接続する
  **※SQLに接続できないケースも追加する(if文)**
“`SQL
function dbConnect()
{
$link = mysqli_connect(‘<ホスト名>”<ユーザー名>”<パスワード>”<データベース名>‘);
if(!$link) {
echo ‘Error:データベースに接続できませんでした’ . PHP_EOL;
echo ‘Debugging error:’ . mysqli_connect_error() . PHP_EOL;
exit;
}
return $link;
}

$link = dbConnect();
mysqli_close($link);
“`

2)**mysqli_query**
  ①テーブルを作成する
  ※エラーがあった場合、エラーメッセージを表示するよう

元記事を表示

PHP,Smartyと、jquery ui で作成。予約システム、日別照会機能 & 画面

### ■開発環境
・RedHat 7
・PHP 7.4
・smarty 2.xxxx
・oracle 19

### ■インターフェース
01
![ui_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/124358e2-37ca-6b69-83fe-abecf664abc1.png)

02
![ul_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/a4f99272-c33e-2c4c-ba7e-3b70d1b070c0.png)

03
![ui_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/56b895a1-e40b-b7be-37c4-940b066f52ae.png)

### ■ソースコード
#### ●PHPソース
“`php

元記事を表示

Amazon S3上にアップロードされているファイルの存在確認は、アクセス権限が無いとできない

## はじめに
この記事はLaravelアプリケーションの実装において、
Amazon S3(以下、S3と記載)にファイルがアップロードされているかをチェックしようとして、
3時間近く沼ってしまった今日の自分に捧げます。

## 環境
Laravel: 8
PHP: 7.4
PC: MacOS14(Sonoma)

## 結論
S3のバケットポリシーによって、S3にアップロードされているファイルへのアクセス権限がない状態だと、
LaravelのStorageクラスを使用してもファイルの存在が確認できなくなる。

“`php
// ファイルへのアクセス権限がないと、結果は必ずfalse(ファイルが存在していない)になる
Storage::exists(‘S3上のファイルパス’);
“`

バケットポリシー以外のアクセス権限でも、同様の影響を及ぼすかは不明。

## 経緯
S3で同じ名前のファイルが既に存在するかどうかの確認が必要だったため、以下のコードを実装しました。

“`php
if (Storage::exists(‘ファイルパス’)) {
// 同じ名前のファイルが

元記事を表示

【Laravel】GitHubのPush時にPHPUnitでテストする

# はじめに

こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。

前回の記事

https://qiita.com/keitaMax/items/1d995293f383f66b29af

今回は前回作成したPHPUnitをGitHubActionsでGitHubにPull Requestを出した時に、テストできるようにしようと思います。

# GitHubActionsのymlファイルを作成

まずはGitHubActionsを作成します。

https://zenn.dev/naonao70/articles/44bc859c3ebc37

この記事を参考に作成しました。

`.github/workflows`フォルダの中に`phpunit.yml`を作成します。

“`yaml:phpunit.yml
name: phpunit

on: [pull_request]

jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-direct

元記事を表示

[PHP8対応] PHP拡張モジュールを自作してBlurHashの計算を高速化する

# BlurHashについて
https://blurha.sh/

Webサイトにおける画像のプレースホルダーとして提案されているものです。画像の読み込みには時間がかかるので、読み込みが完了するまでの間に仮に表示させておく画像がプレースホルダーです。
ASCII文字30文字程度という非常に少ない情報量で保存できるので、HTMLに埋め込んでおくことも可能です。それでいて復元後の画像は色調をある程度再現しているので、クライアント側で画像を復元して表示することにより、真っ白な画像を出すよりもUXを向上できるでしょう。見た目がぼかしフィルターをかけたようなのでBlurとついています。

例を示しましょう。以下の画像をBlurHashに変換し、BlurHashからプレースホルダー画像を生成したものです。この色調をASCII文字28文字で表現しています。

![sample.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204084/0e8c4960-1a01-b19d-c861-7e3c16423d1e.jpe

元記事を表示

PHPerkaigiで感じたオフラインカンファレンスの魅力

## はじめに
社員の皆さんはこんな奴が最近エンジニアになって頑張ってるんだなと暖かい目で読んでいただければと思います。

社外の方やエンジニアを目指している方は少しでも学習の参考や、コネクター・ジャパンに興味を持っていただければと思います。

## 自己紹介
未経験から独学でプログラミング学習し5ヶ月でLaravelでポートフォリオを作成しました。そして現在は自社開発企業に入社し、WEBエンジニアとしてプロダクト開発に携わっています。

## この記事を書いた理由
3/7(木)~3/9(土)にセントラルパーク中野で開催されたPHPerKaigi2024という技術カンファレンスに初めて参加しました。

私がエンジニアになる前の時期(2023年より前)は、コロナの影響もあってオフラインイベントが出来なかった話を良く他のエンジニアから聞きましたが、やっと落ち着いてオフラインイベントが出来るようになりました。

オフラインイベント参加してないけど、ボッチだし遠いし…となかなか重い腰が上がらないエンジニアに向けて書きます。

もっとエンジニアが、オフラインイベントに参加してほしいと思いこの

元記事を表示

PHPでコードゴルフ – Base32

2024年3月7日~9日、[PHPerKaigi 2024](https://phperkaigi.jp/2024/)が開催されました。
私はオンライン参加勢だったのですが、メインであるセッション・LT以外に、PHPerチャレンジやコードゴルフといった企画も用意されていて非常に楽しませてもらいました。

コードゴルフは、与えられた仕様を満たすコードをいかに短く実装できるかを競うゲームで、今回は3問出題されました。
これが楽しかったのでいろいろやっていたところ、第2問、第3問で1位を取ってしまいました。
せっかくなので、どんなコードを書いたのか紹介しておきます。

なお、問題および私を含めた回答者のコードはこちらで公開されています。
https://fortee.jp/phperkaigi-2024/go/golf

## 第2問:Base32
https://t.nil.ninja/phperkaigi/2024/golf/q/base32/

Base64ならぬ[Base32](https://ja.wikipedia.org/wiki/%E4%B8%89%E5%8D%81%E4%B

元記事を表示

【WordPress】Advanced Custom Fields(ACF)で絵文字が保存できない問題を解決する

日頃からお世話になっているACFで、絵文字利用前提のフィールドを作ったものの、なぜか保存できない問題に遭遇。
調べてみると、どうやら `update_post_meta` や `update_user_meta` でデータベースの `postmeta` テーブルに絵文字を含むデータを保存しようとすると、絵文字部分が空白に変換されてしまう模様。

参考:[【WordPress】絵文字を含むカスタムフィールド値のDB更新について](https://tsukuriba.co.jp/6046)

解決策としては参考リンクにある通り、保存前にデータをHTML数値エンティティにエンコードし、読み込む際はデコードする、という手順を踏めば良い模様。
ACFのドキュメントを読むと、値の保存前に何かする用のフックと、値の読み込み後に何かする用のフックが、それぞれ用意されていた。
詳細はそれぞれ公式ドキュメントを参照。

`acf/update_value`:https://www.advancedcustomfields.com/resources/acf-update_value/
`acf/load_

元記事を表示

laravel コマンド集

# 初めに
laravelの開発中によく使うコマンドをまとめました。
参考にしてください。

# laravelコマンド集

## Eloquentモデル自動生成

“`php
php artisan make:model モデル名
“`

## マイグレーションファイル作成

“`php
php artisan make:migration create_テーブル名_table –create=テーブル名
“`

# 参考文献

https://qiita.com/niisan-tokyo/items/9c799989cb535489f201

https://qiita.com/kamome_susume/items/22fe17935bbd1760b7f7

参考にさせていただきました。
ありがとうございます!

元記事を表示

PHPのメモリ容量とは

### はじめに
負荷テストをしている際に、タイムアウトエラーが発生してしまい、原因を探ると変数に大量のデータが入っていることが要因だった。
対策としてはプログラムの方で一つの変数に大量のデータが入らないように改修したが、それと同時にphpのメモリ上限をあげる方法があるということを知った。
それまではphpのメモリという概念自体を意識していなかった上に、理解をしていなかったためQiitaを執筆する。

### phpのメモリとは
まずphpのメモリとは、phpのプログラムを実行する際に使用されるメモリの容量のことである。

### phpのメモリに関するエラーが発生した際の対処
メモリ容量の上限は任意に設定することができるが、メモリエラーやタイムウトエラーが発生した際に、上限を上げるというのは安易で、プログラムの方でおかしな処理の仕方をしていないか確認することが重要である。
例えば今回の自分のように、変数に大量のデータが入るようになってしまっていたり、for文で大きな負荷がかかる処理の書き方をしていないかを確認することが重要。
phpのメモリの上限を上げるということは最終手段と考える

元記事を表示

[Laravel]nullが入る可能性のあるカスタムバリデーションを作成する場合

## 備忘記
– カスタムのバリデーションRuleを作成したときにnullの値のものがRuleを通ってないことが発覚。
– その解決策を記載します。

### 前提
Laravel Framework 10.46.0
PHP 8.3.1

### 方法

コマンドはこれ!
“`php
php artisan make:rule Uppercase –implicit
“`

もし無しで作成しちゃったら、、、?

“`php
class Uppercase implements DataAwareRule, ValidationRule
{
# ここの部分を追加する
/**
* Indicates whether the rule should be implicit.
*
* @var bool
*/
public $implicit = true;

“`

元記事を表示

OTHERカテゴリの最新記事