PHP関連のことを調べてみた2021年12月18日

PHP関連のことを調べてみた2021年12月18日

DynamoDBでBatchWriteItemを使用する際の注意点

## 概要
DynamoDBを使用していて複数データを保存、削除する際、`BatchWriteItem`を使用することになる。
具体的な使用例と注意点をまとめる。

## BatchWriteItem
データの保存、削除等をまとめて実行できる。
並列で処理されるため、パフォーマンスは上がる。
※レイテンシは低減されるが、消費キャパシティは変わらないのでコストが下がるわけではない。

## 基本的なルール
AWSのdocumentにはこのような記載がある。
[BatchWriteItem – Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html)
>The BatchWriteItem operation puts or deletes multiple items in one or more tables. A single call to BatchWriteItem can write up to 16 MB of data,

元記事を表示

paiza(PHP)でよく使う処理をまとめてみた

#はじめに
rubyからスタートして約4か月。最近は次の仕事でよく使われるPHPを勉強している。paizaでよく使われる入力値の仕方をまとめてみました。

###➀入力値の取得
####ruby
“`
hoge = gets
“`
####PHP
“`
$hoge = fgets(STDIN);
“`

###➁空白や改行が与えられる場合
####ruby
“`
hoge = gets.chomp
“`
####PHP
“`
$hoge = trim(fgets(STDIN));
“`

###➂➁を配列で取得したい場合
####ruby
“`
hoge = gets.chomp.split
“`
###PHP
“`
$hoge = explode(” “,trim(fgets(STDIN)));
“`

##おわりに
学習していくうちに追加していこうと思います。
間違っていたらご指摘お願いします(笑)

てかセミコロンのつけ忘れてしまう。。

元記事を表示

【PMMP 4.0】 デスノートを作って運営にいたずらしよう

## 前書き
この記事を読んでおられる方にはサーバーを運営しているという方がいらっしゃると思います。
運営というのはサーバーの保守のみならず、人の管理などもしなければならず、とても大変なことです。
サーバーを運営されてる方々に感謝しきれません。

そんな運営の方々にさらなるストレスを与えるべく、
デスノートを使っていたずらをする方法を伝授していきます。

それでは、対戦よろしくお願いします。

## 動作環境
:::note warn
この環境以外での動作は保証できません
:::

サーバーソフト
PocketMine-MP 4.0.1

PHP
PHP 8.0.13

## 設計
まずは、やりたいことを羅列していきます。

##### 【やりたいこと】
– 本に死因と名前を書く
– 名前が書かれた人を殺す

非常にシンプルですね。
これだけだとプログラム上の流れを把握しにくいので図を作りましょう。

![draft.png](https://qiit

元記事を表示

Laravel x Pestの覚書

# 超絶マイナーキラキラクッキリテストフレームワークPest

## Pestとは?

https://pestphp.com/

[Pest](https://pestphp.com/)とは[Larastan](https://github.com/nunomaduro/larastan)や[Collision](https://github.com/nunomaduro/collision)などでお馴染みの[nunomaduro](https://github.com/nunomaduro)さんが携わっているPHPUnitの代替となる新しいテスティングフレームワークです。

PHPUnitの[Assertions](https://phpunit.readthedocs.io/ja/latest/assertions.html)が使え、更に独自で追加されたExpectationsによってよりシンプルに書くことが出来るようになっています。

### Jestの派生

[Jest](https://jestjs.io/ja/)を使った経験がある人であればPestはほとんどマスターした

元記事を表示

Twitter API v2で大量(<100)のツイートを一度に取得する in PHP

利用者の目線で、Twitter API v2を使ったツイート検索の実装例をPHPを使い紹介します。
一度に100件以上取得する際のPHPの実装例の記事がなかったのでAPI自体の仕様と共に軽く紹介します。(Pythonなどは有る)
Web APIアドベントカレンダーの18日目です!昨日17日目は@sugimomotoさんの[Mock API ライブラリ WireMock を使ってみた](https://www.cdatablog.jp/entry/wiremock)です。

https://github.com/ichii731/php-examples/tree/main/twitter_v2_search

# Twitter API v2検索概要
Twitter API v2とは2020年8月にリリースされた新しいAPIです。
また、ちょうど先月の11月中旬に**v2がデフォルトのAPIになり、v1.1からの移行が推奨されれています**
## 主要PHPライブラリの対応状況
今回は主にPHPでの実装を中心にご紹介します。
最も有名なTwitter APIのライブラリである「Twit

元記事を表示

Symfonyのパスポート

[Symfony Advent Calendar 2021](https://qiita.com/advent-calendar/2021/symfony)の記事です。
Symfony5.1あたりから新しくなった認証に必要なパスポートについて紹介します。

## 新しくなった認証まわり

Symfonyは以前まで主にGuardコンポーネントという認証の仕組みを利用していました。AbstractGuardAuthenticatorクラスを継承したクラスを作成し、そこに認証処理を書いていきました。Symfony5.1から新しくEvent-basedと呼ばれる仕組みが追加され、Symfony5.3からGuardコンポーネントがdeprecatedとなりました。

Event-basedでは、ざっくりと以下の3つのイベントが発火します。

| 名前 | 内容 |
|–|–|
| CheckPassportEvent | メインイベント。パスワードやCSRFなどの認証情報が正しいかチェック |
| LoginSuccessEvent | 認証情報が正しい場合に発火 |
| LoginFail

元記事を表示

【PHP】selenium_チートシート (Facebook/webdriver).

## Webdriver PHP API 使い方
[こちら](https://gist.github.com/aczietlow/7c4834f79a7afd920d8f)を日本語訳したものです。訳が変なところあると思いますが、温かい目で見て頂けると幸いです。

* ブラウザを開く
selenium-webdriverを使ってFirefoxのインスタンスをスタートする

$browser_type = ‘firefox’
$host = ‘http://localhost:4444/wd/hub’

$capabilities = array(\WebDriverCapabilityType::BROWSER_NAME => $browser_type);
$driver = RemoteWebDriver::create($host, $capabilities);

$browser_type
# :firefox => firefox
# :chrome => chrome
# :ie => iexplore

* 指定された

元記事を表示

Docker PHPコンテナのタイムゾーンをAsia/Tokyoに設定する 個人メモ

# 目的

– DockerのPHPコンテナのタイムゾーンをAsia/Tokyoに設定する方法をメモ的にまとめる

# 方法

– 下記の一行をPHPのDockerfileに記載する。

“`Dockerfile
ENV TZ=Asia/Tokyo
“`

– `$ docker-compose up -d –build`コマンドなどでビルドし直すと反映される。

元記事を表示

実務でよく使うPHP8系 文法

PHP8がリリースされてから
なんだかんだ実務でよく使う新文法を羅列しました

# 名前付き引数
“`php
function funcA(
int $hoge = 0,
int $fuga = 0,
int $foo = 0,
int $bar = 0,
int $buzz = 0
) {
}

$this->funcA(foo: 20, fuga:3);
“`
https://www.php.net/releases/8.0/en.php#constructor-property-promotion

# コンストラクタでの、プロパティのプロモーション
“`php
public function __construct(
protected Staff $staff,
protected Customer $customer
) {
}

// これだけで下記を書いたことになる
// $this

元記事を表示

macでHomebrewを使ってPHPをインストールする

##PHPコマンドのセットアップ

MontereryOS以降のmacなどでは、デフォルトではPHPはインストールされない仕様へと変更されました。しかし、phpを使用したフレームワークでの制作などで、phpコマンドを使用するシーンは存在します。そういった場合には、自分でphpコマンドを使用できるようにセットアップする必要があります。
本項では、Homebrewというパッケージ管理ソフトを使用し、phpコマンドを使用できるようにセットアップを行っていきます。

##Homebrewインストール

まずは、ソフトのパッケージ管理ができるツールの「Homebrew」をインストールします。
下記のサイトからHomebrewのインストールコマンドを入力してください。

下記のサイトの「インストール」からコマンドをコピーしコマンドライン上で実行してください。
[Homebrew](https://brew.sh/index_ja “macOS(またはLinux)用パッケージマネージャー — Homebrew”)
![Homebrewインストールページ](https://qiita-image-st

元記事を表示

a-blog cmsで現在のエントリーを「関連エントリー」に登録しているエントリーを表示する

これは「a-blog cms Advent Calendar 2021」の、17日目の記事です。

https://adventar.org/calendars/6371

## 前置き

管理しているサイトで、数年前に「今表示しているエントリーが**関連付けられている**エントリーを表示できませんか」と相談されました。言い換えると現在のエントリーを**関連エントリーに登録している**エントリー、ということになります。

そのサイトでは、ブログを横断した関連エントリーを多用していました。ここでは*A→B*とします。
数十件くらい投稿してから、*B→A*の関連付けも追加して相互リンクにしようとしたところ、a-blog cmsの仕様上、エントリーBの編集画面へ行っても「関連付けをしているのがエントリーAである」ことがわからないので、AとBの編集画面を両方表示して作業している、とのことでした。

これは非常に難しいです。a-blog cmsのタグだけでは「関連付けられているエントリー」を調べる方法がないからです。相談された方は「これができたら助かるなー」レベルのご相談だったので、まとまった作

元記事を表示

【Laravel】PHPUnitでテストコードを書くときのTipsやサンプルコード

Laravel Advent Calendar 2021 17日目の記事です。
僕自身が書いた経験のある範囲でPHPUnitでテストコードを書くときのTipsやサンプルコードをまとめます。

https://qiita.com/advent-calendar/2021/laravel

## はじめに

いきなりタイトルには直接関係ない小ネタを挟みます。

### テスト関連のコマンド

テストファイル作成

“`sh
# tests/Featureに作成される
php artisan meke:test SampleTest

# tests/Unitに作成される
php artisan meke:test SampleTest –unit

# ディレクトリを指定してファイル作成
# tests/Feature/User配下
php artisan meke:test User/SampleTest
# tests/Unit/User配下
php artisan meke:test User/SampleTest –unit
“`

テスト実行

“`sh

元記事を表示

Ray.MediaQuery

# ドメインとインフラ層のDIP

この記事は [BEAR.Sunday Advent Calendar 2021](https://qiita.com/koriym/private/32a4ad10f0601345767c)の記事です。
以前の記事、[Ray.Di](https://qiita.com/koriym/items/55101291b72cda899871)で[Dependency Inversion Principle(DIP)、依存性逆転の原則](https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E9%80%86%E8%BB%A2%E3%81%AE%E5%8E%9F%E5%89%87)を紹介しました。

その原則に従えば、ドメインから特定の永続化コンポーネント、特定ORMの実装に依存することはどうでしょうか?

ドメイン層からインフラ層の実装に依存するのではなく、その逆、ドメイン層のインターフェイスにインフラ層の実装を合わせる事を特定の状況下でより効率的に行うためのパッケージがこの[Ray.MediaQ

元記事を表示

PHPUnitとMockeryで単体テストつくる

本記事は[ハンズラボAdvent Calendar 2021](https://qiita.com/advent-calendar/2021/handslab)の17日目です。

## はじめに
下記のようなクラスのテストを書きたいなーと思いました。

“`php
class Hoge
{
private $clinet; // 外部に依存

private function someMethod()
{
$return = $this->clinet->methodA(); // 外部に依存
$result = Fuga::staticMethod(); // 外部に依存
// なんかの処理
}

public function callSomeMethod()
{
// なんかの処理(長い&外部依存あり)
$this->someMethod();
// なんかの処理(長い&外部依存あり)
}

//

元記事を表示

Laravel のサーバー移行 ( PHP8の環境) 手順

#はじめに
レンタルサーバーから、AWSEC2の移行する際に、苦戦したため、手順を記載します。
移行前は、apacheでPHP7、移行先はnginxでPHP8となっています。

#前提条件
– VPC,サブネット,EC2,RDSは構築済み
– 移行前
– PHP7.1
– apache2.4
– Laravel 5.5
– phpmyadmin

– 移行後
– `PHP8.0`
– `nginx`
– `Laravel6以上` (PHP8に対して、laravel6以上が対応しているため)
– RDS MYSQL
– adminer(phpmyadminでもよい)
– EC2 + RDS + Nginx + PHP8 + Adminer の構築は↓が参考になります。(wordpressのところは省きましょう)

https://qiita.com/holdout0521/items/342afcee0736a7165e7d

#流れ
1. DBを移行
1. ディレクトリを移行

元記事を表示

AWS SDK for PHP を使って画像アップロードをサクッと実装する

この記事は [PHP Advent Calendar 2021](https://qiita.com/advent-calendar/2021/php) 16日目の記事です。

15日目の記事は[@opy](https://qiita.com/opy)さん投稿の [PHPによる疑似的なイミュータブルとムーブセマンティクスモドキ](https://qiita.com/opy/items/f6cf96b2c0b62ab4f9a9) 、
17日目の記事は[@iamyukihiro](https://qiita.com/iamyukihiro)さん投稿の[私用のLinuxサーバーに、PHPのビルトインサーバーをデプロイした話](https://tech.quartetcom.co.jp/2021/12/17/built-in-server-deployment/)です。

# 本記事の概要

[AWS SDK for PHP](https://aws.amazon.com/jp/sdk-for-php/) を用いて **S3 の指定バケットへ画像アップロード**をできるようにします。

元記事を表示

【PHP】ChromeDriverでPDFをダウンロードする方法

Selenium+ChromeDriverでWebブラウザの自動操作をする際、リンクが貼ってあるPDFを保存することが出来ずに詰まりました。
Pythonでの解決記事はいくつかあったのですが、PHPでの記事はなかった(気がする)ので、残しておこうと思います。

# PDFのリンクをクリックした時に直接ダウンロード
Google Chromeがデフォルトの設定のままだと、PDFファイルへのリンクをクリックした際、自動的にその内容がタブ内に表示される一方で、PDFファイルはローカルに保存されません。
よって今回は、PDFのリンクをクリックした際に直接ダウンロードするようにするChromeDriverのoption指定を紹介します。

“`php5
$options->setExperimentalOption(‘prefs’, [
‘download.default_directory’ => $directory_path, //デフォルトのダウンロード先を変更(必須ではない)
‘plugins.always_open_pdf_externally’ => true /

元記事を表示

KMSで生成したキーペアを利用してJWTを作成するサンプル

## 目的

JWTを利用することが増えてきましたが、都度払いだした鍵の管理が業務を圧迫するため
KMS管理のキーペアでJWTを作成する備忘録です。

## コード

KMSでは秘密鍵を取得することができないため、直接署名しています。
公開鍵は取得できるため、decodeは既存ライブラリ利用の想定です。

エンタープライズ環境では [lcobucci/jwt](https://github.com/lcobucci/jwt) のSigner実装として組み込むなどをお勧めします。

“`PHP
use Aws\Kms\KmsClient;

class JWTEncoder
{
/**
* JWT生成
*
* @param KMSClient $kms
* @param string $key
* @param array $claims
* @return string
*/
public static function encode(KMSClient $kms, string $key, arr

元記事を表示

Laravel の firstOrNew() firstOrCreate() をレースコンディション考慮で実用的に使う

# TL;DR

– Laravel の `firstOrNew()` `firstOrCreate()` `updateOrCreate()` 等はレースコンディションが全く考慮されていない
– 普通はユニークキー制約エラーを拾ってリトライするだけで十分
– `updateOrCreate()` 相当の処理で厳格にロストアップデートを回避する場合,悲観ロックまたは楽観ロックのいずれかの適用が必要。 Laravel 8.10 以降は `upsert()` という選択肢もある
– **[ライブラリ](https://github.com/mpyw/laravel-retry-on-duplicate-key)** を作ったので使ってね
– Laravel 8.10 の `upsert()` は,使われ方が全く違うので差別化はできている

# ご挨拶

Qiita ではご無沙汰しております。最近は専ら走り書きが多く,ネット上で技術にフォーカスした記事らしいものを書くのはかなり久しぶりです。以下の転職エントリが多分最後だと思います。

https://note.com/mpyw/

元記事を表示

カフェでプログラミングしてる風(でも何もやってない)php版

こんにちは!

久しぶりの投稿になります。kamotetuです。

[こちらの記事](https://qiita.com/torifukukaiou/items/b70dc5476762225cd4a2)を読んでたら、まだphpがなかったので作ってみました。

後発ですが、そんな大した内容ではないので暇つぶしに読んでもらえたらと思います。

あと、英語苦手なので、ターミナルに出力される英語はニュアンスで感じ取ってください。

php7.3
os mac

### 実際の挙動

![ezgif.com-gif-maker (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480146/ffa7dfc0-f2fd-1748-cf8c-e7a6db5f46e6.gif)

こんな感じになります。

processて何のプロセスやねんて感じですが、まぁIT知らない人が後ろから覗き込んだら「おぉ!?」てなるんじゃないかと。
あと、イメージしたのはdockerのbuildとhomebrewのインストールをイメ

元記事を表示

OTHERカテゴリの最新記事