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

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

【Laravel】Swagger-PHPを使ってSwagger(OpenAPI)仕様を作成する

# はじめに

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

今回はSwagger-PHPを使ってみたいと思います。

https://zircote.github.io/swagger-php/guide/

# Swagger-PHPとは

>swagger-phpは、PHP ソース コード ファイルから API メタデータを抽出するライブラリです。
>
>アイデアは、アプリケーション内の関連する PHP コードの隣にswagger-php 注釈または属性を追加することです。これらには API に関する詳細が含まれており、swagger-phpそれらは機械可読なOpenAPI ドキュメントに変換されます。
(引用:https://zircote.github.io/swagger-php/guide/)

PHPでAPIを作成したら、自動的にSwagger(OpenAPI)仕様を作成してくれるライブラリのことらしいです。

# インストール

https://zircote.github.io/swagger-php/guide/installa

元記事を表示

Composer の自作パッケージの作成を通して php 開発環境を整えてみた

# はじめに

これまではノリと雰囲気で php と関わってきましたが、ついに真っ向から向き合っていかなければいけない時期が来たようです…!

というのも最近、Laravel フレームワークで作成されたアプリの本番コンテナを作成するという業務に関わったことで、アプリを弄れないとインフラ側で強引に頑張らねばならなくなり、労力の割に複雑で認知負荷が高くなってしまったり拡張性に乏しかったりと、非常に辛いことを実感しました。

そこで、PHP の基礎を理解するにあたってとりあえずは Composer の自作パッケージの作成を通して色々と学んでみましたので、得た知見や疑問・課題などを書いてゆければと思います。

ノウハウ共有というよりかは、体験談・感想文 的な要素が強いかもしれませんが、よければご覧下さい。

# ネタとして Composer パッケージ作成を選んだのはなぜ?

PHP のパッケージ管理といえば Composer であり、色々と使いこなせていない機能があることをなんとなく知っていました。
自分は SRE なので、PHP アプリの CI/CD のベストプラクティスを身につけるにあた

元記事を表示

PHPの配列で和集合,差集合,積集合

## はじめに
SQLでUNIONやEXCEPT,INTERSECTを使った際,PHPで和集合とかあるのか気になって調べたメモ

PHPでは、配列の和集合や差集合を直接扱う組み込み関数は提供されていませんが、array_mergeやarray_diff関数を使用してこれらの操作を行うことができます.

## 和集合
“`php
$array1 = [‘apple’, ‘banana’, ‘cherry’];
$array2 = [‘banana’, ‘cherry’, ‘date’];

// 和集合の計算
$union = array_merge($array1, $array2);

// 重複を削除するためにarray_uniqueを使用
$union = array_unique($union);

print_r($union);

Array
(
[0] => apple
[1] => banana
[2] => cherry
[5] => date
)

“`

## 差集合
“`php
$array1 = [‘apple’, ‘b

元記事を表示

PHP フォームセキュリティの学習振り返り FWなし

# XSS (Cross-Site-Scripting) 対策

対策方法: サニタイズをする。

phpの標準関数 `htmlspecialchars`を使用する。

下記のコードはサニタイズを施していない。

“`php:form.php




PHPでファイルのタイムスタンプをマイクロ秒精度で取得するには

Linux系OSなら素直に`stat`コマンドを使ったほうが早い。

## ファイルのマイクロ秒単位での最終修正タイムスタンプ

“`php
/**
* ファイルのマイクロ秒単位での最終修正タイムスタンプを返します。
*
* @param \SplFileInfo|string $file ファイルパス
* @return string|false ファイルのマイクロ秒単位での最終修正タイムスタンプの文字列表現 取得に失敗した場合はfalse
*/
function micro_mtime(\SplFileInfo|string $file): string|false
{
$pipes = [];

$process = \proc_open([‘stat’, ‘–format=%z’, \is_string($file) ? $file : $file->getPathname()], [
0 => [‘pipe’, ‘r’],
1 => [‘pipe’, ‘w’],

元記事を表示

PHPでフォーム入力、確認、完了画面の学習(FWなし)

# 1. 入力画面、確認画面、完了画面のフラグを定義する

$pageFlagは下記のように定義してみる

入力画面のフラグ : $pageFlag = 0; 

確認画面のフラグ : $pageFlag = 1;

完了画面のフラグ : $pageFlag = 2; 

“`php:form.php





Document




入力画面

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~認証編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/ffe50dd90d886f50f73e)の記事で、Flowにおけるイベント管理について書きました。
今回はFlowで**ログイン処理**を実装してみましょう。

# 前提知識
まずは、Flowで認証処理を実装するために抑えておきたい知識を説明します。

## どの認証方式を使うか
認証といっても、**パスワードやキーやSSOなど、様々な種類があります**。
Flowでは、それらの**認証方式の実現するための2つのインターフェース**が用意されています。
* **[1. 認証プロバイダ](https://github.com/neos/flow/blob/8.3/Classes/Security/Authentication/AuthenticationProviderInterface.php)**
* **[2. トークン](https://github.com/neos/flow/blob/8.3/Classes/Security/Authentication/TokenInterfac

元記事を表示

CSRF対策について

PHPでのCSRF対策についてアウトプットとして記事をまとめる。

## 1.初めに
CSRFとはWebアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のこと。

## 2.具体例
**ワンタイムトークン**を利用した対策を紹介する。

## 3. ワンタイムトークンとは
簡単に1度きりの**合言葉**を生成し、その合言葉が一致した場合のみログインを認め、それ以外は不正リクエストとして拒否する。

### 3.1 実装手順
1. トークンによるリクエストチェック
2. ユーザ操作によるリクエストの送信時にトークン(合言葉)をランダム生成する
3. リクエストと共に、トークンをセッションに格納かつPOST送信する
4. 受け取ったトークンとセッションに格納されているトークンを照合する
5. 一致していれば正規リクエストとして正常処理し、
6. 不一致なら不正リクエストとして拒否する

### 3.2 実装
“`php:form.php

元記事を表示

Github private リポジトリを composer installするときの注意点

## 記事対象者
(一般ユーザとしてcomposer installしており、)後述のエラー事象が発生してる方。

## 前提

organization/repos-name というプライベートリポジトリをcomposer installしようとする。

## エラー事象

composer install 時に以下のエラーが発生。


Failed to download laravel/framework from dist: The “https://api.github.com/repos/organization/repos-name/zipball/xxxxxxx” file could not be downloaded (HTTP/2 404 ): {“message”:”Not Found”,”documentation_url”:”https://docs.github.com/rest/repos/contents#download-a-repository-archive-zip”} Now trying to download from source
`

元記事を表示

Laravelのpluckは便利ですよって話

### はじめに

Laravelで開発していると必ずと言っていいほど出てくるpluckですが、Collection型配列を整頓するだけではない魅力も感じたので記事に起こそうと思いました。

状況に次第ではありますが実はEloquentで使用するとselect関数が必要なくなるんです

### 基本機能

Readoubleからそのまま引用してしまいますが、基本的な機能としては、

指定したキーのコレクション値を取得します

第1引数にvalueを、第2引数にはkeyを入れます

第1引数のみであれば、valueだけを

“`php
$collection = collect([
[‘product_id’ => ‘prod-100’, ‘name’ => ‘Desk’],
[‘product_id’ => ‘prod-200’, ‘name’ => ‘Chair’],
]);

$plucked = $collection->pluck(‘name’);

$plucked->all();

// [‘Desk’, ‘Chair’]
“`

さらに、コレクションの

元記事を表示

Laravel Debugbarとエディタを連携させる

Laravelでの開発時にDebugbarとエディタを連携させブラウザでの出力とシームレスに連携してコーディングを行うためのTIPSです。

インストールや初期設定などは行っている状態での説明になります。
上記に関する詳しい解説は以下をご参照ください。

https://qiita.com/sano1202/items/6021856b70e4f8d3dc3d

https://qiita.com/ucan-lab/items/8eab84e37421f907dea0

# デバッグしたい
Laravelでも何でもそうですが、開発している時は**とりあえずデバッグしたい**と考えるかと思います。
xdebugをインストール・設定してリモートデバッグしてもいいのですが、お手軽に環境を作りたいです。

## Laravel Debugbar

利用する場合はcomposer経由でインストールし
“`shell:composer
composer require –dev barryvdh/laravel-debugbar
“`
設定を下記のように有効にするだけです。
“`php:.

元記事を表示

MacOS上でDockerをREST APIを用いて操作するやり方

今回はMacOS上で開発をするうえで、DockerをREST APIを用いて操作する際のやり方を紹介していきたいと思います。

DockerはREST APIを用いてDockerコンテナ自体の立ち上げから停止などの様々な動作を執り行うことができます。
まず最初に、Dockerの設定を変更する必要があります。
![スクリーンショット 2024-03-21 9.34.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998838/290120a1-4d34-c5d8-4410-8c54918bc27e.png)

まず最初にPreferencesをクリックします。
そうすると設定画面が表示されますので、その画面の
![スクリーンショット 2024-03-21 9.35.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/998838/782082f3-4c0e-b12d-ad7b-28fe3d43f9a9.png)

Do

元記事を表示

クラスとインスタンスについて。初学者が理解するに至ったイメージ。

## まえがき
PHPのクラスとインスタンスについて書こうと思います。
よく、クラスは設計図でインスタンスは出来上がったもの。みたいな解説を見ます。
これの意味が全く理解できず沼ったので、同じように沼った方の助けになれば。なんとなく理解した後であればわからなくもない表現ですが…。

## クラス
PHPにおけるクラスとは
“`php:index.php
class Xxx{

}
“`

これがクラスです。
– class と宣言をし
– xxx クラスに名前をつけます
– {} の中にクラスの素材をいれていきます

じゃあクラスって何いれんの? となりますが基本的に入れるのは 変数 と 関数 この二つです。
なんでいれるの?って話ですが…
規模によっては、関数や変数の数が1000以上あったりします。とんでもない数です。
関数を改造したりと管理しやすいように、似た機能のものなどでグループ分けします。
SNSなどを例にすると
– ログインログアウトアカウント作成などの認証クラス
– 文字や写真を投稿するクラス
– お気に入りや拡散などオプション系のクラス
– などなど
このよ

元記事を表示

【2024年 目標について】

2024年の目標を書いていく
現在のスキル
・ExcelVBA
・AccessVBA
・SQL
・PHP(Laravel)
・GitHUB
・DBAシルバーの合格(5月までに)
・機械学習(ニューラルネットワーク)の勉強
*地震のデータ分析
・Python(django)で1つwebアプリケーション作る
理祖は、デプロイまでする。
・dockerを使う

1年後に結果報告していく。

終わればここに報告していく

元記事を表示

【Docker Compose】DooDを使って、PHPファイルからPythonコンテナ内のPythonファイルを呼び出す方法

## はじめに
備忘録
タイトルの通りです。
どなたかのお役に立てれば幸いです。

## ディレクトリ/ファイル構造

以下のような構造であるとします。

“`
sample/
├─ web/
│ ├─ src/
│ │ └─test.php
│ └─ Dockerfile

├─ python/
│ ├─ src/
│ │ └─test.py
│ └─ Dockerfile

└─ docker-compose.yml
“`

## `python/test.py`

今回は以下のようなプログラムとします。

“`python:python/test.py
list = [
‘Apple’,
‘Banana’,
‘Orange’,
‘Kiwi’,
‘Strawberry’,
‘Mango’
]

for data in list:
print(data)
“`

## `web/`について

`exec`関数を使って、`$command`で指

元記事を表示

大学生の私が初めてPHPerKaigi2024でスタッフをやった話

みなさん、こんにちは!
わたしは現在(2024年3月時点)、情報系大学3年でエンジニアを目指しています。
ぜひX(旧Twitter)もフォローしてください(宣伝です)

今回、PHPerKaigi2024へスタッフとして参加しましたので、その感想と参加したことない人へもぜひ読んでもらいたいと思い書きました。

## 1. 読んでもらいたい人
– **PHPerKaigi含め、カンファレンスに参加したことがない人**
– PHPerKaigiに参加したことない人
– PHPerkaigiに参加したことがある人
結局全員ですねw
特に知らない人に読んでいただきたいです!

## 2. PHPerKaigiとは

![IMG_3211](https://github.com/ShotaArima/qiita/assets/130956497/36fa51df-ae19-4b05-bd2d-bcd521636caf)

>PHPerKaigi(ペチパーカイギ)は、PHPer、つまり、現在PHPを使用している方、過去にPHPを

元記事を表示

Bootstrapを使ってデザインする

Bootstrapとは?

デザインを簡単にできるフレームワーク!
CSSにこだわる時間を省きたいときに使うと便利。
カスタムもできるため、好みにも変えられる。

公式ドキュメント:

https://getbootstrap.jp/

インストール方法

1.公式ドキュメントのダウンロードページを参照する。

https://getbootstrap.jp/docs/5.3/getting-started/download/

 今回はPHPで実装するため、composerを使ってrequireする。
“`PHP:Docker
docker-compose exec app composer require twbs/bootstrap:5.3.0
“`

2.エディタに戻り、vendor/twds/bootstrapがあることを確認。

 詳しいファイル構成は公式ドキュメントのコンテンツを確認。↓

https://ge

Pythonで認証コードを返すだけのマイクラサーバーを作ってみる

# はじめに
接続したときに「あなたの認証コードは〇〇です」みたいなの返すやつ作ってみたい
[前の記事](https://qiita.com/n_mache/items/b76cff45e3b99a65a3a0)書いてて「これサーバー側も作れそう」ってなったからやってみる
# Quarry
[Quarry](https://pypi.org/project/quarry/)ってモジュールを見つけたけど、どうやら更新が止まってて1.20.4では機能しないらしい…
1から実装するしか無さそう?
# 実際にやってみる
認証コード返すだけのサーバーだし、ステータスとログイン処理さえあればいいはず
## モジュール
`cryptography` と `requests` だけ標準で入ってないから `pip install` で入れないと動かない
“`python
import socket #TCP通信とかをするやつ
import json #JSONをパースしてくれるやつ
import struct #バイナリを簡単にするやつ(?)
import threading #同時接続とかをする

AWS RDSのデータベースを使用したPHPの掲示板で時刻表示が直らなかった原因

## 初心者がPHPで掲示板を作成しました
– HTMLやCSSは使っていたことがありますが、初めてPHPを触り掲示板を作成することになりました。
– フォームから投稿した時刻がどうしてもずれてしまい、php.iniを変更してみたり色々と調べてみても修正出来ず、原因に辿り付くまでに時間が掛かりました。
– もし同じようなことで躓く方がいた場合の参考になればと思ったのと、自身のアウトプットのために今回投稿してみました。
– というか少し考えればすぐに分かるかもですが…初心者のため温かい目で見て下さると幸いです。

## 動作環境
– AWS EC2上にLAMP構成としています。
– Linux2
– Apache
– MariaDB
– PHP8.1

## 時刻がズレていた原因
– 結論から書きますと、原因はRDSの設定でした。
– 「PHPで掲示板を作成しフォームから投稿する」というものから「原因はPHPの設定だ」と信じて疑っていなかった為、PHP上の設定をどうにか修正しようとあれこれ試してみたものの直らず、どれだけ検索しても答えが見付からず頭を抱えていました…。
– よくよく考

ダミー情報を生成する定番.

ダミー情報を生成する定番を生成する定番のコードを記載します.
Composerを使用し’faker’をインストールします.
“`
composer require fakerphp/faker
“`
使用方法例のコードとしてcsv出力するコードを記載(下記).
“`php