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

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

【メモ】Laravel API エラーフォーマットの上書きと注意点

## APIのエラーの上書き

### 概要
– 今回の要件
– POSTやPATCHなどの引数エラーなどなど、すべてのエラーはJSON形式でレスポンスをしたい
– Laravelのデフォルトでは、HTML形式でエラーがレスポンスされてしまう。
– エラーレスポンスも含めてレスポンスの形式を制御したい。

### 状況説明
“`
Illuminate\Database\QueryException: SQLSTATE[HY000]: General error: 1364 Field 'unique_text' doesn't have a default value (Connection: mysql, SQL: insert into `card_formats` (`payment_name`, `updated_at`, `created_at`) values (rakuten, 2023-12-03 09:46:59, 2023-12-03 09:46:59)) in file /var/www/html/vendor/lar

元記事を表示

PHP memory_get_usage() の引数 $real_usage とは?

# 序文
PHP で開発をしていると一度はこんなメッセージを見たことがあるかと思います。

“`log
Fatal error : Allowed memory size of xxx bytes exhausted …
“`

上記エラーは許容されているメモリサイズを超えてしまった場合に発生するものです。
このエラーの対処法を調べると、主に以下のような方法がヒットすると思います。

– 許容メモリ量を増やす( [memory_limit](https://www.php.net/manual/ja/ini.core.php#ini.memory-limit) を変更する)
– php.ini で設定を変更する
– .htaccess で設定を変更する
– ini_set() で一時的に設定を変更する
– コードをチューニングする(不要なメモリ使用を減らす)
– unset() で明示的に変数を解放する
– [gc_collect_cycles](https://www.php.net/manual/ja/function.gc-coll

元記事を表示

PHP/LaravelでFCMpush通知を実装した件

こんばんは!
アドベントカレンダー4日目を担当します、サーバーサイドエンジニアの@takapon21です
よろしくお願いします。

今回は、**PHP/Laravelを使用してFCM Push通知を送信する**
という実装についてのまとめを記載したいと思います。

firebase公式でサポートしてくれないPHP/Laravelを用いてどうしても実装したいんだ!!
という方向けに書いていきます。
実際私も参考文献が乏しすぎて苦労しました。備忘録に近いです

## やりたいこと
**LaravelからiOSデバイス、Androidデバイスにpush通知を送りたい**
今回はWeb Push通知ではなく(googleカレンダーが10分前くらいに会議を教えてくれるアレ)
Laravelを起点として、FCMを利用し、google, appleが提供するpush通知サーバーを経由して各デバイスにpush通知を送信する
という実装をします。

## 今回省略すること
push通知を送信するために、**デバイスのトークン**が必要です
このトークンは、「誰に送信するか」を指定するために

元記事を表示

【PHP】if($a == 1) と if(1 == $a) って何が違うの?

PHP の if 文の条件式の記述方法で、バグ対策になるような書き方があったので記事にしたいと思います。

例えば、以下のような2つのコード例があるとします。

“`php:例1のコード
$a = 2;
if($a == 1){
echo “one”;
}else{
echo “not one”;
}
“`

“`php:例2のコード
$a = 2;
if(1 == $a){
echo “one”;
}else{
echo “not one”;
}
“`

上記の2つのコード例を見て分かるように、違いがあるのは **条件式の変数と定数の順序** だけです。出力される内容に変化はありません(`not one` と出力されるはずです)。

「じゃあ、2つのどちらの例でも一緒なら、別にどちらの条件式で記述しても良いじゃん!」と思うところですが、**条件式の誤り** を防ぐ役割を含めた書き方をする場合では「例2のコード」が良いかもしれません。

### もし間違って「==」を「=」と書いたら…

少し極端なケースですが、**上記の2つのコード例の条件式で使用されている「

元記事を表示

PHPからMySQLへPDO接続

# PHPからDBへアクセスしたい!
PHPでデータベースの情報を参照したいときに使える
## PDOとは
PHP5.1.0以降で動作するデータベース接続クラス。PEAR:Dbより高速。
## 実際に接続する
基本これ
~~~PHP:code.php
try {
// DB接続
$pdo = new PDO(
‘mysql:host=localhost;dbname=データベースのテーブルの名前;’,
‘ユーザ名’,
‘パスワード’
);
$stmt = $pdo->prepare(‘SQL文’);
$stmt->execute();
} catch (PDOException $e) {
//エラー発生時の処理
} finally {
//正常時の処理
$pdo = null;
}
~~~
SQLをセットしたらOK

~~~PHP:code.php
try {
// DB接続
$pdo = new PDO(
‘mysql:host=loca

元記事を表示

独自のPHP用ソケット通信式メール送信ライブラリとその解説

バーチャルプログラマ・技術者 Advent Calendar 2023 4日目の初投稿記事からいきなり意味の分からない投稿をしていくフルスタックエンジニア系VTuberです。
今回の記事はタイトル通り、PHPでcomposerを使用せずにカスタム可能なメール送信関数を作って送信するという内容となっています。
コードのアイデアは秋雪 こおりが、実装は二人でやったISnow Novelsにて使用される実際のコードを用いて説明します。
この送信関数をまとめてSuccubus Wingと言います。また、ISnow NovelsはLilith Systemと言います。

# 対象読者
記事の内容が非常に限定的ですが、主に以下の人をターゲットしています
– 何故かcomposerが正常に動作しない
– composerでの依存解決ができない
– 競合や依存関係の破損が起こる
– クラスや名前空間を使用したくない
– composerを使用したくない
– カスタムしたい
– 不要な部分を削って少しでもリソース節約したい(出来るかはしらんが)
– 他人のライブラリに依存したくない方
– ライブラリを騙

元記事を表示

ファイルやフォルダを制御、”Filesystem”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の4日目の記事です。

## ファイルやフォルダを制御、”Filesystem”

`Filesystem` はファイルやフォルダを制御する行うコンポーネントです。OS依存を汲み取ってくれます。Symfony以外でも動作します。

### インストール

“`shell
composer install symfony/filesystem
“`

### 使い方

“`php
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;
use Symfony\Component\Filesystem\Filesystem;

$filesystem = new Filesystem();
try {
$filesystem->dumpFile(‘data.txt’, ‘Hello world!’); // フ

元記事を表示

【XAMPP】phpMyAdminに接続できない場合の対処法

XAMPPのコントロールパネルから、phpMyAdminに接続できなかった時に試したことをまとめています。
結論から言うと、phpMyAdminの設定ファイル (config.inc.php) を諸々いじる必要があります。
特に、**MySQLに特定のポート番号を割り当てている場合は、特別な設定が必要**でした。

## 困っていたこと
XAMPPのコントロールパネルから、phpMyAdminに接続しようとすると以下のようなエラーが出る。
![スクリーンショット 2023-12-04 015346.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634172/cdbb7865-8d89-8fd0-26db-fd11dfa7dbc4.png)

## 動作環境
– Windows 11 Home
– XAMPP for Windows 8.2.12
– Apache/2.4.58 (Win64)
– PHP 8.2.12
– 10.4.32-MariaDB

## エラー発生までの前提
– M

元記事を表示

制約で固められた環境をできるだけモダンに踏み倒す

# はじめに
こちらは[**klis(筑波大学情報学群知識情報・図書館学類) Advent Calendar 2023**](https://adventar.org/calendars/8957) 4日目の記事です!
klisのアドベントカレンダーに参加するのは初めてです!よろしくお願いします〜

## 自己紹介

本年度から長野高専より3年次編入しました**Bony_Chops**と申します!Web系の技術に興味があります

https://bonychops.com

# 前置き
自分は[データベース技術](https://kdb.tsukuba.ac.jp/syllabi/2023/GE70901/jpn)という科目を履修しており、その授業では最終成果としてDBを用いたWebサービスを開発します。
成果物は授業で提供されるVPSを使って動かします。以下のような環境・制約です(一部セキュリティの都合上あえて曖昧な表現をしています)。

– VPS
– OS: Linux系統(amd64)
– 接続方法: SSH
– PHP/HTML/CSS/JS

今回は、この授業の環境でなるべ

元記事を表示

PHP7.4 / Laravel 6.3 を PHP 8.2 / Laravel10.2 にアップデートする

今年やったことの1つに「PHP7.4 / Laravel 6.3 を PHP 8.2 / Laravel10.2 にアップデートした」もありました。
躊躇している人がまだいるなら、失敗せずすんなりできるのでやっておこうというおすすめの意味で、まとめてみます。

# コツみたいなもの

– Laravelはいきなり10に上げるのではなく、いったん9に上げてから、10にすると失敗しにくいと思います
– Laravel9にあげる前に、6→7→8→9のアップグレードガイドは全て読んで、対応しておく。
– phpは8.2に作業の最初から上げて大丈夫。

# Laravel 6 → 7 → 8 → 9

対応が必要なアップグレード内容は公式に従います。

https://readouble.com/laravel/7.x/ja/upgrade.html

https://readouble.com/laravel/8.x/ja/upgrade.html

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

# 6 → 9にあげるときにちょっとハマっ

元記事を表示

【メモ】Laravelでuseを利用したインポートがうまくいかなかった件

## 概要
– use 文は正しいはずが、あるはずのクラスがないと怒られた。
– 引数なしのindex()メソッドの場合は正常に動いた。
– ファイル名のタイポが原因であった。

## 詳細
“`sh:エラーメッセージ
ReflectionException: Class “App\Http\Requests\StoreCardFormatRequest” does not exist in file /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/ResolvesRouteDependencies.php on line 81
“`
要は、**StoreCardFormatRequest**というクラスがないと怒られている。

useなどに関しては、問題ないと判断し下記コマンドを実行したところskipしたと警告が発生した。
“`sh:コマンド
dump-autoload

Generating optimized autoload files
Class App\Http\Requests\StoreC

元記事を表示

Amazon Lightsail – 最速でLaravel環境を構築する

Amazon LightsailでLaravel環境を構築する方法です。
### この記事でわかること
1) Amazon LightsailのLAMP環境の構築方法
2) LAMP環境内にLaravelを構築する方法(初期画面まで)
### 事前準備
AWSアカウントへの登録
Amazon Lightsailのページまでのアクセス
# 1. Amazon Lightsailとは
Amazonが提供する仮装プライベートサーバー(VPS)でEC2と比較すると簡易的かつ素早くサーバーの構築ができるサービスです。
例えば、LAMP環境(Linux、Apache、MySQL(Maria DB)、PHP)やWordPressなどを簡単に構築することができます。
定額のため、EC2等と比較すると費用面で安心感はありますが、拡張性などには制約があるのが特徴です。

公式サイトは以下

https://aws.amazon.com/jp/lightsail/?gclid=CjwKCAiAmZGrBhAnEiwAo9qHidat610znzzJK6gkL0cTQMc17fU5n7ABoUmxcKNJCj

元記事を表示

YAMLを読み書き、”Yaml”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の3日目の記事です。

## YAMLを読み書き、”Yaml”

[Yaml](https://symfony.com/doc/current/components/yaml.html)は、Yamlの解析や作成を行うコンポーネントです。Symfony以外でも使え、Symfonyコンポーネントの中でも使われてるサービスが特出して多いコンポーネントになります。

### インストール

“`shell
composer require symfony/yaml
“`

### 解析

解析、つまり読み込みに関しては文字列とファイルの両方をサポートします。

“`php
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Yaml;

try {
$result = Yaml::

元記事を表示

【Drupal】フィールドの値を空にしたい。

以前、新機能のリリースに合わせて、デプロイ時に特定のフィールドの値を空にするという実装を行いました。
そこで、中々空にすることができずハマった経験があったので、備忘録として残します。

## やりたいこと
一度、やりたいことを整理します。
「記事コンテンツタイプの“fuga“フィールドの値を空にしたい」です。

## 実装
### 失敗例
まずは、失敗例から…
“`php
function hoge() {
foreach (\Drupal::entityTypeManager()->getStorage(‘node’)->loadByProperties([
‘type’ => [
‘article’,
],
]) as $node) {
$node->get(‘field_fuga’)->delete();
}
}
“`

### 正解
“`php
function hoge() {
foreach (\Drupal::entityTypeManager()->getStorage(‘node’)->loadByPr

元記事を表示

Allowed memory size of *** exhausted が何のせいなのかわからない悩みを根絶やしにするため実行中の PHP プロセスのメモリ内容をぶっこぬくツールを作った

# くわしい解説
– https://github.com/reliforp/reli-prof/blob/0.11.x/docs/memory-profiler.md
– 面白かったら GitHub のプロジェクトのほうにもスターを付けてね!

# 三行まとめ
– 実行中の PHP プロセスのメモリ内容をプロセス外からぶっこ抜いて JSON で吐くツールを作った
– `Allowed memory size of *** exhausted` が発生した際に起動して自身を解析させれば死んだ時の内訳もわりとわかる
– PHP でヤベーものを作るのは楽しい

# まずこいつを見てほしい
実行中の PHP スクリプトがあるとする。例えば静的解析ツールの [Psalm](https://psalm.dev/) だとしよう。

“`bash
$ ps aux | grep psalm
sji 1496557 100 0.2 260524 159896 pts/0 R+ 22:58 0:03 php ./psalm –no-cache –threads=

元記事を表示

【PHP, JavaScript】画像を並び替えてアップロードする【後編】

前回の記事の続きです。

https://qiita.com/kai_163/items/9c52327739007f9be4df

前回は、
* アップロードする画像を選択したら、その場でプレビュー
* ドラッグ&ドロップで画像の位置を入れ替える
* 最終的な画像の位置情報と、画像を一緒に送信

までやりました。全てJavaScriptでの処理でしたが、今回はPHPのみの処理です。送信された位置情報を使って、アップロードされた画像をプレビューと同じ並びで表示します。HTMLの構造が同じなので、CSSファイルは前回と同じものを読み込みます。
## 作成するファイル
* [upload_process.php【完成】](#upload_processphp完成)

## 今回やること
[(1)位置情報photoOrderをJSON形式からデコード&画像の枚数を取得](#1位置情報photoorderをjson形式からデコード画像の枚数を取得)
[(2)エラーチェック](#2エラーチェック)
[(3)エラーが無ければ並び替えて画像を表示](#3エラーが無ければ並び替えて画像を表示)
“`

元記事を表示

【PHP, JavaScript】画像を並び替えてアップロードする【前編】

## 今回作ったもの
(1)アップロードしたい画像(1枚~4枚まで)を選択すると、その場でプレビューします。

2023-11-20 181323.png

(2)ドラッグ&ドロップで画像の位置を入れ替えます。
(並び替え後↓↓)

2023-11-20 181751.png

(3)「投稿」ボタンを押してアップロード。順番は崩れません。

2023-11-20 201508.pngPHP8.3の変更点をチェックしよう

:::note
[ゆるWeb勉強会@札幌 Advent Calendar 2023](https://adventar.org/calendars/8767) 2日目
:::

# この記事について

PHPのバージョン8.3が先日2023年11月23日にリリースされました。このバージョンアップではどのような点が変更されたのか、個人的に気になったところをピックアップして紹介していきます。

https://www.php.net/releases/8.3/ja.php

## 変更点ピックアップ

## 新機能
### クラス定数の型付け

クラス定数に型を書けるようになりました。

“`php:PHP8.3
class HogeClass {
const string A = ‘hoge’;
}

interface HogeInterface {
const string A = ‘hoge’;
}

trait HogeTrait {
const string A = ‘hoge’;
}

enum HogeEnum {
const string

元記事を表示

Notion API+PHP(MySQL)でサークルのWebサイトを構築した話

こんにちは、KadoBloG(カドブログ)のKadoです。
今回は、しばらく前に作成した[サークルのWebサイト](https://engineer-egg.com/)で使用した技術として、Notion APIとPHPを使用してブログ型サイトを構築してみた、という話を解説していきます。

:::note info
本項は[Nihon University Advent Calendar 2023](https://qiita.com/advent-calendar/2023/nihon-u)の6日目の記事になります。
:::

## 簡易自己紹介

– 日本大学工学部 情報工学科 3年
– 趣味がWeb開発 プログラミングは高校3年から
– 本格的に没頭したのは大学2年
– インターン募集しています(小声)
– 元々はHTML, CSS, JavaScript, PHPのフレームワークなし(バニラ)開発
– 現在はNext.jsも使う

## サークルのWebサイトについて

まずは簡単にWebサイトの概要をお伝えします。「起業サークル」は、本学部で2023年3月に落成されたばかりのサ

元記事を表示

いろいろ翻訳、”Translation”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の2日目の記事です。

## いろいろ翻訳、”Translation”

[Translation](https://symfony.com/doc/current/translation.html)は、翻訳を司るコンポーネントです。

### インストール

“`shell
composer require symfony/translation
“`

### 翻訳

翻訳を行うには、元の文と翻訳文をセットにした翻訳用のリソースを読み込ませます。

“`php
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\Loader\ArrayLoader;

$translator = new Translator(‘ja’);
$translator->addLoader(‘arr

元記事を表示

OTHERカテゴリの最新記事