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

PHP関連のことを調べてみた2020年12月02日
目次

【サルが書く】EloquentでそれぞれのSELECTで取ってきたデータを、それぞれでソート(ORDER BY)してくっつけたい(UNION)

わきゃ!!

GIGアドベントカレンダー2日目になります!
GIGメンバーの投稿はこちら? から見てみてね!
https://qiita.com/organizations/gig-inc

## EloquentでそれぞれのSELECTで取ってきたデータを、それぞれでソートできないんですけど!

このようなことをしたかった

“`php
$taro = EloquentOffice::where(‘name’, ‘taro’)
->orderBy(‘created_at’, ‘asc’);

$jiro = EloquentOffice::where(‘name’, ‘jiro’)
->orderBy(‘created_at’, ‘asc’)
->union($taro)
->paginate();

“`

これだとorderByがうまく動いてくれない

“`php
$taro = EloquentOffice::where(‘name’, ‘taro’)
->limit(999999999999

元記事を表示

PHP unset関数を実行したら構文エラーが出た

# 目的

– PHPでunset関数を用いて連想配列の要素の削除する処理を実装中に「syntax error, unexpected ‘unset’」というエラーに悩まされたので原因と正しい記載方法をまとめる

# 前提情報

– 下記サービスで検証した。
– [https://paiza.io/ja](https://paiza.io/ja)
– 連想配列arrayを定義する。
– キー「str3」の値を配列から削除したい。

# エラーが出たコード

– 下記のようなコードを記載して実行したところ「syntax error, unexpected ‘unset’」のエラーが表示された。

“`php
‘a’,
‘str2’ => ‘b’,
‘str3’ => ‘c’
];

// キーを指定した値の削除
$array = unset($array[‘str3’]);

元記事を表示

テストしやすいコードってなんだろう?[PHP初心者編]

# テストしやすいコードを書きたい!

今回は PHPのテストしやすいコードを書くにはどうしたら良いかわからない、
そんな方を対象にした回です。

– テストが書きやすいって何?
– テストが書ける設計って何?
– テストで何が変わるの?ブラウザとかREST Clientで確認できれば良いじゃん?
– とりあえず動くんだから良いじゃん
– 抽象化って何?

そんな方には多分ぴったりかもしれません。

## 例

例として以下のコードを見てみましょう。

“`php

元記事を表示

本番環境でsudo yum updateしてサービスが動かなくなった

# 環境

– EC2 (Amazon Linux)
– Apache
– php7.1

# 私がやってしまったこと

この事件が起きたのは2020年6月。既に稼働しているWebサービスでとあるデータ取得の処理が止まってしまっているので調査してほしいと頼まれました。また、サービスに影響が出るものだからなるべく早めに対処してほしいと言われました。

マネージャー 「**今日の夕方まで**にはお願いね。もし難しそうだったら午後イチで一旦MTGしよう。14時までに連絡をください。」

わたし 「任せてください!」

・・・・ とは言ったものの、本番サーバーで起きている障害の調査は今までやったことがありませんでした(**もちろん本番サーバーにログインしたこともない**)し、進め方も全く思いつきませんでした。しかも、対応する**サービスの開発には携わったことがなく**、sshログインの設定から行う次第でした。

まあ、今まで頼まれたタスクを期限内に終えられなかったことないし大丈夫!という**謎の自信**で**本番環境に対する緊張感も持たず**乗り切りろうとしていました。そして、

わたし 

元記事を表示

yumでphp8をインストールしよう!!!

# 概要
php8.0をamazon linux 2を使っインストールする。

awsのcloud9を利用して開発する。

# 前提
#### cloud9の設定
* Create a new EC2 instance for environment (direct access)
* t2.micro (1 GiB RAM + 1 vCPU)
* Amazon Linux 2 (recommended)
* After 30 minutes (default)

# 内容
phpもともと入ってました。

“`:Linux
$ php -v
PHP 7.2.24
$ amazon-linux-extras list php
“`

PHP 8.*は存在しませんでした。

“`:Linux
$ sudo amazon-linux-extras install epel
$ sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
“`

epelとremiを使ってphp8系をインストールします

元記事を表示

異業種から転職して感じたwebエンジニアに必要な素養

#とりあえず箇条書き

・分かりづらいことを分かりやすく説明する能力
・急な内容修正などに対する対応力と柔軟性
・チームの人に対する思いやりと気遣い(コードの工夫やコミュニケーションなどで)
・自分の書くコードに過度な愛着やこだわりを持たない
・自分の思い通りにいかなくても許容する広い心
・ファイル内容やDB構造など広く記憶する記憶力
・どんなバグにもへこたれない強いメンタル
・行き詰ったらすぐに質問をする
・手遅れになる前に相談する
・小まめに進捗報告をする(実は気付いていない内容がよくある)
・どんな状況においてもポジティブシンキング
・自分の間違いを認められること
・相手の間違いを許せること
・意見が合わなくてもレスバしないでうまく妥協点を見つける、その場を丸く収める
・納期を守る、約束を守る
・ダブルチェック、確認をしっかりとする
・あいさつをする
・遅刻しない
・整理整頓
・清潔感
・笑顔

もうエンジニア関係なくなっちゃった!

#今日の名言

If today were the last day of my life, would I want to do

dockerを使用してさくっとPHP8を触ってみた

# dockerを使用してさくっとPHP8を触ってみた

[PARONYM Advent Calendar 2020 – Qiita](https://qiita.com/advent-calendar/2020/paronym) の2日目です。

## はじめに

2020/11/26にPHP8がリリースされました。
ということで、自身のローカル環境をなるべく汚さずにPHP8の新機能を触ってみることにしました。

## 前提条件

– dockerがインストールされていること

## きっかけ

PHP8の新機能を触ってみたい!でも自身のPCを汚したくない!
PHP8を試す環境として、当然ながらプロダクトの開発環境で試すわけにはいきません。(本番環境なんて以ての外)
となるとローカルPCで試すのが妥当ですが、インストールや設定の手間、もしもの時のバージョンの切り替えを考えると一気に面倒になります。
今回はPHP8の機能を触るのが目的であり速度性能を試すわけではないため、さくっとdockerを使用してPHP8を実行することにしました。

## コード

今回試したコードは全てGithu

laravel 6.x migrations-generatorがインストールできない問題対応

# 既存DBのmigrationsファイルを作成したい

migrations-generatorをインストールする

“`
composer require –dev “xethron/migrations-generator”
“`

larabel 6.xでは下記のようなエラーになる

“`
Your requirements could not be resolved to an installable set of packages.

Problem 1
– xethron/migrations-generator v2.0.0 requires way/generators dev-feature/laravel-five-stable -> no matching package found.
– illuminate/support v5.7.9 requires nesbot/carbon ^1.26.3 -> satisfiable by nesbot/carbon[1.26.3, 1.26.4, 1.26.5, 1.26.6, 1.

boolean をカウントする方法(PHP)

#PHPバージョン
PHP 8.0.0

#したかったこと
チェックリストを作成し、チェックの数によってランクを分ける仕組みを作りたかった。
まだphpを学習して1日しか経っておらず、フレームワークすら触れていない状態で、チェックした場合どのような値が戻ってくるのかがわからなかったため、
チェックした場合:check
チェックしなかった場合:nocheck
という値が返ってくると仮定して考えていきます。

では先に実際に書いたコードを↓

“`php

Laravel6.xからLaravel8.xへアップグレード

## まえがき

6.xがLTSだし6.xで開発しはじめていたが、ローンチ時期的に次のLTSバージョンが出る、もしくは近いことが想定されるのでいっそ次にバージョンを上げる際のコストを下げようの気持ちで8.xまでアップグレードするよ

## アップデート前情報

### PHP

“`
PHP 7.4.3 (cli) (built: Feb 20 2020 21:53:46) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
with Xdebug v2.9.6, Copyright (c) 2002-2020, by Derick Rethans
“`

### Laravel

“`
Laravel Framework 6.18.35
“`

### composer.json

– 実際に利用しているPJなのでア

cordova-plugin-purchase用の消耗型課金レシート検証APIをLaravelで実装する

Cordovaで課金処理を行うためのプラグイン、[cordova-plugin-purchase](https://github.com/j3k0/cordova-plugin-purchase)には各プラットフォームのレシートを検証するためのAPI呼び出し処理を追加することができます。
https://github.com/j3k0/cordova-plugin-purchase/blob/master/doc/api.md#receipt-validation

このレシート検証APIをLaravelで作ってみます。

課金を実装したCordovaアプリ自体の作成はこちらの記事でまとめています。
[Cordova(Monaca)でアプリ内課金を実装する](https://qiita.com/danishi/items/10316e3f710e6a9fedf7)

# APIのリクエスト、レスポンス仕様
プラグイン側でリクエストレスポンスの仕様が決められています。
https://github.com/j3k0/cordova-plugin-purchase/blob/master/

[PHP]require_once

#PHPの require_once について
require_once(リクワイア ワンス)は、プログラムファイルを読み込む命令。読み込んだファイルをコードとして実行する。ワンスと付いているので、一度だけ読み込む。

読み込むファイルの拡張子は、何でもいいが、今回はPHPのコードを含んだファイルを読み込むので、phpという拡張子にしている

“`java:HTMLテンプレート




PHP-Web – wawawa


Hello templates



“`

“`java:index.php

きっと正しくないレンタルサーバーの作り方 Vol.2 – ざっくりアーキテクト

# はじめに

前回の記事からだいぶ時間が経ちましたが、第2回めです(・∀・)。
今回は全体的なアーキテクトについて記述していこうと思います(・∀・)。

**※注意!**
この一連の記事で紹介するコードは動作の概念を説明するものでありセキュリティーなどは意識していません(・∀・)。

**実際に運用するシステムなどに使用しないでください**(・∀・)。
(そのまま使うひともいないと思いますが)

また、私も記事を書きながら開発をしていくので「後になってみたら最初の方の記事間違えてたー」なんて事は起きそうです(・∀・)。

ご了承ください(・∀・)。

## 目次

– [きっと正しくないレンタルサーバーの作り方 Vol.1 -プロジェクト事始め](https://qiita.com/lembryo/items/38b5b45435c7b21d0a51)
– [きっと正しくないレンタルサーバーの作り方 Vol.2 – ざっくりアーキテクト](https://qiita.com/lembryo/items/32bdbc5f03990c2d2ff8)(**この記事**)

## 全体の構

【Laravel8.16】ORMで指定したカラムだけ取得する方法

Laravel歴2日の初心者です。
間違えてたらごめんなさい。

指定したカラムだけ取って来たい!!どないすんねん!!ってなったときの備忘録です。
公式マニュアルにも書いておらず、ググっても答えが出てこなかったのでソース直読みすることに。

# クエリビルダとORMでの全件取得方法

“`php:クエリビルダ
$users = DB::table(‘users’)->get();
“`

“`php:ORM
$users= App\Models\Users::all();
“`

# 指定したカラムだけ取得する方法

“`php:クエリビルダ
$users = DB::table(‘users’)->select(‘name’, ‘email as user_email’)->get();
“`

“`php:ORM
$users= App\Models\Users::all(‘name’, ‘email as user_email’);
“`

# ソース

“`php:Model.php
public static function all($co

[PHP] エラー解決 npm 脆弱性の解決

前回のエラーを解決する際に脆弱性が2つあるよというエラーに初遭遇。
前回の記事のURLは[こちら]になります。
[こちら]:https://qiita.com/yutarou/items/5cca5b252d67c80a9bc0

“`
(省略)
found 2 vulnerabilities (1 low, 1 high)
run `npm audit fix` to fix them, or `npm audit` for details
(省略)
“`
上記のエラーを突破しましたのでその備忘録として投稿します。

#解説
まず何が脆弱性なのかを確認するためターミナルで`npm audit`を実行する

“`
//ターミナルにて
npm audit
“`
すると下記のようなリストがターミナルで出現します。
![“スクリーンショット” 2020-12-01 13.45.10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698439/65cc84b1-b450-6f81-dcdf-de74

英語版リーダブルコード(The Art of Readable Code)を読んで日本語訳で要点を殴り書きしてみた。

【最初に】:point_up:
英語版リーダブルコード(The Art of Readable Code)を読んで日本語訳で要点を殴り書きしてみた。

英語からの翻訳なのでやや口語的でない文章になりますが、
我慢して読んで頂けると幸いです。

【1】  理解しやすいコード

コードは理解しやすくなければならない。
コードは他の人が最短期間で理解できるように書かなければならない。
コードは短くしたほうがいい。だけど「理解するまでにかかる時間」を短くするほうが大切

【2】  名前に情報を詰め込む

•Choosing specific words
明確な単語を選ぶこと。
Get → FetchやDownload。

•Avoiding generic names (or knowing when to use them)
「tmp」や「retval」の汎用的な名前を使わない。

tmp – その変数において一時的である事が最も重要な時のみに使用する事。

•Using concrete names instead of abstract names
抽象的な名前

Laravel 8にてRouteの記述につまずいた話

#Laravel6以前と8ではRouteのアクションの記述が違う

###Laravel6以前の場合
“`web.php
Route::get(‘test’, ‘testController@index’);
“`

###Laravel8の場合
“`web.php
Route::get(‘test’, [test::class, ‘index’]);
“`

#まとめ
これらのような記述の違いで頭を悩ましてしまったため、みなさんもネットで情報を得る際は自分の記述しているLaravelのバージョンとネットに記述してあるLaravelのバージョンを比較して、正しい情報を得れるように心がけていきましょう!

Web エンジニアが始める Server-side Swift “Vapor”

## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6102/fab42a3a-8fe1-b103-0e60-ad12eee6f220.png)
2014年の WWDC で電撃発表された Swift は、もはや iOS アプリ開発では定番となっていますが、Web 開発界隈のエンジニアにとっては「何それ美味しいの?」という感じであり、ましてや「サーバサイドで Swift が動く!」とか言われても、どうせ最低限の事しかできず「プレステで Linux が動く!」くらいのお遊びだと思われている方も一定数いらっしゃるのでは無いでしょうか?(シランケド)

とか言う私も、当時の WWDC の Swift 発表は興奮して朝まで眠れなかったくらいですが、最近は Swift からは少し離れて Web アプリ開発にどっぷりです。

そんなわけで、今回は、Web 開発者の目線で、Swift の Web アプリケーションフレームワーク Vapor を触ってみたいと思います。

## Swift って

Amazon DynamoDBでphpのセッションを管理する

# はじめに
AWS DynamoDBでphpのセッションを管理します。
マルチAZの場合、複数のEC2でセッション情報を同期する必要があります。

その場合、候補に上がるのが、 DynamoDBかElastiCacheになるはずです。

**1. IAMポリシーの作成**
EC2インスタンスにアタッチしているロールに、このポリシーを割り当てます。

“`json:php-sessions
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Action”: [
“dynamodb:GetItem”,
“dynamodb:UpdateItem”,
“dynamodb:DeleteItem”,
“dynamodb:Scan”,
“dynamodb:BatchWriteIte

一体いつから PHPがセミコロン省略できないと錯覚していた?

・ヮ・)あ、おはようございまーす
PHPでセミコロン書いてますか?

PHPはCで実装されていてJavaに強く影響を受けているためか、行末にセミコロンを付けないといけません。

Python、Go、Swift、kotlin、Ruby、JavaScript などセミコロンを書かない(または省略してもいい)言語を使っている方からは
しばしば白い目で見られがちです(諸説あり):sob:

正直、悔しいです…:rage:

**PHPの真の力(笑)** を見せつけます!

## 【朗報】PHPにはセミコロンを省略できる構文が2つある:tada:

### `if`
1つ目は `if 文` です
PHPの `if文` は、戻り値があるようなものであれば 変数だろうが、関数であろうが、 式でもいれることができます

“`php
$var = 0;
if ($var) {} // 変数はもちろんOK
if (fn() => 0) {} // クロージャー、アロー関数ももちろんOK
if ($var = 1) {} // 代入式でもOK
“`

しかし 戻り値が無いような式は入れることができ