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

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

初めてLaravelを実装した時にレビューで指摘されたこと〜レビューの数だけ強くなれる〜

# はじめに
こんにちは、mamiと申します。
メインはフロントエンドエンジニアをやっております。
最近社内のプロジェクトでバックエンドの実装全般を担当させてもらっているのですが、レビュー内容が非常に勉強になったため今後の自分の糧とする目的+同じようにバックエンドがジュニアレベルのエンジニアの方にお役に立てればいいなと思いこの記事を書いております。

レビュアーの方は常々Laravel公式ドキュメントに則った指摘をしてくださるので、その点においても非常に参考になる部分が多いはずです。
Laravelを仕事で使う予定、もしくは現在使っている方は是非参考にしてみてください!

~~人の失敗は蜜の味~~同じ轍を踏まない為にも、私の屍をどうぞ超えていってください!

# 対象読者
– Laravelについて実務レベルで知りたい方
– Laravelをもっと深く知りたい方
– バックエンドの駆け出しエンジニアの方
– バックエンドも知りたいフロントエンドエンジニアの方

# レビュー内容

では早速ですが実際のレビュー内容を見ていきましょう!

## Enumの設定

元記事を表示

PHPで論理型を文字列に変換する際の言語仕様をリファレンスから調べる & php-srcのソースを書き換えて挙動を変えてみる

最近 Laravel でWebアプリの開発を始めたのですが、PHP の言語仕様のうち論理型から文字列へのキャストが思っていた振る舞いと違っていたので仕様を調べてみました。

# 環境

M1 Mac 上に建てた Ubuntu のコンテナです。

“`
$ uname -a
Linux b59ec1c5b53c 6.5.11-linuxkit #1 SMP PREEMPT Wed Dec 6 17:08:31 UTC 2023 aarch64 aarch64 aarch64 GNU/Linux

$ cat /etc/os-release
PRETTY_NAME=”Ubuntu 22.04.4 LTS”
NAME=”Ubuntu”
VERSION_ID=”22.04″
VERSION=”22.04.4 LTS (Jammy Jellyfish)”
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL=”https://www.ubuntu.com/”
SUPPORT_URL=”https://help.ubuntu.com/

元記事を表示

XAMPPでMySQLが起動できなかったときのメモ

## はじめに

「気づけばプロ並みPHP」という書籍で学習中にXAMPPで環境を用意する必要があり、その際に書籍通りに操作したところapacheなどは起動することができたのですが、MySQLは起動しなかったのでその原因と解決についてまとめました。

【環境】
MacOS
xampp 7.2.3

## 結論
**原因**
もともと入れていたMySQLがずっと動いていて、
かつ自動で再起動していたため、
xamppで使うport番号と被ってしまっていたことが原因でした。

**解決策**
**ポート番号が使用されているかを確認**
“$ sudo lsof -i:3306“
**利用されていた場合そのプロセスをkillする**
“$ sudo kill -9

**自動で再起動になっている場合はそれも止める**
“$ brew services stop mysql“

## 概要
冒頭の説明のままですが、MySQLを選択しstartをクリックしても緑色のランプにならなかったため、

![スクリーンショット 2024-03-18 23.38.51.png

元記事を表示

PHPでコードゴルフ – Brainf*ck

この記事は、以下の記事の続きです。

https://qiita.com/takaram/items/5ee3957a2303f2c3c559

第3問の自分の提出コードの解説をします。

## 第3問:Brainf*ck
https://t.nil.ninja/phperkaigi/2024/golf/q/brainf-ck/

プログラミング言語[Brainf*ck](https://ja.m.wikipedia.org/wiki/Brainfuck)のインタプリタを実装する問題でした。
私の提出コードがこちらです。

“`php
$s=fread(STDIN,9999);$p=-1;function l($s,&$p,$r){for($d=1;$d+=[“[“=>$r,”]”=>-$r][$s[$p+=$r]]??0;);}for($m=[$t=0];$s[++$p]??0;){$a=&$m[$t];match(ord($s[$p])){62=>$t++,60=>$t–,43=>$a++,45=>$a–,46=>print chr($a),91=>$a||l($s,$p,1

元記事を表示

PHPカンファレンス2024

# はじめに
入社して半月が経ちました。今回が初投稿になります。
少し前になりますが[PHPカンファレンス関西2024](https://2024.kphpug.jp/)に参加しましたので感想を書きたいと思います。

# 参加したセッション
#### レガシーシステムへのPHPStan導入から半年での課題と効果
https://fortee.jp/phpcon-kansai2024/proposal/10c6f1ac-ec4b-4895-8db7-39b9a13c84bb

このセッションでPHPStanを知り、どのように運用しているかを学べたので良かったです。
現在研修で作成しているアプリケーションにも導入し、最初はレベル9でしたが、
時間的に間に合わないと判断しレベル8に下げました。
これ以上レベルを下げないようにしたいです。
#### 「”品質”が高いコード」って何?
https://fortee.jp/phpcon-kansai2024/proposal/a60c9e18-bc61-4f60-80d0-0a0ea7a205c4

コードの品質についての認識を改めさせられるセッシ

元記事を表示

【PHP8.4】メソッド引数のデフォルトnullがついに禁止される

“`php
function foo(int $x = null)
“`

よく見たら不自然なんだけどこれまで普通に許されていた、この引数デフォルト値がついに禁止されます。

何がおかしいって型が`int`なのに引数を渡さかった場合nullになってしまうので、矛盾してしまうわけですね。
これはPHPが昔からの仕様を残しておいたためであり、いわゆる歴史的経緯というやつです。

以下は該当のRFC、[Deprecate implicitly nullable parameter types](https://wiki.php.net/rfc/deprecate-implicitly-nullable-types)の日本語訳です。

# PHP RFC: Deprecate implicitly nullable parameter types

## Introduction

PHP7.1で[?T構文](https://wiki.php.net/rfc/nullable_types)、さらにPHP8.0で[Union型](https://wiki.php.net/rfc/union

元記事を表示

Google Authenticatorでの2段階認証実装

# はじめに
昨今、様々なログイン時に使用されている2段階認証の実装備忘録です。

PHPでの実装にあたり、[PHPGangsta/GoogleAuthenticator](https://github.com/PHPGangsta/GoogleAuthenticator)を使用している方を見つけたので、参考に組んでみました。

# 認証の流れ
フロントでAPIを呼び出し、
返却されたQRコードを画面に表示する手法で実装しました。

大まかな流れは以下になります。
1. ユーザー登録
同時に秘密鍵をDBに登録
2. ログイン後、認証ページに移動
3. QRコードを表示
4. Google Authenticatorで読み取る
5. 表示された6桁のコードを入力して認証

# 実装の手順
## ➀Composerインストール
“`shell
composer show –available phpgangsta/googleauthenticator
composer require –prefer-dist phpgangsta/googleauthenticator:de

元記事を表示

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

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

前回の記事

https://qiita.com/keitaMax/items/4196188be54f46cbd232

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

# GitHubActionsを作成

以下のように`phpcs.yml`ファイルを`.github/workflows`フォルダ配下に作成しました。

“`yml:phpcs.yml
name: phpcs

on: [pull_request]

jobs:
phpcs:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src
steps:
– uses: actions/checkout@v2
– name: docker-compose up

元記事を表示

Laravel(PHP)でOpenAI APIを使用する

ハッカソンで、Laravel(PHP)からOpenAIのAPIをたたく機会がありました。
OpenAI APIのドキュメントにはPython、node.js、curlの呼び出し形式がありますが、PHPからの呼び出し形式はなかったので、備忘録として書き残します。
# 目次
– [テキストからテキスト](#テキストからテキスト)
– [テキストから画像](#テキストから画像)
– [画像からテキスト](#画像からテキスト)
– [APIリクエストの実装方法](#APIリクエストの実装方法)

## テキストからテキスト
https://platform.openai.com/docs/guides/text-generation
エンドポイント:`https://api.openai.com/v1/chat/completions`
~~~php
[
‘model’ => ‘gpt-4’,
‘messages’ => [
[
“role” => “user”,
“content”

元記事を表示

PHPの変数と関数について。初学者がなんとなく理解するに至ったイメージ

## 前書き
変数と関数について解説していきます。
バックエンドでPHPが一番最初に触れることが多いかと思います。
前知識がない状態で記事などをみても、「変数 関数 クラス…」と言われても意味がわからないはずです。
現場にでて理解するに至ったイメージや考え方を残します。理解しやすそうな順序で書いたつもりです。
色々な記事を見て、そんな説明でわかるか!となったので、よくある記事とは違う角度で説明できたらと。

## まずは変数。
PHPにおける変数とは。。。
“`php:index.php

“`
これです。
「$」マークがついているものは変数です。
変数はなんでも入れられる便利なシステムです。複数いれたりもできます(配列といいます)。
数字だったり文字だったり。しかも入れた数字で四則演算もできます。

こんな感じで入れます。$〇〇には好きな名前をつけてあげてください。
“`php:index.php

“`
(ルールとして、””で囲まれたものは文

元記事を表示

『PHPカンファレンス 関西』に参加してみた!

## はじめに
2022年7月〜SES企業でプログラマーをしている、みつです。
使用言語は主にC#やJavaで、普段は業務システムの開発に携わっています。
2024年2月11日にグランフロント大阪で開催されたPHPカンファレンスに参加してみたので、感想をまとめてみました!

https://2024.kphpug.jp/

## 参加理由
・しばらくはPHPを業務でしようすることはなさそうですが、この先PHPで開発する可能性があるため、勉強しておいて損はないと思った。
・PHPは業務で2週間程しか触ったことがないですが、『これからPHPを勉強したい人にも参加資格があります』とのことだったので、自分でも参加できるかなと感じた。
・コロナなどもあり、関西で開催されるのは6年ぶりということを聞き、参加してみたいと思った。
(・シールが欲しかった:relaxed:)

## 参加したセッションと感想
・[Laravelでミニマム開発からスタートして個人サービスを利益化するまでの経験談! ](https://fortee.jp/phpcon-kansai2024/proposal/8c1e

元記事を表示

AtCoderの過去問100問解いて得たこと

はじめまして!CREとしてエンジニアをやってますkazuです🦌

AtCoderの問題を2023年12月から解き始めて、2024年3月で100問に到達したので、自分の振り返りも兼ねて中間報告をすることにしました。

![スクリーンショット 2024-03-16 19.30.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2597943/a3085edc-94d6-7f57-32b3-ea01c4afaab7.png)

# やり始めた経緯

CREというポジションは、コードをガッツリ書く事が少なく、顧客から上がってきた仕様の確認や調査の依頼などの対応が多いため、プライベートでコードを書く時間を増やしたいなと思い始めたのがAtCoderでした。

たまに、改修タスクをこなすのですが、実装する際の思いつく処理のパターンが少ないこと、処理を書く前の言語化があまりできていないこと、PHPの関数をそもそも知らないなどこういった課題もあったため、とりあえず始めてみました。

# やってみてよかったこと

元記事を表示

OSSの形態素解析システム【MeCab】を使う①

MeCabについて

https://taku910.github.io/mecab/

1.MeCabのインストール

“`
sudo apt update
sudo apt install mecab libmecab-dev mecab-ipadic mecab-ipadic-utf8
“`

2.PHPのMeCabラッパーパッケージのインストール

“`
sudo apt install php-mecab
“`

MeCabをどのように使っていくかはまた後程!

元記事を表示

PHPでのライブラリの導入方法

PHPでは Composer(PHPの依存管理ツール)を使うと便利!

https://getcomposer.org/

Composerの仕組み

▼composer.jsonファイル
プロジェクトで使用するライブラリを記述したもの
▼composer.lockファイル
実際にどのライブラリのどのバージョンをダウンロードしたのかをひとまとめにしたもの。
※実際の開発現場では上記二つのファイルを共有して開発する。
チーム開発時に使用しているライブラリがバラバラだとそれが原因でエラーになることもある。

手順

①GitHubでインストールしたいライブラリを検索する

②composer.jsonを作成(プロジェクトの初期に1度実行)
“`
$ composer init
“`

(今回はDockerのappコンテナ内に入れたいので以下のコマンドで実行しました。↓)
“`
$ docker-compose exec app com

元記事を表示

Cockpit (CMS) の初期設定の注意点

# Cockpit (Headless CMS)

フロントエンドはスクラッチで開発したい場合、ヘッドレスCMSを使うことになりますが、小規模なサイトだと `Strapi` では仕掛けが重すぎたり、リクエストが多いXserverなどのレンタルサーバーへの設置だとPHPで動くものの方が良かったりします

`Wordpress` をヘッドレスCMSとして利用しても良いのですが、そもそもなぜフロントエンドはスクラッチで開発となったのか考えた時、若干の疑問が生じてきます

弊社では `Strapi` で実装できない場合や小規模サイトの場合、動作と仕掛けが軽いので、`Cockpit` (Linuxの管理システムではないコックピット) を採用してます

ただ、そのまま設置するとセキュリティ上の疑念が出てくるため、その初期設定についてここでまとめて公開します(まとめてと言うほどたいそうなことではないですが、備忘録に近いです)

ちなみにいま `Cockpit` について興味を持たれた方や簡単な使い方は、他の記事を参考にしてください

https://codit.pages.dev/notes/avg

元記事を表示

PHP セキュリティ攻撃・対策

# ①XSS (Cross Site Scripting)
:::note info
#### 概要
– 入力フォームにJavaScriptなどのScriptを仕込むことができる
:::

:::note warn
#### 対策
– 各formにサニタイズの処理を行う。
– サニタイズ = 特殊な文字を別の文字に置き換えること。
        消毒、無害化、エスケープとも言う。
– 関数「htmlspecialchars」を使用する
:::

# ②クリックジャッキング
:::note info
#### 概要
– 通常のボタン上に、悪意のあるボタンを透明にして設置する
:::

:::note warn
#### 対策
– サーバーまたはPHP上に「X-FRAME-OPSIONS:DESY」を記述する
– PHPの場合は、header(’X-FRAME-OPSIONS:DESY’)を記述
:::

# ③CSRF (Cross Site Request Forgeries)
:::note info
#### 概要
– シーサーフと読む
– 「formが存在するページ」をForg

元記事を表示

Paiza[構造体の更新 PHP編]

解いたので記録として載せておく。
最適解かどうかはわからない。

https://paiza.jp/works/mondai/class_primer/class_primer__change

“`PHP:result.php
$input_line = fgets(STDIN);
$users = [];
$update_list = [];
$first_line = explode(” “, $input_line);
$people_num = $first_line[0];
$update_num = $first_line[1];
$sum_line = $first_line[0] + $first_line[1];

for ($i = 0; $i < $sum_line; $i++) { $s = fgets(STDIN); $s = str_replace(array("\r\n","\r","\n"), '', $s); $s = explode(" ", $s); if($people_num > $i){

元記事を表示

Laravel 11でMariaDBがサポートutf8mb4_uca1400_ai_ci🫨🫎🫏🪽🐦‍⬛🪿🪼🪻🫚🫛🪭🪮🪇🪈🪯

https://laravel.com/docs/11.x/releases#mariadb

# MariaDB のサポートの改善

Laravel 11 には、MariaDB のサポートが改善されました。以前の Laravel リリースでは、Laravel の MySQL ドライバー経由で MariaDB を使用できました。ただし、Laravel 11 には、このデータベース システムにより良いデフォルトを提供する専用の MariaDB ドライバーが含まれています。

Laravel のデータベースドライバーの詳細については、[データベースのドキュメント](https://laravel.com/docs/11.x/database)を参照してください。

Laravel 11 では、専用の構成オプションを導入し、推奨される照合順序を採用することで、MariaDB との互換性を強化しています。

主な変更点:
個別の構成: MariaDB には、MySQL とは別に、カスタマイズされた設定のための独自の構成セクションが追加されました。
照合順序の更新:
MySQL のデフォルトの

元記事を表示

Laravel11 アップデートが来たった!!

# Laravel11 アップデート

Laravel11 がリリースされたので色々な記事を参考に自分なりにまとめていきます。

ReleaseNote : https://laravel.com/docs/11.x/releases

## 前提情報

PHP8.2 以上

## スリム化された構成

> 新しいアプリケーション構造は、Laravel 開発者がすでによく知っている概念の多くを保持しながら、より無駄がなく、より現代的なエクスペリエンスを提供することを目的としています。

“`
app/
├── Http/
│ └── Controllers/
│ └── Controller.php
├── Models/
│ └── User.php
└── Providers/
└── AppServiceProvider.php
bootstrap/
├── app.php
└── providers.php
routes/
├── console.php
└── web.php
“`

※今回は上記の 7 ファイルについて記述していきます。

#

元記事を表示

Laravel 11のアーティさん【php artisan make:class/enum/interface/trait】

Laravel 11で追加されたartisanの挙動を確認しよう!

https://laravel.com/docs/11.x/releases#new-artisan-commands

# Laravel 11のインストール
Laravel 11はPHP8.2以上が必要です
“`bash
composer create-project laravel/laravel:^11.0 example-app
cd example-app
“`

# php artisan make:class

“`bash
$ php artisan make:class Hoge

INFO Class [app/Hoge.php] created successfully.
“`

“`php:example-app/app/Hoge.php

元記事を表示

OTHERカテゴリの最新記事