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

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

レンタルサーバーでLaravelを動かす際の環境構築手順とTips

# はじめに

この記事は**[Laravel Advent Calendar 2019](https://qiita.com/advent-calendar/2019/laravel)**の**23日目の記事**です
過去に培ったレンサバ**([さくらサーバ](https://www.sakura.ne.jp/)、[バリューサーバ](https://www.value-server.com/))**でLaravelを動かすためのアレコレを書いていきます

.
.
.

という予定だったんですが、**さくらサーバーでの環境構築手順メモしか手元に残ってなかったのでほぼさくらサーバーでの環境構築手順になります**(主語でかで申し訳ないです)

# AWSとかわからんからレンサバでLaravelを動かす

というのはまあ**半分冗談**で、大体が**コストになる**とか、**先方指定**とかで最終的に**レンタルサーバーにしてください**って言われるので、世間的にもそうなのかな?と思いつつ記事書いていきます。
このTipsが誰かの役に立てれば我幸です。

**情報の鮮度的に19年9月ごろま

元記事を表示

PHPStanで素のPHPをテンプレートとして使うとき、htmlspecialcharsをチェックする

前に[テンプレートエンジンでも型チェックしたい](https://qiita.com/nishimura/items/bfabfb137abe42e62c39)ということを書いたが、まだ一点不満があった。

そもそもテンプレートエンジンを使う唯一にして最大のメリットは、`htmlspecialchars`を漏れなく実行することにある。
PHP自体がテンプレートエンジンと言われていても、別途テンプレートエンジンのライブラリを使うのは

“`php

“`

というような出力を書いてしまってXSSが発生するということを防ぐのが目的である。
他の機能は、例えばBladeなら

“`php
@if ($flg)
OK
@endif

@foreach ($data as $key => $row)

{{ $row->id }}: {{ $row->name }}

@endforeach


OK

元記事を表示

[WordPress]PHPCodeSniffer(phpcs)でWPコーディング規約をチェック&自動整形できるようにする

ちゃんとしようと思い、WordPressコーディング規約をちゃんと学び始めました。
でも自分で間違いを探し出すのはとっても大変だとうなだれてたら、構文エラーをチェックでき、自動整形もしてくれる方法を知ったので忘れないうちにまとめておきます。
野性味のあるまなちゃんも貼っておきます。
mojikyo45_640-2.gif
かわいい。
#WordPressコーディング規約(WordPress Coding Standard)とは
WordPressには、コーディング規約がある。
コーディング規約はCSS、HTML、JavaScript、PHPと言語ごとに存在する。

– [CSS コーディング規約 \- WordPress Codex 日本語版](https://wpdocs.osdn.jp/CSS_%E3%82%

元記事を表示

モバイル環境でNetwork Errorでハマった。「EC2にDocker Caddy Laravel, S3にVuejsの構成」

指摘などウェルカムです。
クロスオリジン(CORS)に関連するエラーなんだと思うけどPCでは動くが、携帯 IOS Iphone7(古い)からのブラウザ(最新)ではsafariもchromeも動かないって現象で結構ハマった。

# 環境

大体の構成
route53から分岐
-> CloudFront+S3にvuejs
-> ALBからEC2(Ubuntu)にDocker Caddy Laravel

# 解決策

サーバー側のクロスオリジンの設定をちゃんと設定する。

Access-Control-Allow-Origin
Access-Control-Allow-Headers
をざっくり設定して * としていた。
これが原因だった。
ちゃんとフロントs3側のホスト名を指定したら動いた。
この記事で必須と書いてあるので、ん?と思って設定したら動いた。

“`php
:OK.php

元記事を表示

Laravel6系 に Vuetify を入れてみる

こんにばんわ! @ktoshi です。
今回は私が困ったときに縋りつく Laravel についてお話します。
ちなみに私はインフラエンジニアです。メインは。

# 目的
Laravel6 に Vuetify を導入したい。
Laravel6 より Vue.js などが標準ライブラリから外れたため、Laravel5 以前の記事ではそのまま導入ができなくなりました。
毎度導入しているときに複数の記事を見ながら、導入しているので備忘録もかねて。

# 環境
OS: Windows 10 Pro
PHP: 7.3.10

# Composer インストール
Laravel で使用するパッケージ管理に利用します。
みなさんご存じですよね。多くは語りません。
[Composerインストール手順(Windows)](https://qiita.com/mikoski01/items/266469535e860312145d) を参考されたし。

# node.js インストール
node.js 自体をサーバとして利用も可能ですが、Laravel では主に Vue.js の
ビルドを目的に利用します。

元記事を表示

CakePHP3をPHP7.2で動かすときは気をつけろ

# PHP7.2は曲者!?

以下の記事でも書いたが、PHP7.2でCakePHP3を動かそうとすると思わぬ事態に遭遇する。
https://qiita.com/21century_girl_/items/5be2606b3bfa98514952

元はといえば、サーバー移行の依頼を受けたため、「どうせならPHPのバージョンを上げるか」と軽い気持ちで、***PHP7.1→PHP7.2***にバージョンアップしたのです。

## phpコマンドが動かん…

“`
php -v
“`

いつものこれ。
phpのバージョンを確認するコマンドですが、これが

“`
command not found
“`

と出て動かないわけですな。

“`
php72 -v
“`

これで動きます。

一応、簡易的な対応としては以下の記事に載せているのでここでは割愛
https://qiita.com/21century_girl_/items/5be2606b3bfa98514952

## cronに設定したshellが動かん..

/etc/cron.dに以下のように設定したのです。

元記事を表示

メール認証(アクティベーション)機能を自前で実装【Laravel】

この記事は、[認証認可技術 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/identity) の23日目の記事です。

# 1. はじめに

Laravelって便利ですよね。

Laravel5.7からは、`make:auth`コマンドや`MustVerifyEmail`インターフェースを使えばすぐにメール認証機能の実装もできるようになりました。(Laravel6.0からは`make:auth`廃止されましたが)

ただ便利な反面、途中から機能追加したり、変更頻度が多いことを見越して自前で実装して柔軟に対応できるようにしておきたいことがあります。
こういったことがあって自前で実装したのでその時の備忘録です。
(APIサーバをつくるときの話で、LaravelはフルスタックフレームワークなのでAPIサーバのみの利用はあまり無かった)

少し前の実装なのでうる覚えな部分はありますがご容赦ください。

# 2. やりたいこと

タイトル通り、メール認証機能の実装です。

私が思っているメール認証機能の定義と流れは

元記事を表示

BEAR.SundayのチュートリアルでDIが面白いほど理解できた話

# はじめに

[BEAR.Sunday アドベントカレンダー](https://qiita.com/advent-calendar/2019/bear-sunday) 23日目の記事です。

長い間、DIに対する理解がふわっとしていたのですが、[BEAR.Sundayのチュートリアル](https://bearsunday.github.io/manuals/1.0/ja/tutorial.html)をやってみたところ、今まで喉に引っかかっていた小骨な取れたかのように飲み込めたような気がしたので、BEAR.SundayでDIを実践してみたことで理解できたことを記事にしてみようと思った次第です。

# DI とは

DI とは、Dependency Injection の略で日本語では依存性の注入という意味です。

依存性をオブジェクトのことだと捉えると、オブジェクトを他のオブジェクトに渡してあげるということになります。

あるクラスの中で他のクラスをNewで生成したりせずに、引数として外部から渡してもらって利用することをDIになります。

## DIではない例

“` php

元記事を表示

PHPで「大石・泉・すき」をランダムに表示して「大石泉すき」が完成したら大石泉すき

## この記事について
本記事は、[「大石泉すき」 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ohishi-izumi-suki)の23日目です。

プログラム言語「PHP(PHP: Hypertext Preprocessor)」を使い、「大石泉すき」が完成するまで「大石・泉・すき」をランダム表示するプログラムを作成します。

## 大石泉とは
>「大石泉」(おおいし いずみ)とは、Mobageにて配信されているバンダイナムコエンターテインメントのソーシャルゲーム『アイドルマスター シンデレラガールズ』に登場するロジックアイドルである。

(引用:[ニコニコ大百科](https://dic.nicovideo.jp/a/%E5%A4%A7%E7%9F%B3%E6%B3%89)より)

私の担当アイドルである[二宮飛鳥](https://dic.nicovideo.jp/a/%E4%BA%8C%E5%AE%AE%E9%A3%9B%E9%B3%A5)とは出身地が同じ(静岡県)で歳が近いということでいつか公式で

元記事を表示

Visual Studio Code – Remote Development を使用して PHP Xdebug を使ったデバッグを行う

## 要約

– VS Code の Remote Development で Xdebug する時は、`remote_host` の向き先を ローカルホストにする。
– Remote Development の接続先の VS Code に PHP Debug を導入する。
– `.vscode/launch.json` で Xdebug からの情報を Listen する。

## はじめに

VS Code の 拡張機能 「 Remote Development 」は、これまでもどかしく感じていたローカル開発環境の構成を改善してくれそうで色々と試しています。

[前回の記事](https://qiita.com/anfangd/items/63ab95a2005cb2d1f196) では、Vagrant で構築した仮想環境の上にある Docker コンテナに対して、 Remote Development で接続する方法を記載しました。

今回は、前回構築した環境に追加する形で、 PHP の Xdebug を用いた開発が出来るように設定方法をまとめてみます。

## 概要

### 書

元記事を表示

PHPでpost_max_sizeやupload_max_filesizeの設定がini_set()で反映されない場合

サーバー上でPHPを利用していると、PHPの設定を`php.ini`を書き換えることなく、
特定のファイルや、ディレクトリないだけで変更したい場合がたまにあります。

つい先日も、自作のPHPファイルだけで有効になるよう、
`post_max_size`と`upload_max_filesize`の値を`ini_set`で値を変更したところ、値が反映されていない・・

`php_info()`で設定値を確認しても、やっぱり変わっていなかったので、
ちょっと調べたところ[PHPマニュアル](https://www.php.net/manual/ja/configuration.changes.modes.php)にがっつり書いていました。

PHPの各ディレクティブ(設定値)は、そのディレクティブのモードによって、
何処で設定出来るかが決まっているそうです。
PHPディレクティブとモードの一覧は[こちら](https://www.php.net/manual/ja/ini.list.php)

`post_max_size`や`upload_max_filesize`は、
モードが

【Laravel】boolean型へのキャスト

###boolean型(理論型)とは
phpのマニュアルによれば、「boolean は、真偽の値を表します。 この値は、TRUE または FALSE のどちらかになります。」とのこと。

つまりboolean型には「TRUE」と「FALSE」の2種類の値にしかならない。

###型をキャスト(変換)すると
boolean型へのキャストを行うと次の値は「**FALSE**」と判定される。

・boolean の FALSE
・integerの0
・floatの0.0
・空の文字列、および文字列の “0”
・要素の数がゼロである配列
・NULL
・空のタグから作成された SimpleXML オブジェクト

“`php
var_dump((bool) “false”); // bool(false)
var_dump((bool) 0); // bool(false)
var_dump((bool) 0.0); // bool(false)
var_dump((bool) “”); // bool(false)
var_dump((bool) “

自分が調べたPHPのマジックメソッドの機能についてまとめてみた

# はじめに 
Laravelの仕組みを調べているときに調べたマジックメソッドの機能について、自分の備忘録を兼ねてここにまとめました。
この投稿について疑問や指摘があれば、ぜひコメントお願いします。

#本題
**property_exists メソッド**
>PHPマニュアル(https://www.php.net/manual/ja/function.property-exists.php)
>>
機能 オブジェクトもしくはクラスにプロパティが存在するかどうかを調べる。
説明 “property_exists ( mixed $class , string $property ) : bool“
パラメータ class:確認するクラス、もしくはクラスのオブジェクトを指定します。 property:プロパティ名を指定します。

試し書き

“`PropertyExists.php
//基本型
class Pikotaro
{
public $pen;
protected $pineapple;
private $apple;
}
var_dump(propert

Web開発勉強のためWordpressでポートフォリオサイトを開設するまで③〜XAMPPローカル環境構築失敗編〜

**XAMPPでローカル環境を構築できたといったな。あれは嘘だ。**

いや、嘘ではないんですけど、うまくいったのはインストールまででした。
講座の動画に従って投稿や固定ページの更新をしたところ、
「更新に失敗しました。 エラーメッセージ: 返答が正しい JSON レスポンスではありません。」
というエラーメッセージが表示され、なにもできない状態でした。

いまだにデータ交換をテキストやらCSVでやっている仕事ですので、XMLはおろかJSONとは、みたいな状態で、ググってもいまいち解決方法がピンとこない・・・
UdemyのQ&Aを覗いても同様の質問がなかったため、思いきって自ら質問してみました。
すると、すぐに先生自ら回答をくださいました!
>php.iniのmax_execution_timeをデフォルト設定から300に変更して、Apacheを再起動してみてください。

とのこと。ちなみにこの日は有給予定だったので平日朝の7時ぐらいに書きこみました。~~先生ヒマなのかしら。~~
というわけで、php.iniを探してパラメーターを上書き。
念のためPCも再起動しましたが・・・残念ながら

Laravel-Excelでセル結合した複数シートを出力する

この記事は、[Fusic その2 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/fusic-2) 22日目の記事です。

## はじめに

LaravelでExcel出力するなら [Laravel-Excel](https://laravel-excel.com/) を使っている方が多いかと思います。

ただこのライブラリ、[PHPSpreadSheet](https://phpspreadsheet.readthedocs.io/en/latest/) の完全なラッパーではありません。
それ故に少々詰まったので、書き残しておきます。

## 環境
PHP 7.4.1
Laravel 6.9.0
Laravel-Excel 3.1

## クラス構成
Userモデルを介して取得した全データを、
UsersExportクラスにDIし、各ユーザごとにUsersSheetクラスを作成します。

“`
├── app
│ ├── Exports
│ │ ├── UsersExport.php

[PHP]データクラスを活用しよう!

# はじめに

この記事は、僕が最近同期(めちゃ仕事できるマン)と仕事をしていてコードレビューで指摘をされて「なるほど!」と感動したので
その感動を忘れないようにするための備忘録みたいなものです。

# 奇数と偶数に分ける処理を例に考えてみる

今回は例として、奇数と偶数を分ける処理を書いてみます。
やり方としては…

– 奇数と偶数を分けた結果を同じ配列の異なるキーに格納する

呼び出し側はこんな感じです。

“`php5:DivideTask.php
getDivider();
$divided_array = $divider->divide($number);
if (!empty($divided_array[“even”])) {

Web開発勉強のためWordpressでポートフォリオサイトを開設するまで②〜MAMPローカル環境構築失敗編〜

WordPressの講座で、ローカルで使用環境を構築するための案内をしていたので、動画に沿って環境構築をしていきました。
PCは動画ではMacを使って案内していましたが、当方Windowsでの環境構築となります。
ちなみに使用PCのスペックは、
・Windows10 HOME バージョン1909
・CPU Cerelon(R) N4000CPU 1.10GHz 1.10GHz
・メモリ 4GB
・ストレージ HDD1TB
です。(ムダにHDD1TBなのがツッコミどころですw)

まずMAMPをインストールするよう案内されました。
・https://www.mamp.info/
LAMPをもじったオープンソースで、Webサーバーの環境構築が簡単にできるソフトです。
WindowsだからWAMPだよなーと思いつつ無事にインストールまで完了。

動画の案内通り、MAMPのフォルダ内にあるhtdocs内にダウンロードしたWordpress一式を移動。
MAMPを起動させ、ブラウザが起動したのでパスにWordpressのフォルダ名を指定。
この時点でインストール画面が表示されるはずなのですが・・

【入門】Laravel×Vue.js②〜実装編〜

#はじめに
**PHPのフレームワークであるLaravel**で作成したアプリケーションに
**JavaScriptのフレームワークであるVue.js**を連携させる方法について説明します。
簡単な機能を実装します。自分のコンポーネントを登録する方法について説明します
**実装する機能
  メッセージを表示して、ボタンを押すと、メッセージを反転する**

#コンポーネントの作成
まず、`resources/js/components/`内に`HelloComponent.vue`を作成してください
そして、内容を以下のようにしてください

“`html:resources/js/components/HelloComponent.vue