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

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

Docker X Laravel GitHub Actions でCIを回してDockerとLaravelの自動テストを実行する

DockerfileやLaravelプロジェクトのコードを変更された時に毎度手動でテストするのはとても時間がかかってしまいます。
Dockerビルド以外にも、Composerのインストールがうまくいくか、マイグレーションやロールバック処理やシーダーが壊れてないか。
Laravelのテストコードがうまく実行されるか。確認したいことがたくさんあります。

## 環境

– https://github.com/ucan-lab/docker-laravel
– 参考リポジトリ: https://github.com/ucan-lab/docker-laravel-github-actions

## パターン1: まとめてテストする

https://github.com/ucan-lab/docker-laravel-github-actions/pull/2

“`yml:.github/workflows/integration-laravel-testing.yml
name: Laravel Testing

on:
pull_request:

jobs:
lar

元記事を表示

phpで円をドルに換算

【円をドル】=【換算したい円】÷【1ドル当たりの円価格】

“`PHP

‘;

“`

出力結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/e1e44587-8491-0eaf-8925-c0e889d2dd29.png)

元記事を表示

php】phpでコイントス問題を解け

1・変数 $count で指定した回数だけコイントスを行い、「コイン投げの回数: [$countの値] 回」を出力
2・表が出たら「H」(表を表す Head の略です。)、裏が出たら「T」(裏を表す Tail の略です。)を出力する
3・Hの文字は赤色、Tの文字は青色で出力する
4・コイントス終了後に表が出た回数を裏が出た回数を出力する
5・乱数を取得する関数mt_randを利用する。
6.表が出たらH、裏が出たらTを配列に追加し、またそれぞれのカウントを追加。
7・出力時には「[H or T]」の形式で出力せよ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/52929a4a-a07a-acdf-be43-bd03e9c93eb3.png)

“`PHP




コイントス

元記事を表示

【php】phpでfizzbuzzを解け

“`php

fizzbuzz

‘;
}elseif($i % 3 === 0){
echo “Fizz”. ‘
‘;
}elseif($i % 5 === 0){
echo “Buzz”. ‘
‘;
}
}

?>
“`

上級者用

“`php



元記事を表示

【php】phpで九九表の作成をせよ

“`php





九九表


九九表



PHPUnitのデータプロバイダを使ってみる

# はじめに
PHPUnitでデータプロバイダについて学んだことをまとめます。
PHPのバージョンは7.3.11、
PHPUnitのバージョンは9.5.4です。

# データプロバイダを使わないテスト
まず、下記のFizzBuzzクラスのhandleFizzBuzz()についてのテストについて考えます。
一応処理内容は、引数の数字が
3で割り切れるなら Fizz を
5で割り切れるなら Buzz を
3で割り切れるかつ5で割り切れるなら FizzBuzz を
それ以外の数字の場合は、その数値を返します。

“`PHP:FizzBuzz.php
class FizzBuzz
{
public function handle(): void
{
for ($i = 0; $i < 100; $i++) { $this->handleFizzBuzz($i);
}
}

public function handleFizzBuzz(int $number): string
{
i

Laravelでフォーム送信時に419 Page Expired と表示されたときの対処法

最近laravelの勉強をしていて遭遇したエラーを自分が見返せるようにという意味も込めて載せます.
上級者からしたしょうもないミスかもしれませんが…

laravelの勉強中node.jsの便利な機能を使って,登録者ログイン機能を実装しようとしていました.
無事に画面にloginとregisterのボタンを表示することができたのですが,registerボタンを押して名前やパスワードを入力し,登録ボタンを押したところ,
![fullsizeoutput_604.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/756995/68597330-1336-8268-6212-f2ba61f44e90.jpeg)
このような画面が表示されてしまいました.

phpmyadminのusersテーブルを見ても登録した内容はまだ反映されていません.
ググったところあるページの情報で解決することができました(リンクは最後に載せておきます).
まずターミナルでLaravelプロジェクトフォルダに移動した後,
$ php

laravel8に画像をアップロードするやり方③画像表示編

#前回の実装内容
![名称未設定 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/a1a4d8a7-257f-e00d-972b-82c012001405.png)
ページから画像をアップロードし、DBに保存する仕組みを実装しました。
[前回の記事](https://qiita.com/youichi_uematsu/items/a6c747ad8826da0f78a2)
#スタート画面
![3B94F0AE-FAB9-4E0B-9189-71D38FD4C084_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/e6f84221-9cd1-f8d2-ca3b-22d23ecbd8ac.jpeg)
#ゴール画面
![スクリーンショット 2021-05-23 14.39.27.png](https://qiita-image-store.s3.ap-northeast-

Carbon 1と2での動作変更点

# 概要

以下のドキュメントにCarbon 2への移行について記載がありますが、それぞれについてtinkerを利用して実際に動作を確認していきます。

https://carbon.nesbot.com/docs/#api-carbon-2

## 検証に利用したバージョン

* Carbon 1: 1.39.1
* Carbon 2: 2.48.0

# 動作確認

## デフォルトの日付

> Default values (when parameters are omitted) for $month and $day in the ::create() method are now 1 (were values from current date in Carbon 1). And default values for $hour, $minute and $second are now 0, this goes for omitted values, but you still can pass explicitly null to get the current valu

StripeでCoupon/Promocodeをつかった割引を実現する(Laravel/Cashier)

[運営しているサービス](https://www.docswell.com/)に、割引を実装したのですが、海外のフォーラムでもあまり実装方法が載っていなかったのでシェアします。正しいかどうかはわからないので各自検証してください。

# 環境

– Laravel 6系(lts)
– Cashier 12系
– Stripe sdk(Cashierから依存 7.70)

# Stripeで割引をするとはどういうことか

Stripeでユーザーに対し割引などプロモーションを実施する方法は主に2つ、FreeTrialとCouponです。FreeTrialは契約開始からN日間無料にするというもので、Couponは〇円引き、〇%引きが実現できるというものです。こちらのQiita記事でも解説されています。

[決済代行サービスのStripeでサブスクプランにクーポンを適用する方法【typescript, react, stripe, cloud functions】](https://qiita.com/rpyn/items/2b2bfdb1cbdf378d44ec)

こちらの記事では、C

MAMPを起動した時のエラーの対処(port 8888 is in use by some other software)

# はじめに
MAMPを起動する際、

Apache couldn’t be started because port 8888 is in use by some other software.

と表示され起動できなくなってしまったので、その対処法をメモとして残します。

# 条件
PHP version: 7.4.12
macOS Big Sur version: 11.2.3

# もくじ
1. エラー内容
2. 対処 ~ 解決
3. それぞれのコマンドについて
4. おわり

#1. エラー内容

冒頭でも記述しましたが、エラー内容は以下の文となります。

`Apache couldn’t be started because port 8888 is in use by some other software.`

日本語にすると、
`”ポート8888が他のソフトウェアで使用されているため、Apacheを起動できませんでした。”`

…ということです。

本番・開発環境でWordpressのDBスキーマを揃える。Phinxでマイグレーションとシード実行

![phinx.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119201/54d79a77-e8a1-483c-aff6-d2d9bcbee4cf.png)

数名で始めた小さな読み物アプリケーションをWordpressで管理をすることになりました。極力Wordpressをコード化してスケールする開発を行いたいと考えている方に参考になればと思い書きました。

## この記事の対象となる読者
– WordPressをDockerで運用し、複数人・複数の環境で開発しようとしている開発者
– WordPressのDBスキーマ管理(マイグレーションツール)の技術選定中の方

## あらまし
本番、開発環境という2つの環境で運用をしたいとなった場合、Wordpressはプラグインの扱いが環境ごとに差分が出やすく悩ましい限りです。

なにしろWordpressはプラグインをインストールするとプラグインのファイルだけでなく、テーブルや設定レコードが増えるのですから。

可能な限りGitでプラグインのコ

Laravelのvalidationの表現を広げる【配列、階層】

#普通に個別に配列対応
validation関連でいろいろな表現があることがわかったので、整理していきます。

““php:通常の配列の場合


““

配列の場合、どう書いていくのかというと、`.`で区切ります

““:こんな具合に区切ります
‘array.name’
‘array.title’
““
実際にvalidationのruleを作ると、下記になります。

““php:validaton
public function rules()
{
return [
‘array.name’ => ‘required|string’,
‘array.title’ => ‘required|string’,
];
}
““

#すべてに対して対応する場合

““php:validaton
public function rules()
{

ラジオボタンを三項演算子でcheckedを維持する。LaravelのBlade対応。validationでのリダイレクトでも維持

#結論はこれ
““php:

“`
結論上の通りです。
`{{ }}`の中に三項演算子の内容を記述する。

““
{{ 条件 ? true : false }}
““

`old()`でリダイレクト前の回答を取得しています。

““
{{ old(‘nameの名前’) ? “checked” : “何もしない” }}
““

現在時刻を(〇〇年〇〇月〇〇日〇〇秒)形式で表示する

##はじめに
どうも、はじめまして「ばたにー」です。初めてのQiitaでの投稿になります。
自身の勉強時のアウトプットとして今後は活用していく予定です。

今回はその第一回目として超簡単な内容になります。ご容赦ください。

###実際のコード

まず現在日時を表示

“`
//UNIXタイムスタンプの形式になります
//UNIXタイムスタンプとは 1970年1月1日午前0時0分0秒(UTC)からの経過秒数

echo time();
//1621693637
“`

次にdate関数を使い現在日時を年月日と時刻でわかる形に表示

“`

//date関数の第二引数はデフォルトで現在時刻が入ります
echo date(“Y-M-D H:i:s”);
//2021-May-Sat 23:27:17

“`

これでも分かるとは思いますが、見慣れた表示にするには

“`
echo date(“Y年m月d日 H時m分s秒”);
//2021年05月22日 23時05分17秒
“`

こんな感じで表示を変えることができます。
ちなみに年

【cron】Macでcronを設定してみた

## はじめに
`cron` を触る機会があったので流れを理解するために、簡単なサンプルコードを作成して `cron` の設定をしてみました。

## 目次

– [はじめに](#はじめに)

– [目次](#目次)

– [実装フロー](#実装フロー)

– [サンプルコード](#サンプルコード)
– [sample.php](#samplephp)

– [cronの設定](#cronの設定)
– cronの登録
– cronの内容
– 登録しているcronの確認
– logファイルを確認
– cronの削除

– [おまけ](#おまけ)
– cronの `*` の意味
– logファイル出力ができず `permission denied`
– Datetimeでエラーが起きる?

– [おわりに](#おわりに)

– [参考文献](#参考文献)
– cron
– シェルスクリプト
– PHP

## 実装フロー

– 定期的に動作させたいファイルを作成( やりたいことはなにか )

LaravelのVSCodeを使った開発で、保存時にコードを自動整形する

チームで開発する場合はもちろん、個人で開発する場合にもインテンドがしっかり入っていない場合や、「{」の位置が統一されていないと書き方の良し悪しにかかわらず見づらいコードになってしまいます。コードの自動整形機能は開発の早い段階で導入しましょう。

##開発環境
言語:PHP
エディタ:VisualStudioCode(以下VSCodeと呼ぶ)

##formatterの拡張機能を入れる

phpのformatterには`PHP Intelephense`がおすすめです

拡張機能から`PHP Intelephense`を選択、[**Install**]
![スクリーンショット 2021-05-22 17.36.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1066052/15b57583-0671-7304-2e33-e75f624590e6.png)

この状態だと、フォーマットを行うにはファイルを開き
`Shift` + `Command` + `F`を入力する必要があります。

ファイル保存時

【Laravel】view [***.blade.php]ファイルを修正したが反映されない問題の解決方法

##キャッシュをクリアする

###以下のコマンドを実行

“`
php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear
“`

###エラーになった場合

1.artisanファイルがない場所で実行している場合
・エラーメッセージ

“`
Could not open input file: artisan
“`
・解決法
 artisanファイルがあるディレクトリ(プロジェクトを作成した場所)へ移動して実行する

2.データディレクトリがない場合
・エラーメッセージ

“`
Failed to clear cache. Make sure you have the appropriate permissions.
“`
・解決法
 データディレクトリを確認する
 以下ディレクトリがあるか確認
 storage/framework/cache/data

 なければ作成する

“`
mkdir storage/framework/cac

%dって何?色々調べてみた

昨日、[2ケタ✕2ケタの計算問題を作るプログラム](https://qiita.com/whiterusk/items/b99cc04a594e219a8781)をつくったら、コードについて早速突っ込まれました。

“`php
(%02d) %d ✕ %d =

“, $i, $a, $b);
}
echo implode(‘, ‘, $ans). ‘
‘;
?>
“`
コードを作成してくださった方:[iiOOii さん](https://qiita.com/iiOOii)
また、変数a, b の記述については[shiracamus さん](https://qiita.com/shiracamus)に教えていただきました。
ありがとうございます。

僕のコードではforeachやifを使っていましたが、使わなくても記述ができるらしく。
教えてくださったコ

【php】2次元配列・各人のフルネームと住所と年齢を表形式で出力せよ。詳細は以下に示す

“`PHP

$members = [
[
‘id’ => 11,
‘family_name’ => ‘山田’,
‘first_name’ => ‘太郎’,
‘age’ => 35,
‘gender’ => ‘男性’,
‘address’ => ‘東京都港区’,
],
[
‘id’ => 12,
‘family_name’ => ‘佐藤’,
‘first_name’ => ‘花子’,
‘age’ => 28,
‘gender’ => ‘女性’,
‘address’ => ‘東京都中央区’,
],
[
‘id’ => 13,
‘family_name’ => ‘斎藤’,
‘first_name’ => ‘次郎’,
‘age’ => 41,
‘gender’ => ‘男性’,
‘address’ => ‘東京都豊島区’,
],
[
‘id’ => 14,
‘family_name’ => ‘山本’,