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

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

Laravel MySQL timestamp型 2038年問題に対応する

## 概要

MySQLのtimestamp型は2038年問題が発生します。
[MySQLのtimestamp型に起きる2038年問題](https://qiita.com/juve_534/items/a9f9f72d49f8817951e8)

timestamp型の寿命が先に来るか、アプリの寿命が先に来るか定かではないですが後から直すことを考えると予め対策しておいた方がベターなのかなと思います。

## 環境

– PHP 7.4.5
– Laravel 7.9.2
– MySQL 8.0.19

## デフォルトの users テーブル

“`php:database/migrations/2014_10_12_000000_create_users_table.php
Schema::create(‘users’, function (Blueprint $table) {
$table->id();
$table->string(‘name’);
$table->string(‘ema

元記事を表示

PHP7.4でもマルチスレッド!!

以前「[PHP7.4からのマルチスレッド](https://qiita.com/WhiteGrouse/items/6fb906386b8fbabd6405)」という記事を書きましたが、内容が薄すぎたのでもう少し紹介していきたいと思います。コードは全く載せていないのでサンプルはParallelのテストコードを見てください。

なお、PHPにおけるマルチスレッドはCLI限定となります。マルチプロセスを実現するpcntlではwebサーバで使用することを非推奨としていますが、pthreadsやparallelではコンパイルから拒否されます。

# 拡張モジュール
krakjoe氏が開発しているParallelを使用します。
https://github.com/krakjoe/parallel

# マルチスレッドモデル
ParallelはGo言語のgoroutineに大きく影響を受けています。
https://www.php.net/manual/ja/philosophy.parallel.php

# parallel\Runtime
RuntimeはpthreadsのWorkerにか

元記事を表示

Laravelでファイルダウンロード機能を実装する

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpに下記を追記
`use Illuminate\Http\Response;`

(2) /sample/app/Http/Controllers/SampleController.phpにdownload1メソッド、download2メソッド、sendHeaderメソッド、sendContentBodyメソッド、sendContentEndメソッドを追記

“`

public function download1()
{
retur

元記事を表示

Could not open input file: artisanの解決方法

#はじめに
マイグレーションしようと思って以下のコマンドを打ったら
エラーは出たので解決方法を載せておきます

““
[vagrant@localhost]$php artisan migrate
Could not open input file: artisan
““

#解決方法
arisanファイルのあるディレクトリにいないことが原因です
artisanファイルがどこのディレクトリにあるか確認しましょう
単純ですが以外にハマりますwww

元記事を表示

Laravel ディレクティブでswitch文を記載する

# 目的

– 若干詰まったためディレクティブでのswitch文の記載方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 on x86_64 | Homwbrewを用いて導入 |

元記事を表示

PHP 剰余算を使い、行ごとの背景色を変更する

“`php:sample.php

‘);
}else{
print(‘

‘);
}
print(‘

‘);
print(‘

‘);
}
?>

‘.$i.’行目

“`

“`php:出力
1行目
2行目
3行目
4行目
5行目
6行目
7行目
8行目
9行目
10行目

-奇数行目の背景の色が変更になる
“`

“`php:メモ
if($i%2)は,余りが出るところがtrueとなり,変更される

“`

元記事を表示

PHPのクラス・メソッド

1.クラスとは?

そんなもんわかっとるわ!と思うかもしれませんが、
いざ説明しようとするといい回答が出てきません。
オブジェクトの塊です(雑)。
実際、一言では説明ができないので、実際に書いていきましょう。

2.public

下記では、基本的なクラスの定義を書いています。

“`classTest.php

“`

“`test_sample.php

元記事を表示

PHP usleepより高い精度でスリープしたい

###TEST1###

まず、普通に`usleep`で1秒スリープしてみます。

`usleep(1e6)`で1秒スリープ。
(1e6は1000000、つまり100万マイクロ秒=1秒です)
開始、終了はできるだけ正確に計りたいのでここだけ`hrtime`(PHP7.3以降で使用可)を使いました。

~~~php:test1.php
1.007640
0.999958
1.000146
1.000745
0.999949
1.000058
1.000078
0.999953
1

元記事を表示

[Laravel] 機能テストで Guzzle インスタンスの通信をモックする

[Guzzle]: https://github.com/guzzle/guzzle
[Mockery]: https://github.com/mockery/mockery

# はじめに

みなさん,テストにおいて [Guzzle] の通信が絡む部分ってどうしていますか?
ユニットテストと機能テストで手法が異なるので,自分が採用している方法をそれぞれ紹介します。

# 例

通信を Guzzle に委ね, JSON をパースしてオブジェクトを生成する処理は `JsonParser` というクラスに委ねているクライアントのテストを考えます。

“`php:app/Services/Twitter/Client.php

元記事を表示

routes/web.phpが何をしているのかを読み解く

# まえがき
## 前提
https://qiita.com/carrotRakko/items/3e6d19a7bd9427ab6479
上記の記事を読んであることを前提に話を進めます

また、筆者はプログラミング初心者であり、前回、前々回ではsingletonやfacade,kernel等が出てきて概念というよりは用語自体に**???**となったレベルです
##背景
上記の記事にもありますがLarevel輪読会のレジュメです
前回`Illuminate\Container\Container`の`resolve()`メソッドが呼び出されている所までたどり着きました。
#今回の目標
今回はその後を追っていき、実際に`web.php`で

“`php:web.php
use Illuminate\Support\Facades\Route;

/*
|————————————————————————–
| Web Routes
|—————————–

元記事を表示

PHPで初めてのWebアプリケーション開発 企画から設計まで 備忘録2 

#前提
PHPを使ったWebアプリケーションの開発知識が必要になったので、開発過程の備忘録、知識のインプット・アウトプットを目的としている。

#アプリケーションの概要
スケジュール・出欠管理アプリ

#備忘録2 目次
1. 主な機能の洗い出し
2. ワイヤーフレームの作成
3. サイトマップの作成

##1 主な機能の洗い出し
– ユーザ登録・ログイン
– プロフィール編集
– 掲示板
– スケジュール追加・編集
– スケジュールに対する出欠登録
– スケジュールに対する出席表
– ユーザ一覧表示

##2 ワイヤーフレームの作成
今回はppで大まかに作成
![スライド1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/1f7fc580-8357-7c11-4e9c-3c251ae0fba1.png)
![スライド2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593561/c8173ea6-2570

元記事を表示

Laravel 標準搭載のデバッグ機能 tinker コマンドのご紹介

## Laravel tinker(REPL)

Laravelフレームワークに標準搭載されている対話シェルです。
また、[psysh](https://psysh.org) のラッパーライブラリです。

## REPL(リプル)

Read Eval Print Loop の略で対話型実行環境のことです。
キーボードから打ち込まれた命令を読み込み(Read)、評価・実行し(Eval)、結果を画面に表示し(Print)、また命令待ちの状態に戻る(Loop)処理系。

手軽にコードを実行できますが、誤字があればもちろんエラーになるので短いコードを実行して結果を確認する使い方をされます。

## PHP の対話シェル

`php` コマンドの `-a` オプションを付けるとPHP標準の対話シェルが使用できます。

Laravelのコードはオートローダーを読み込んでいないので実行できません。
PHPの標準関数等を試す場合は良いでしょう。(tinkerがあるのであればtinkerで良いです)

“`shell-session
$ php -a
“`

– https://www.php.n

元記事を表示

CakePHPで論理削除

#論理削除のメリットデメリット

* ユーザーからその存在を隠蔽したいが、データとしては残しておきたい (例えば、業務事情により当該データを使用禁止にしたいが、一時的なのですぐに元に戻せるようにしたい場合)
* 誤って削除した場合に備え、すぐにデータを復元できるようにしておきたい

[参考](https://qiita.com/wanko5296/items/f1af9c7bf020e867c2dd)

#記事の論理削除
CakeDCを用いて論理削除を実装した。
**論理削除**
DBでdeletedカラムをデフォルトで0に設定して、
delete関数が走った時に、deletedカラムに1が立つように実装すれば良い。

SELECT文では検索した場合はdeleted=0が勝手に条件で入り、論理削除されたデータは表示されなくなる。

* CakeDCは以下を参考にした。
[このページのセクション1、2を参考にした](http://www.tailtension.com/cakephp/398/)
* CakeDCを使った論理削除関数の実装は、以下サイトを参考にした。
[delete

元記事を表示

ホットペッパーAPIを使ったLINEbotお店検索

## やりたいこと
LINEを使って位置情報からホットペッパーに載っているお店の情報を返すというBOTの作成

## 位置情報を取得してその戻りを確認する
まずホットペッパーAPIを利用するにあたってAPIキーを発行する。
https://webservice.recruit.co.jp/register/

`http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&lat=[緯度]&lng=[経度]&range=5`
参考:[ホットペッパーグルメ APIリファレンス](https://webservice.recruit.co.jp/hotpepper/reference.html)

## 位置情報を元にjsoncodeを取得する
curlを使用し、上記のグルメサーチAPIの戻りを取得する。

“`
  $ch = curl_init();//curlセッション初期化
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT

元記事を表示

Amazon Chime SDKをPHPとJavaScriptでサクッと動かす

Amazon Chime SDKを最短で動かしてみる。
1対1でのビデオ通話ができるまで。

# 準備

AWSアカウントで、`AmazonChimeFullAccess`, `AmazonChimeSDK`の権限を付与したcredentialsを作成。

[AWS SDK for PHP](https://aws.amazon.com/jp/sdk-for-php/) をインストール

# ソースコード

## ミーティング参加

“`
‘latest’,
‘region’ => ‘ap-northeast-1’,
];
$client = new ChimeClient($options);

// ミーティングルームを検索
$result = $client->listMeetings([]);
if (count($result[‘Meeting

元記事を表示

Zoom SDKをPHPとJavaScriptでサクッと動かす

Zoomのビデオ通話を最短で動かしてみる。

# 準備

ZoomのApp MarketplaceでCreated Apps => JWTを選択し、API KeyとAPI Secretを取得する。

# ソースコード

`$apiKey`, `$apiSecret`, `$meetingNumber`などを変更し、以下のソースコードを PHPの動作する環境に設置してアクセスする。

## Signature作成

“`

元記事を表示

フォームで入力した数値の倍数でFizzBuzzと表示する(PH P)

fizzNumとbuzznumにそれぞれ数値を入力して、実行ボタンを押すと入力した2つの倍数が小さい順で表示される。
fizzの倍数は数値の横にfizzと表示され、buzzの倍数は数値の横にbuzzと表示される。
両方の倍数の場合は、fizzbuzzと表示されるようにする。

(エラー)
・文字列が入力されたとき
・少数が入力されたとき
・空欄だったとき

HTMLでフォームの作成
“`

fizzNum

buzzNum


“`

PHPで処理を作成
“`

元記事を表示

【Laravel】Route.phpのwhereメソッド・メモ

##環境
Laravel Framework 7.9.2

#ドキュメント
https://readouble.com/laravel/7.x/ja/routing.htmlでcommand+Fしてwhereで検索。
「正規表現制約」ってとこ。

#使い方

>ルートインスタンスのwhereメソッドを使用し、ルートパラメータのフォーマットを制約できます。whereメソッドはパラメータ名と、そのパラメータがどのように制約を受けるのかを定義する正規表現を引数に取ります。

“`web.php
//ドキュメントのサンプルコード
Route::get(‘user/{name}’, function ($name) {
//
})->where(‘name’, ‘[A-Za-z]+’);
“`
パラメーターであるnameに対して正規表現をかけれる。
正規表現で弾かれた場合、他に当てはまるrouteがなければ当然404を返す。

また、whereメソッドの第一引数に配列として定義することもできる。以下は上と同義。

“`web.php
Route::get(‘user/{name}’

元記事を表示

PDOで取得したデータが、数値型データなのに文字列データに変わってしまう原因

最近Haskellの勉強をしていて、型って大事だな〜っていうのを改めて思っていたんですが型でふと思い出したことがありました。
長年、PHPを使用して仕事をしているのですが、PDOを使って数値のデータを取得するとなぜか文字列に変換されてしまうあれです。
あれのせいで型を意識せずになんとなくPHPを使っている方も多いのでは?なんて思いながらHaskellを勉強していたのですが、そもそもあの訳わからない変換はなぜ起きてしまうのか、今回きちんと向き合ってみようと思いました。

###まずPDOとは
PHP Data Objectsの略。
PHPからデータベースへアクセスするのを便利にしてくれるもの。
もっとちゃんと書くと、MySQLやPostgreSQLなどデータベースには様々な種類があって、
本来であればそのデータベースごとにそれぞれ合わせた書き方をしてデータ取得をしなくてはならないところ、
このPDOを使用するとどんなデータベース相手でも同じ書き方で操作出来るようになる便利な子。

###今回の謎
PDOを使ってデータベースから数値のデータを取ってくると、文字列で返ってくる
つまり「100

元記事を表示

Laravelでファイルアップロード機能を実装する

# 前提条件
[eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)](https://qiita.com/toontoon/items/76fa7f8845b20776077c)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

# Controllerにメソッド追加
(1) /sample/app/Http/Controllers/SampleController.phpにuploadメソッドを追記

“`
public function upload(Request $request)
{
$file = $request->file(‘a’);

if (!is_null($file)) {

date_default_timezone_set(‘Asia/Tokyo’);

$originalName = $file->getCli

元記事を表示

OTHERカテゴリの最新記事