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

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

LaravelでSwaggerを自動生成する

## 環境
– Laravel 8.35.1
– PHP 7.4.16

## l5-swaggerを追加する
“`
$ cd /path/to/project
$ composer require “darkaonline/l5-swagger”
“`

## 書き方
### @OA\Info
プロジェクト内のどこか1か所に定義すれば良い。
複数存在するとエラーになる。

“`php
/**
* @OA\Info(
* version=”1.0.0″,
* title=”Swaggerタイトル”,
* description=”Swaggerの説明”,
* )
*/
“`

#### 設定例
“`php

元記事を表示

Uncaught Error: Call to undefined method PhpCsFixer\Config::create()

## PhpCsFixer で以下のようなエラーが出るようになった
“`
PHP Fatal error: Uncaught Error: Call to undefined method PhpCsFixer\Config::create()
“`

`php-cs-fixer` の `v3.0.0` が `2021-05-03 21:51 UTC` にリリースされました。
その際、破壊的な変更として、
> method create of class Config has been removed, use the constructor

が行われた様子。詳しくは、以下参照のこと。
https://github.com/FriendsOfPHP/PHP-CS-Fixer/blob/3.0/UPGRADE-v3.md

結果として、前述のエラーが出るようになりました。
> PHP Fatal error: Uncaught Error: Call to undefined method PhpCsFixer\Config::create()

## とりあえずの対策
`v3

元記事を表示

spotify x LINEで音楽をタイマー替わりにするLINEBOT作った

## はじめに
LINEBOTでなにかつくりたかった・・!
https://qiita.com/inoue2002/items/7e47283ba9affa0fac82
こちらの記事を見た時、音楽をタイマーがわりにできないかな、と思ったのがきっかけです。

## 作成したBOTの使い方
以下のQRコードから友達追加
![947sybkb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435661/a835cfee-1063-8fcf-cc69-0df3a6cfc0b0.png)

1.メニューから「get music!!」をタップ
2.「1分,2分,3分,,」と選択肢が出るので、返して欲しい分数の曲を指定する
3.spotifyのURLが返ってくる

![ezgif-4-4b8f39f708ba.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435661/b42602b3-40a0-0b78-a0df-ee12f71d

元記事を表示

SQLインジェクションが話題になってるけど

SQLインジェクションが話題になっている。多分あの話題はデマだとは思うが、それが何なのかの知識はあったほうが良いと思う

## SQLインジェクションとは

まず、以下のようなテーブルが存在するとする。

“`sql
CREATE TABLE `table` (
`id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
`content` VARCHAR(255) NOT NULL
) Engine=InnoDB;
“`

次に、以下のようなコードを考える。

“`php
query($sql);
// 以下、$resを使って処理を行う
“`

これを使うと何が起きるか説明すると、qパラメータに`A%’ OR ‘%’ = ‘`と指

元記事を表示

UTCタイムスタンプ(UNIX時間)をJSTに変換して表示するワンライナー

https://qiita.com/ryoto20707/items/19c5bc6646db99bd3acb

こちらの記事のphpスクリプトを参考にして、ワンライナーでUTCなUNIX時間からJSTの見やすい表示に変換するワンライナーを作りました。
頭が悪いため、UTCとJSTの変換で毎回悩んでしまうのです。

“`shell
$ echo 1620889236 | (read t; php -r “echo (new DateTime())->setTimestamp($t)->setTimezone(new DateTimeZone(‘Asia/Tokyo’))->format(‘Y/m/d H:i:s’) . PHP_EOL;”;)
2021/05/13 16:00:36
“`

キモは変換させたいUNIX時間をphpスクリプト内に書かず、スクリプトの最初のほうに書いてあるってところです。echoとreadを駆使してSHELL変数化してphpの-rオプション構文のなかに押し込めました。
phpの処理の中にUNIX時間を書かなきゃならないとするとカーソル移動が超面倒くさいと

元記事を表示

日付関連のテストを書く時は絶対にスタブ化しろ

## サンプルコード

スタブ化しないとまずいケースを紹介します。

“`ProductCode.php
cancelDate = $cancelDate;
}

/**
* @param string キャンセル日
*/
public function setCancelDate($cancelDate){
$this->cancelDate = $cancelDate;
}

/**
* 有効なユーザーか無効なユーザーかを文字列で返す
*
* @return string
*/
public

元記事を表示

laravel8 authインストール(メモ)

laravel/uiインストール

“`
composer require laravel/ui

php artisan ui vue –auth
“`

ルートに

“`
use Illuminate\Support\Facades\Auth;
“`

元記事を表示

「WP-PostViews」プラグインでタグを人気順(閲覧数順)に表示する方法

WordPressって情報が豊富にあって便利な分、情報が無いときにしんどい思いをすることもあります。
最近開発したWebメディアで、タグを人気順に並べる要望があったのですが、全く情報がなかったので自分で作ることになりました。
知識のある人からすると何てことはないと思うのですが、誰か同じことで困っている人のためになればと思い、まとめてみようと思います。

##結論
まず結論から。
WordPressで「WP-PostViews」プラグインを有効化し、以下のコードでタグを人気順に並べて表示することが可能です。
(ここでは紹介のためにHTMLと混合して書いていますが、実際はそれぞれの環境に合わせてfunction.phpにまとめてメソッド化するべきでしょう。)

“`php

‘post’,
‘post_status’ => ‘publi

元記事を表示

Apache2 + phpのサイトでEUC-JPのHTMLが文字化けする

## 初めに
大昔にPHPで作られたWebサイトのローカル開発環境を構築した際、文字コードの周りでちょっと詰まったので解決策を記しておく。

## TL;DR
Apacheのconfファイルに`php_value default_charset EUC-JP` を書く

## 発生した問題
EUC-JPで書かれているコンテンツ(PHP, HTML, CSS, JavaScript等)をApacheというWebサーバーを使って返すサイトのローカル開発環境を、ホスト上に立てた仮想マシン上のDockerコンテナ上に作成した。各システムの概要は以下の通り。

– ホスト:Windows10 Home 20H2
– 仮想マシン
– 仮想化ソフトウェア:VirtualBox 6.1.16
– Box:bento/ubuntu-20.04
– コンテナイメージ:php:7.2-apacheのベースイメージでApacheのrewriteモッドを有効化したもの

開発環境が出来上がり、いざブラウザからアクセスしてみると、ページ上の日本語がすべて文字化けしていた……

## 原因調

元記事を表示

PHP Laravel アクセス修飾子のルールを一旦整理する

# 目的

– PHPのアクセス修飾子をなんとなくで使用していたのでこの機会にちゃんと整理する

# 記事を書いた経緯(自分用)

– LaravelでDI(依存性の注入)をしている時になんとなくコントローラークラスの最初の方で`private $userService;`と記載してコントローラークラスのプロパティを定義していた。
– ちゃんと意味を理解できておらず「とりあえずこういうふうに記載するとDIできる」と覚えていた。
– `private`がどのような意味を示しているかを整理してみる。

# アクセス修飾子

### private

| ケース | アクセス可否 |
| — | — |
| 同クラス内アクセス | ○ |
| 継承先でのアクセス | ✕ |
| インスタンス化後のアクセス | ✕ |

### protected

| ケース | アクセス可否 |
| — | — |
| 同クラス内アクセス | ○ |
| 継承先でのアクセス | ○ |
| インスタンス化後のアクセス | ✕ |

### public

| ケース | アクセス可否 |

元記事を表示

[php初学者]型宣言とかnull系について

#phpの型宣言
phpは[7.0](https://www.php.net/manual/ja/migration70.new-features.php)以降型宣言ができるようになりました。
元々は自動で型変換をしてくれていました。(coercive)
しかし、それだと見落としがちなバグなどに気づかないまま開発している…なんてことも多々あるらしく、この新機能はとても嬉しいものであったりします。

“`sample.php

元記事を表示

PHP:Laravel Strageを利用した複数画像uploadする方法1つとFlysystem-aws-s3で複数画像をuploadする方法2つとその処理速度

## 前提
・AWSアカウントが存在していてS3バケットが作成済である。
https://qiita.com/Yorinton/items/bdf5f9bc05629c9a0df7
・laravel Strageが利用できる。
https://readouble.com/laravel/8.x/ja/filesystem.html
・Flysystem-aws-s3をインストール済みである (AWS SDK for PHP laravelでもよいかな?)
https://www.ritolab.com/entry/8
https://qiita.com/ucan-lab/items/61903ce10a186e78f15f

## laravel Strageを利用したupload方法

**upload方法その1**

“`PHP
foreach (Storage::disk(‘public’)->files(‘TARGET_DIR’) as $fileName){
$contents = Storage::disk(‘public’)->get($fileName);

元記事を表示

Laravelで、メソッドの返り値に対して呼び出したメソッドをモックする方法

#環境
Laravel8系
php 7.3

#伝えたいこと
タイトル何言ってんだと思われたと思います。
語彙力がなくてごめんなさい。

要は、インスタンスのメソッドをモックするのは出来るけど、インスタンスのメソッドの戻り値に対してメソッドを呼び出したとき、そのメソッドをモック出来なくて困ったけど出来たよ、という報告です。ますます伝わらないかも。

“`php:コントローラー
class SampleController extends Controller
{
public function hoge()
{
$user = app(User::class)->find(1);

$someMethod = user->someMethod(); //このsomeMethod()をモックしたい
  }
}
“`

こんな感じに、Userクラスのインスタンスにfindメソッドを呼び出し、それに対して呼び出したsomeMethodをモックしたいとき、どうするか?です。

“`php:テスト
use App\Models\

元記事を表示

VARCHAR(X)やINT(X)の「X」は何を表しているのか

# はじめに
新人研修にてLaravelを使っている時のお話です。
テーブル設計を行う時にデータ型とサイズを決めなければなりませんでした。
その時に、例えば、INTの(X)のXは何を表しているのか正確に理解していなかったので、この機会に使用頻度の高いCHAR型やVARCHAR型などの文字列を格納するデータ型も含め、調べたいと思いました。
この記事を読み終えたあなたが適切にデータ型やサイズを決めることができることをこの記事の目標にしたいと思います。
ちなみにQiita初投稿です(なんか緊張する…)。

# 検証環境
– macOS Catalina ver 10.15.7
– Docker ver 20.10.5
– docker-compose ver 1.29.0
– Laravel ver 7.30.4
– MySQL ver 8.20.3

# 内容
## 「ユニコード(Unicode)とは」
### その前に、まず「文字コード」とは何なのか
– 文字に割り当てられた数字のこと。

### MySQLでよくみる「utf8」と「utf8mb4」
– 「UTF

元記事を表示

macにComposer入れようと思ったら、つまづいた話

Laravelで開発するため、Composerインストールして、
“`usr/local/bin“`
に移動しようと思ったら、

“`No such file or directory“`
そんなフォルダないよ、と言われる

Macのリリース時期にもよるが、binフォルダは存在しないこともあるそう。

対応方法↓
https://atuweb.net/202005e_error-no-such-dir-usr-local-bin/

管理者権限とか面倒かったけど無事Laravelもインストールできました。

元記事を表示

PHP 参照による変数への代入を自分的に理解してみた

# 目的

– PHPの参照による変数への代入が自分の中で理解に苦しんだので今一度わかりやすい方法で考えてみる(誰にでもわかる方法がいまいちわからなかったのでメモ的にまとめる)

# 情報

– 下記のサービスを用いてソースコードの動作を確認した
– [https://paiza.io/ja](https://paiza.io/ja)

# 公式ドキュメントの記載

– PHPの公式ドキュメントの下記のページに参照による変数への代入の内容が記載されている。
– [https://www.php.net/manual/ja/language.variables.basics.php](https://www.php.net/manual/ja/language.variables.basics.php)
– 下記のように記載されている。
– `PHP には、変数に値の代入を行う別の方法も存在します。それは、 参照による代入 です。 この場合、新規の変数は元の変数を参照するだけです。 (言いかえると、元の変数の”エイリアスを作る”または元の変数を”指す”) 新規の変

元記事を表示

DI はなんのためにあるのか

## この記事について

DI (Dependency Injection: 依存性注入)とはなにか、という解説はよく見るんですが、なぜ DI か、という解説はあまり見ない気がするので、自分の考えを文書化しておこう、という試みです。

## DI(依存性注入)とはなにか

Wikipedia にある説明を載せるのに留めます。
> コンポーネント間の関係はインタフェースを用いて記述し、具体的なコンポーネントを指定しない。具体的にどのコンポーネントを利用するかは別のコンポーネントや外部ファイル等を利用すること
> https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5

Laravel での使用例です。Laravel においては、インタフェースを介さず、キーとなる文字列(クラス名、コンテナを用いる場合は任意の文字列)を指定してインスタンスを得る場合も含みます。

“`php
class Order implements UseCase
{
private Paymen

元記事を表示

DatePeriodの罠

`2021-05-17` から `2021-05-21` を1日ずつループしたい
そんなときに便利(?)な [DatePeriod](https://www.php.net/manual/ja/class.dateperiod.php) というクラスがあります

`DatePeriod` は `Traversable` を実装しているのでオブジェクトのまま `foreach` でループできます
(ここだけは)素敵ですね!

しかし、なにも考えずに使うとはまってしまうので注意が必要です!

## まずはコード

“`php
// 開始日
$startDateTime = new DateTime(‘2021-05-17’);
// 終了日
$endDateTime = new DateTime(‘2021-05-21’);
// 間隔(1日)
// 最初の文字は P 固定(これいる?)
// 1D は 1日
$interval = new DateInterval(‘P1D’);
$period = new DatePeriod($startDateTime, $interval, $

元記事を表示

CakePHP 4.2.6 で HelloWorld

CakePHP 4.2.6 で HelloWorld を行う方法です。

プロジェクトの作成

“`bash
composer create-project –prefer-dist cakephp/app hello01
“`

サーバーの起動

“`bash
cd hello01
bin/cake server
“`

http://localhost:8765
にアクセス
![cakephp_may1701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/179446/1b5211a8-d141-d0c0-4eb4-5f80a2e297a1.png)

プログラムの作成

“`bash
mkdir templates/Hello
“`

“`php:templates/Hello/index.php


こんにちは

こんにちは

Hello World!

元記事を表示

Laravelをレンサバ等のサブフォルダで動かす

特定のドキュメントルート `/home/foo`があるとして
`https://xxxxxx/bar`でlaravel設置したい

でも

“`
/home/foo
/bar(public)
/app
/config
“`

みたいなのを避けたい時用
ググるとapacheのconfいじったりするのは出てきますがレンサバ等では出来ないので
htaccessとプラスアルファで出来る方法の備忘録

まず設置(ディレクトリは省略)

“`
/home/foo
/bar
  /app
  /config
  /public
“`

`/home/bar`配下に以下のhtaccess設置

“`
RewriteEngine on
RewriteBase /bar/
RewriteRule ^$ public/ [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ public/$1 [

元記事を表示

OTHERカテゴリの最新記事