PHP関連のことを調べてみた2020年06月26日

PHP関連のことを調べてみた2020年06月26日

PHPでデバッグのやり方

### デバッグのやり方を簡単に記述

“`
error_log(‘hello’, 3, “./debug.log”);
“`

公式ドキュメント
https://www.php.net/manual/ja/function.error-log.php

###logを閲覧する

“`
tail -f debug.log
“`

###変数の中身を見る

“`
echo “

";
var_dump($sample);
echo "

";
```
※`echo "

";`は出力の時に、改行をして見やすくするために入れる。

###応用

```
error_log(var_export($sample), 3, "./debug.log");
```

これで指定のファイルに、変数の中身を出力して確認ができる。

以上

元記事を表示

【Laravel】UnitTest、FeatureTest、BrowserTestの違い

# はじめに
Laravelにおいて、
テストコードは3種類存在します。

・UnitTest
・FeatureTest
・BrowserTest

この3つの違いがよく分からなかったので、
自分なりにしっくりくるように簡単に整理しました。

# UnitTest
`/tests/Unit`配下にテストを配置する。
一番粒度の細かいテスト。

Service、Model、Middleware、Policyなど、
自分で作ったクラス1つ1つと対応するように
テストクラス(ファイル)を1つ1つ作る。

その対象クラスのメソッド1つ1つの動作を検証するための
テストケースをコードに書いていく。

Controllerクラスのテストは
UnitTestではなくFeatureTestとするほうがしっくりくる。

# FeatureTest
`/tests/Feature`配下にテストを配置する。
UnitTestより粒度を大きくしたテスト。

1つのHTTPリクエスト単位の動きをテストする。
=ルーティング1つごとにテストクラス(ファイル)を作る
=コントローラのアクションメソッド単位でのテスト

元記事を表示

PHP学習者に送る記事 #1 〜変数・定数・エラー〜

#はじめに

こんにちわ、takumi([@takumidiary](https://twitter.com/home))です
この記事はPHPを学習し始めて間もない方や、もう一度学び直したい方向けに書いています。僕自身も初歩的な部分を見落としている可能性があるため、アウトプットとしてこの記事を執筆しました。しかし、ある程度PHPを学習された方でも新たな発見があるかも...

**この記事の対象者**

+ PHPをこれから学習する方
+ PHPの基礎を学び直したい方

間違いがあればご指摘いただけるとありがたいです!

#環境
OS : `mac Catalina vaersion10.15.5`
ディベロッパーツール : `MAMP`
PHP : `7.3.11`

#目次
[1.PHPってどんな言語?](#1-phpってどんな言語)
 [1-1.静的と動的](#1-1-静的と動的)
 [1-2.PHPプログラムが動く仕組み](#1-2-phpプログラムが動く仕組み)
[2.PHPの基本的構文](#2-phpの基本的構文)
 [2-1.PHPブロック](#2-1-phpブロック)

元記事を表示

PHPStormからDockerのPHPコンテナでPHPUnitを実行する方法

# はじめに
ローカル環境でDockerを利用しているときに、
PHPStormの画面上からPHPUnitを実行できるようにするための
設定方法を紹介します。

大きく2つの設定が必要になります。

* PHP interpreterを設定
* PHPUnitのinterpreterを設定

# PHP interpreterを設定

・「Settings」->「Languages & Frameworks」->「PHP」->「CLI Intepreter」->「...」をクリック
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297693/f9ea8827-0145-529f-8d99-878c14d52e67.png)

・左上の「+」->「From Docker, Vagrant, VM, WSL, Remote...]をクリック
![2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297693/8dd8

元記事を表示

PHP 値渡し

## 値渡し

値をコピーして渡しているため、元の変数に影響を与えない。

## 関数

```php:関数値渡し
$value) {
//...code
}
```
### 値渡し

```php:foreach値渡し
[
'a' => 'あ',

元記事を表示

【PHP】DateTimeクラスで 2020/06/31 が通っちゃった!?

# 環境

OS:CentOS 7.7
PHP: 7.1.26

#現象

[DateTimeクラス](https://www.php.net/manual/ja/class.datetime.php) のコンストラクタで、日にちが31までなら、
存在しない年月日でも、正常に受け付けるようです(ただし翌月に繰り上がる。)

PHP歴は長いのに知らなかった。じつは常識なのか?

```php
$date = new DateTime( '2020-02-28' ); // OK
$date = new DateTime( '2020-02-29' ); // OK
$date = new DateTime( '2020-02-30' ); // OK
$date = new DateTime( '2020-02-31' ); // OK
$date = new DateTime( '2020-02-32' ); // Error!

$date = new DateTime( '2020-06-30' ); // OK
$date = new DateTime( '2020-06-31'

元記事を表示

【Laravel】Herokuでメール送れるようにする

# 問題
Laravelってユーザー認証とか用意してくれてありがたいよね
laravel new で作ったアプリにAuth入れてユーザー登録はうまくいった
ただ、パスワードリセット用のメールを送ろうとしたら、エラー500が出て何時間も詰まった
環境変数とか設定してないから、そりゃエラーは出るだろうけど、それだけじゃなかったので備忘録として記しておこう

# 前提
Laravel6です
なので、laravel/uiをインストールするところから始めます
初心者にとってはおまじないですが、以下を実行

```zsh:
// laravel/uiをインストール
% composer require laravel/ui

// Auth関連ファイル(基本的なスキャフォールド)を生成
% php artisan ui vue --auth

// フロントエンドに必要なパッケージをインストール&必要なファイルをコンパイル・ビルド
% npm install && npm run dev
```

このようにしてAuth機能を使えるようになっていることが前提です

# 解決法
解決法というかメール

元記事を表示

【php】Web API関連メモ

#【php】Web API関連メモ

自分用のメモです。

##namespace
namespace 名前空間名;

- 名前空間を定義する。
- 同一名のクラスや関数などが定義できるようになる。(衝突によるエラーや上書きを防ぐ)
- 一番上に書く。(HTMLやファイル読み込みよりも上)

▼使い方
名前空間\呼び出したいもの

- 名前空間\関数名()
- 名前空間\変数

```php:(method.php)同一ファイルに同じ関数を書

```

```php:(exec.php)関数の呼び出し

//出力
こんにちはHello
```

元記事を表示

【Laravel】migrationで複数テーブルの共通カラム定義を1か所に共通化する方法

# はじめに
複数のテーブルに同じカラムを持たせるとき、
migrationでテーブル1つ1つに同じカラム定義を記述するのは面倒です。

例えば、よく使われるのは
created_at、created_by、updated_at、updated_by、deleted_at、deleted_byなどです。

普通にやると各テーブルごとに上記カラム定義を記述することになりますね。

```php
public function up()
{
Schema::create('foo_table', function (Blueprint $table) {
$table->id();

$table->timestamp('created_at')->nullable();
$table->unsignedBigInteger('created_by')->nullable();
$table->timestamp('updated_at')->nullable()

元記事を表示

【総集編】6月ふりかえり

# はじめに

今月のふりかえりです。
月1で振り返り
今後は何を勉強するかを決めます。

--------------------------------
# 6月 1週目

2020/06/03 [【プログラミング】吾輩は関数である名前はまだない](https://qiita.com/ymd65536/items/ab17bc0b1d47d37c1b9e)

2020/06/07 [【SQL】最初に覚えるSQLの話](https://qiita.com/ymd65536/items/c9537e5525143c31a551)

--------------------------------
# 6月 2週目

2020/06/08 [【データベース】正規化について知る](https://qiita.com/ymd65536/items/d69f106eca0fe25bf047)

2020/06/10 [【ExcelVBA】オブジェクト指向プログラミングをしよう](https://qiita.com/ymd65536/items/c88881f630ed1125fa6

元記事を表示

Fetch APIでPHPにデータを送信する方法

画面遷移をせず、ajaxでデータをPHPに渡す方法です。

下記は「ボタンをクリックした時にPHPにデータを渡す」処理についてのサンプルです。

## Javascript

`id="start"`のボタンがあるとします。

```HTML:index.html

```
vanilla Javascriptでは、下記のように記述します。

```javascript:main.js
start.addEventListener('click', () => {
const postData = new FormData; // フォーム方式で送る場合
postData.set('firstName', 'hoge'); // set()で格納する
postData.set('lastName', 'fuga');

const data = {

元記事を表示

【PHP】 空白文字で文字列を分割して検索用キーワードの配列を作る

# これは何?

データベースの LIKE 検索用途とかでキーワードを抽出するやつ。
例えば

`PHP Qiita Laravel`

と入力したら,

`PHP` `Qiita` `Laravel`

として取り出す関数を作ります。

# 実装

実装したい関数の形を示し, 2 つの異なるアプローチでの実装例を記載します。

## 関数シグネチャ

`$input` に入力文字列を渡し, `$limit` にキーワード数制限を指定します。 `-1` を指定した場合は無制限になり,これをデフォルトとします。

```php
function extractKeywords(string $input, int $limit = -1): array
```

## 手法の比較

※ 「手法」の名称は一般的に提唱されているものではありません

| 手法 | 説明 | よく使われる関数 |
|:----|:----|:---|
| 空白分割法 | 空白文字で分割し,残った部分をキーワードとする。**キーワード数制限を超過する場合,最後の1つの中に空白文字を含む残りのすべてが含まれる。**

元記事を表示

【Laravel】日本語で指定されたFakerから英語のFakerを使う

#はじめに
モデルファクトリをつかってテスト用のデータを生成する際、氏名は日本語でFakerを使いたい、でもIDとかは英語で使いたい・・・ってなった時に、コンフィグで日本語設定をしつつ、使いたいときだけ英語のFakerを使う方法です。

###標準言語設定
```php:app.php
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| locali

元記事を表示

MAMPを使用して、Zend Framework 1系の環境構築をする

# Zend Framework 1系の環境構築

## 前提
- MAMPがインストールされていること
- インストールが済んでない方は[こちら](https://www.mamp.info/en/mac/)から
- Zend Frameworkのバージョンは1.12.3とする

## 手順
### Zend Frameworkをダウンロードする
```shell
$ wget https://packages.zendframework.com/releases/ZendFramework-1.12.3/ZendFramework-1.12.3.tar.gz
```

※ 下記のようなエラーが出た場合はwgetコマンドをインストールする → [こちら](https://webkaru.net/dev/mac-wget-command-install/)を参考にする
> command not found: wget

### ダウンロードしたディレクトリを展開する
```shell
tar zxvf ZendFramework-1.12.3.tar.gz
```

tarコ

元記事を表示

LaravelでのファイルアップロードAPIとUnitTest

- Windows 10
- PHP 7.4.5
- Laravel Framework 7.9.2

## アップロードAPI

```php:app/Http/Controllers/ImagesController.php
file('file')->store('images');
return response()->json([

元記事を表示

PHPMVCのC⇆Vについて(見直し用メモ)

###前提知識
namespace…このファイルここに配置されてますよ〜って書いてるやつ
use…他フォルダにあるクラスを利用可能にしたもの

##ルーティング
・アドレスに対してコントローラーメソッドを指示する。
・$requestのプロパティの情報を飛ばす

```ルート情報記述.php
Route::get(アドレス,関数など);
```

```viewとは.php
view(テンプレート名)
//指定したテンプレートのファイルをロードし、レンタリング(表示できるように整える)して返す
```
特定のアドレスにアクセスした際、何の処理を実行するのかを記述したもの。

```web.php

元記事を表示

Laravelでレートリミット制限をかけて制限時の429エラーレスポンスをjsonで返す

## Dos攻撃対策のレート制限を実装

apiの外部公開をするにあたり、Dos攻撃対策としてレートリミット機能を実装しました。

venderにあるライブラリ標準機能では、アクセス制限がかかった際は429エラーページの表示がされるようになっています。

それを次のように変更しました。

・jsonでエラーメッセージを返すようにする
・レートリミット制限の設定を環境変数から制御する

今回行った実装内容を簡単にご紹介します。

## 参考リンク

公式のレートリミットの解説
https://readouble.com/laravel/6.x/ja/routing.html

ルーティングの設定についての解説(今回は触りませんでした)
https://laravel.com/docs/7.x/routing#rate-limiting

分かりやすく解説されているブログの記事一覧

https://access-jp.co.jp/blogs/developme

元記事を表示

Docker運用のためのLaravelログ出力

# 概要
Docker運用におけるログ出力は標準出力/標準エラー出力となるが、単純にLaravel側でログを標準出力に設定しても出力されず、該当する記事も見当たらなかったため、実装した内容を記録する。
# Laravelチャンネルドライバ設定
これは[公式](https://readouble.com/laravel/6.x/ja/logging.html)などにも出ているので問題にならないが、具体的には以下の二通りがある。

* 直接標準出力を指定するパターン
チャンネルドライバに`stderr`を指定する。

```.env:/.env
LOG_CHANNEL=stderr
```
* デフォルトのドライバを指定するパターン
他のドライバを内部で複数ラッピングできるので運用上こちらの方が便利。
* チャンネルドライバに`stack`を指定する。
* `stack`のドライバ指定に`stderr`を追加する。

```env:/.env
LOG_CHANNEL=stack
```

```php:/config/logging.php
...
'chann

元記事を表示

Windows10のタスクスケジューラでphpを実行する

#タスクスケジューラとは
Linuxでいうところのcrontabのようにバッチを設定するソフトです。

#タスクスケジューラ起動
スタートボタン -> Windows管理ツール -> タスクスケジューラー

#タスク生成
タスクスケジューラライブラリの上で右クリック -> 基本タスクの作成

名前・説明: 後から見てもわかるように適当につける
トリガー: 今回はテストで行うので1回限りにチェック
開始時刻: 近い時刻
操作: プログラムの開始

**<操作 プログラムの開始>**
プログラム/スクリプト: php(xamppを利用していた私の場合は C:\xampp\php\php.exe)
引数の追加: -f 登録したいPHPファイル (-f test.php)
開始(オプション): 登録したいPHPファイルの位置 (C:\xampp\htdocs\)
[php コマンドラインオプション](https://www.php.net/manual/ja/features.commandline.options.php)

#タスク起動
設定した時間が来るのを待つ or タスク選択して右

元記事を表示

PHP,Laravel導入

# php インストール
```:ターミナル
brew install php@7.1
```
## pathを通す
```:ターミナル
echo 'export PATH="/usr/local/opt/php@7.1/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.1/sbin:$PATH"' >> ~/.zshrc
```
更新

```:ターミナル
source .zshrc
```
# php バージョン切り替え
```:ターミナル
7.1から7.3に切り替えたい場合。
brew unlink php@7.1
brew link php@7.3
```
# パスの変更
`vi .zshrc`

```
export PATH="/usr/local/opt/php@7.3/bin:$PATH"
export PATH="/usr/local/opt/php@7.3/sbin:$PATH"
```
```
source .zshrc
```

# laravel
## composerインス

元記事を表示

OTHERカテゴリの最新記事