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

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

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

元記事を表示

rectorとrector-laravelでLaravelをアップデートしてみる

こんにちは。Fusicの@hkusaba です。
[Fusic Advent Calendar 2023](https://qiita.com/advent-calendar/2023/fusic) の2日目ですね。

今回は、rectorとrector-laravelを使用して、PHP・Laravelをアップデートしたお話をします。
弊社内で行っている開発合宿で触る機会がありました!いい会社です。

## はじめに

### rectorとは何ぞや

公式がこちらです。

https://github.com/rectorphp/rector/tree/main

rectorには2つの特徴があります。 (Google翻訳です。

> 1. 即時アップグレード
Rector は、PHP 5.3 から 8.2 へのアップグレードと、 Symfony、PHPUnit、Doctrineなどの主要なオープンソース プロジェクトをサポートするようになりました。手間をかけずに常に最新の PHP とフレームワークを使用したいですか?
Rector を使用して即時アップグレードを処理します。
> 2

元記事を表示

YouTubeとローカルPCの混合メディアを同時に再生できるハイブリッドメディアプレイヤーを作ってみた

私はPCで作業しているとき、バックグラウンドで音楽を再生していることがよくある。このときに再生する曲は、アルバムCDからインポートしたオーディオメディアのときもあれば、YouTubeの動画だったりとさまざまだ。メディアの再生環境のバリエーションが多様なため、ローカルのオーディオソースを再生する場合はPCにインストールされているメディア・プレイヤーを使い、YouTubeの動画の場合はブラウザからアクセスしている。それはいたって一般的な方法ではあるのだが、PC上のメディアとお気に入りのYouTube動画を別々にしか取り扱えない不自由さには常々不満があった。

──両方のメディアを一元管理して、プレイヤーを切り替えることなく再生できればなぁ──

この要望を満たすソリューションは既に世の中にはいくつか存在している。それは例えば「CherryPlayer」とか「FreeTube」などだ。ただ、前者はWindowsでしか使えないうえ、私のPCでは挙動が安定せずエラーが頻発して使いものにならなかった。一方、後者はインストールしてみたもののUIが煩雑でとても使いづらく、これも継続的に使い続けるのに

元記事を表示

PHPイベントの世界

こんにちは! PHP Advent Calendarです! メリークリスマス!

ところで、みなさんはIT技術イベントに参加したことはありますでしょうか。世の中ではさまざまな趣旨・さまざまな規模のイベントが開催されています。PHP界隈においても、やはりいろいろなイベントが企画されているところです。

この記事では、このようなイベントについて紹介いたします。

## 勉強会・ミートアップ

「**勉強会**」は参加者間で技術的な知見を共有して交流ことを趣旨とするイベントです。小学生が放課後に宿題を持ち寄ったり中高生が集まって試験対策をするような会とはニュアンスが異なります。

集まって何をするのかというのも会によってさまざまです。特に参加者を公募せず社内や仲間うちで集まって本を読むという会も多くあるでしょうし、[ワールドカフェ]という参加者ひとりひとりが対話することが中心の会などもあります。

[ワールドカフェ]: https://world-cafe.net/about/

参加者を一般公募するスタイルのイベントで多いと思われるのが、参加者のうちの数名が発表者として資料を準備して、参加

元記事を表示

Laravelのジョブ・キューで詰まった話。

2023年も12月になります!1年間は本当にあっという間ですね。
今年初頭ですが、業務でメール送信対応を担当した際にLaravelで詰まった箇所がありまして
かなり個人的な話になりますが今回まとめさせていただきます。:bowling:

## 実装したかった内容
とあるwebアプリ(ビジネス上のマッチング系)を開発していました。

通知をユーザーのアドレスへメール送信する機能があり、アドレスが間違っていたり変わっていたりなどで送信エラーが発生した場合に、エラーメッセージや送信先情報などの情報をユーザーの権限ごとに作成したエラー専用テーブルに格納する実装をしたかったです。

仮にユーザーの権限を`company`・`user`とし、格納するエラーテーブル名を`company_mail_error_infos`・`user_mail_error_infos`テーブルとします。
“`
– company_mail_error_infos
– user_mail_error_infos
– …
– …
“`
今回の実装にはLaravelのジョブ・キュー機能を使うのが良いと考えました

元記事を表示

foreach前のifによる空確認は不要なのか

先程、コードレビューで指摘が入っていて、ふと気になったので。

# コード指摘部分と指摘(だいたいこんな感じ)
“`php
if (!empty($tags)) {
foreach ($tags as $tag) {
// 処理
}
}
“`

**指摘**
> この下にあるのがforeachなのでこのif($tags)は不要だと思います

割りと臆病なので、変数の存在確認やら空確認を冗長に挟んでしまう癖があった。

冗長なものと必要なものに関しては大体理解しているつもりであるものの、これに関しては必要なものという認識だった。
10年弱、foreach前の配列の空確認に関しては毎度おこなっていたので、「あれこれいらないの?」と結構カルチャーショック。

「foreach前 if 存在確認 不要」でggってもピンとくる記事がないので、ChatGPTに聞いた。

# ChatGPTに質問してみた

>質問「foreach前にifで配列の空確認するって無意味?」

>ChatGPT
>
>foreachの前にif文で配列の空確認を行うことは、一般的には無駄ではありません。

元記事を表示

PHP メモ

## PHPについて
### PHP
– PHPとは動的にWebページを生成することができるサーバーサイドのスクリプト言語です。
– [公式サイト](https://www.php.net/)
– [GitHub](https://github.com/php)

### Composer
– Composerは、PHPプログラミング言語向けのソフトウェアおよび必要なライブラリの依存関係を管理する標準形式を提供するアプリケーションレベルのパッケージ管理シス テムである。
– [公式サイト](https://getcomposer.org/)

### XAMPP/MAMPP
– XAMPPは、インストールすることで完全無償で利用できるApacheディストリビューションです。
– Webサーバ + データベース + Perl, Php, Rubyを一括してインストールすることができます。
– XAMPPは、Windowsで使用できます。
– MAMPPは、MacOSで使用できます。
– [公式サイト](https://www.a

元記事を表示

PHPでGoogleログインの実装をする方法(2023年11月時点動作)

本記事は、[めんどい太郎の Advent Calendar 2023](https://qiita.com/advent-calendar/2023/mendoitarou_first_calendar) 1日目の記事です。

# はじめに

この記事は初心者が書いています。

皆さんは普段、様々なサービスにどのようにしてログイン・登録していますか?

今話題のPass Keyを使っている方や、登録したIDとパスワードを使用する人など様々だと思います。

そんなログイン・登録であると非常に便利なのがSNSログインです。

今回はそんなSNSログインの一つである「Googleでログイン」の実装方法をご紹介いたします。

正直、Googleのドキュメントはめちゃくちゃわかりやすいので[公式ドキュメント](https://developers.google.com/identity/gsi/web/guides/overview?hl=ja)を読んで見ることをおすすめします。

案外仕様変更が行われていたりします。

:::note info
2023年にGoogleログインが非推奨になり、

元記事を表示

PHPUnitでよく使うMockeryまとめ

# 背景

業務でモックを使用する機会があったのと、以前Mockeryを使用する際に苦戦したこともあって、業務で使用するMockeryの記法をまとめようと思いました。

# モックとは

モックとは、ある機能に似せたメソッドなどを簡易的に用意できるものです。中身を実装していない状態でも見かけだけ似せたものを簡単に作成できます。

※mock up = 実物に似せた模型という意味

PHPで使用できるモックにはMockeryというライブラリがあります。

## モックを利用できる場面

「メソッドAの中で、メソッドB、Cを使用している。しかし、メソッドBを実装していない段階でメソッドAのテストを行いたい」といった場面で使えます。

この例でメソッドBのモックを用意していない場合は、メソッドAのUnitテストを行った際にメソッドBが用意されていないことでエラーが発生してしまいます。

“`php
class A
{
public function a(int $number)
{
if ($this->b($number) && $this->c($num

元記事を表示

コマンドを実行、”Process”

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

## PHP内でコマンドを実行 “Process”

[Process](https://symfony.com/doc/current/components/process.html)は、PHP内でサブプロセスとしてコマンドを実行します。PHPでは、`exec`などでコマンド実行できますが、このコンポーネントはOSにより異なる引数のエスケープ処理を行ってくれます。Symfony以外でも使えます。

### インストール

“`shell
composer require symfony/process
“`

### サブプロセス実行

指定のコマンドで`Process`オブジェクトを作って、 `run()` を呼び出すことで実行できます。

“`php
use Symfony\Component\Process\Exception\ProcessFailedE

元記事を表示

郵便番号から住所を自動入力する時に極力ライブラリに振り回されない実装をしたい時の話

ラノベみたいなタイトルになっちゃいましたが許してください。

# 郵便番号から住所を自動入力させたい
そんな事よくありますよね。世の中には便利なAPIがたくさんありますが、有料だったりAPIの制限があったり、Formの形式にしか対応していなかったりで、実際のサービスに組み込む時に制限を受けてしまう事が多々あります。既に作ったformに良い感じに当てはめる方法を共有します。

## 前提
厳密なデータ管理は前提としません。もし厳密にデータを管理する必要があるのであれば、公開されている情報を取得し、自前でDBを用意して更新なども自分でやる必要があると思います。
郵便番号に対して紐づけられる住所は1:1ではないので、そこも考慮してのデータ設計が必要です。
今回想定している用途としては、ディレクターから「郵便番号を入力したらそれっぽい住所が補完される機能って欲しいよねー」って言われた時ぐらいのフランクなやつです。

## 使うもの
– https://github.com/yubinbango

以上です。

## 使い方

とにかくサンプルコードをクレ!って人のためにフロントっぽい感じのもの

元記事を表示

ChatGPTを使って自動FAQ回答Chatbotを作ってみた

## はじめに
はじめました。BitStar CTOの山下です。
BitStarでは主に160万件のデータを取り扱う日本最大級のソーシャルデータベースを開発しています。

## 開発の背景
2023年で一番盛り上がった話題といえばChatGPTではないでしょうか?
おそらくエンジニアの方であれば一度は触ったことあるのではないでしょうか?
BitStarでも社内でCPOの出水より「BitStar Labo」というワーキンググループを立ち上げまして、社内で勉強会を実施していました。エンジニアはもちろん映像企画・編集や営業の方も参加してChatGPTを活用したディスカッションを行っておりました。
大きく2つのチーム、画像生成系のCreationチームと、文章生成系のTransformationチームに分かれて週次で意見交換を行ってきました。
今回はその中でも実際に社内運用を始めたChatGPTによる自動FAQ回答Chatbotを作りました。

**BitStar Labo Kickoff 資料**

  • OTHERカテゴリの最新記事