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

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

Docker × Laravel 8 Jetstream でログイン、ユーザー登録、2要素認証を実装する

Laravel Jetstream は Laravel8から使える新しいパッケージで、Laravel7以前で利用されていた [Laravel UI](https://github.com/laravel/ui) の後継パッケージとなります。

– [Jetstream公式ドキュメント](https://jetstream.laravel.com/1.x/introduction.html)

## Laravel Jetstreamの機能

– ログイン機能
– ユーザー登録機能
– メール検証
– 2要素認証
– セッション管理
– [Laravel Sanctum](https://github.com/laravel/sanctum)によるAPIサポート
– チーム管理

上記の機能を提供します。

## Laravel Jetstreamの特徴

JetstreamはTailwind CSSを使用して設計されています。
テンプレートとして、[Livewire](https://jetstream.laravel.com/1.x/stacks/livewire.html)また

元記事を表示

PHP 、Laravel学習 1

これから学習したことをQiitaに投稿していきます。

非常に中途半端なところからのスタートになりますがご容赦下さい。

●Laravel学習

・MVCモデル
①ブラウザから送られてきた指令(リクエスト)をまずroutingが受け取る
②routingがどこにその指令を飛ばすべきかリクエストの種類を判別する
③controllerで受けとった場合、然るべきアクションを行う
④viewで受けとった場合そのままviewを返す(レスポンス)
⑤ブラウザに反映される

※多様なパターンがあり、一概に↑の順とは限らない

routing・・・リクエストを判別し、然るべき場所に信号を送る
controller・・・routingから送られてきたリクエストに大して然るべきアクションをする
view・・・表示するべきUI部分。
Model・・・データベースの前に立ち、操作しやすくするもの(?)

Model、view、controller
3つの要素の頭文字をとってMVCモデル

・データベース基礎
情報を保存しておくところ
Ex.ユーザーの名前、年齢、性別等

まず、データベースを操作する言語(デ

元記事を表示

さくらVPSサーバーで作成したWebサービスのSSL化を行うに辺り、詰まった点

前提条件として

さくらVPSで環境構築が完了して、自分で作成したWebサービスの独自ドメインを取得しており
ドキュメントルートを設定して、ドメイン名(○○.com等)でhttp接続が完了しているという条件で
記述していきます。

作業環境

CentOS7
Apache2.4.6

Let’s encryptで無料SSL証明書発行してSSL化

今回は無料でSSL証明書を発行したかったのでLet’s encryptを使用しました。

詰まった箇所

https://weblabo.oscasierra.net/letsencrypt-2/

コチラの参考記事の内容を完璧に行ってもhttp接続からhttps接続に切り替わらない。

対策

参考記事に書かれている 
Apache 2.4 への設定が上手く反映されていない可能性を考える。

$apachectl configtest←このコマンドでssl.confの構文チェックを行う。

すると下記エラーメッセージが出る。

Syntax error on line XX of /path/to/ssl.conf:
SSLCerti

元記事を表示

LaravelでSwift_TransportExceptionが発生した時の対処法(Gmail編)

## 問題

– `Laravel`でメール送信しようとしたら**`Swift_TransportException`**というエラーが発生した。
– **`Authenticator LOGIN returned Expected response code 235 but got code “534”`**が発生した。

自分は上記の両方を認証機能のパスワード再発行の際に発生した。
それらを解決できたので、その方法を記載する。

## 解決策

今回は`Gmail`を利用した解決策を書いていく。

### .env

まずは`env`ファイルの設定を確かめる。

“`.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=laravel@admin.com(適当なメールアドレス)
MAIL_FROM_NAME=Admin(適当な名前)
MAIL_USERNAME=(自分が利用しているGmailアドレス)
MAIL_PASSWORD=
MAI

元記事を表示

Laravelの配列操作ラッパー、Collectionを単品で使用してみる

## 概要

Laravelのcollectionが便利なので単品で使いたい
[コレクション -Laravelドキュメント](https://readouble.com/laravel/7.x/ja/collections.html#introduction)

## install
“`
% composer require illuminate/support
“`

## code
sample.php

“`php
‘value’];
$collection = collect($array);
var_dump($collection);
“`

## 結果
“`
% php sample.php
object(Illuminate\Support\Collection)#3 (1) {
[“items”:protected]=>
array(1) {
[“key”]=>
string(5) “value”
}
}

元記事を表示

【PHP】TrueとFalseを出力する

![

# やりたいこと
trueはtrue、falseはfalseと出力したい。

## うまくいかなかった方法
配列をtrueとfalseで初期化し、値を出力した。

“`php
$tf = array(true,false,true,false);

for($i = 0;$i < 4;$i++){ print $tf[$i]."
“;
}
“`

### 結果
trueは1、falseは””と出力される

“`php
1

1
“`

## うまくいった方法
出力の際にvar_exportを使った。

“`php
$tf = array(true,false,true,false);

for($i = 0;$i < 4;$i++){ print var_export($tf[$i])."
“;
}
“`
### 結果
trueはtrue、falseはfalseと出力される。

“`php
true
f

元記事を表示

Adminerでoracleに繋げる

#Adminerとは
AdminerはPHPで動作するWebSQLクライアントです。
https://www.adminer.org/

同じ物に言わずとしれたphpMyAdminですが使えるのはMysqlだけ。
一方AdminerではmysqlのほかにPostgreSQL、SQLite、MS SQL、Oracleなど幅広く扱えます。

#oracle
本題です。
そんななかoracleに繋げる時だけログインフォームに癖がありこれが毎度忘れるので記事にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36304/c1f7ae75-f804-70fc-4751-f02379a4e1a8.png)

これはDockerでoracleDBをインストールした場合のデフォ情報の場合です。

Serverにはホスト名(TNS名)/サービス名の両方を/で仕切り、入力する必要があります。
User名はログインユーザ
Databaseはスキーマ名となります。

大文字小文字が区別されるので注意で

元記事を表示

PHP(Imagick)でイメージをマスクして切り取る

## 完成形

test.png

画像の左右を斜めに切り取っています。

元記事を表示

IBM i oci8.so でセグメンテーション障害(core dumped)

IBMiとOracleで嵌り事象に遭遇したので、備忘録として。

## 突然のセグメンテーション障害(core dumped)
IBMi 環境下のPHP`oci8.so`を使用して、ユーザーのPHPアプリケーションテストをしたところ、ある日突然なんのエラーメッセージも出力されず「セグメンテーション障害(core dumped)」となり、PHPアプリケーションが落ちてしまう様になった。エラー時に出力された、スプールは以下の通り。

“`txt
MCH6801 エスケープ 40 20/09/07 20:04:46.275123 QP2USER2 QSYS *STMT QP2USER2 QSYS *STMT
送信元モジュール. . . . . : QP2API
送信元プロシージャー. . . : runpase_common__FiPvT2

元記事を表示

sprintf()でSQL文を生成する際、%は%でエスケープできる

何を言っているのかわからねーと思うが、ありのままを話すぜ

#はじめに
現在私はPHP+MySQLでフルスクラッチ開発をしている会社で働いているのですが、
まだ、入社して1ヶ月ほどなので既存のコードを読むことがほとんどです。

弊社ではphpファイルの中でSQL文を生成する際に
sprintf()を使用して、フォーマットを整えるようにしています。
(これがスタンダードなのかは不明)

その中で、いまいちよくわからない記述を調べていくうちに
興味深いルールに出会いましたので、忘れないようQiita残しておきます。

#sprintf()でSQLの曖昧検索クエリを作る時

“`php
$freeword = ‘qiita’;

$sql = sprintf(‘SELECT * FROM title LIKE “%%%s%%”‘, $freeword);
“`

このコードはsprintf()の第二引数 $freeword が、第一引数内の “%%%s%%” の部分に
置き換わってフォーマットされるのですがその際に気をつけたいルールがあります。

まず真ん

Laravelでcreateを実行してもカラムの値がNULLになってしまうときの解決策

## 問題
– `Laravel`で`create`を実行したが、値を指定したのに挿入される値は`NULL`になっていた。
– `Laravel`で`create`を実行した際、**`SQLSTATE[HY000]: General error: 1364 Field (カラム名) doesn’t have a default value`**が発生した。

## 解決策
**モデルを見直す**

自分の場合、モデルで該当のカラムを`$fillable`の対象に記入していなかった。

“`app\Model.php
class Model extends Authenticatable
{
use Notifiable;

/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
‘name’, ‘email’, ‘password’,
//(ここにcreateを実行してもNU

Visual Studio Codeでも必要な時にのみXDebugをオン

# やりたいこと
– [必要な時にのみxdebugをオン](https://qiita.com/koriym/items/29f81514706a39e3b7c1)というのをVisual Studio Codeでもやりたい

# Install
– [Visual Studio Codeの拡張機能のPHP Debug](https://marketplace.visualstudio.com/items?itemName=felixfbecker.php-debug)をインストールする

# 設定 launch.json
“`json
{
“version”: “0.2.0”,
“configurations”: [
{
“name”: “Listen for XDebug”,
“type”: “php”,
“request”: “launch”,
“port”: 9000
},
{
“name”: “Launch currently open script”,
“type”: “

FuelPHPでのFacebookログインの実装

# はじめに

わりと今さらですが、FuelPHP で Facebook ログインを実装した時のメモです。
FuelPHP では、Opauth というパッケージを使うことにより容易にソーシャルログインを実装することが可能です。

# Facebookアプリを作成

これは FuelPHP に限った話ではないですが、Facebook の使ったソーシャルログインを実装するためには、まず Facebook 側でソーシャルログイン用の Facebook アプリを作成しておく必要があります。
Facebook アプリを作成するには Facebook の開発者登録が必要ですので、まずは開発者登録を行います。

## 開発者登録
開発者登録をしたいアカウントでFacebookにログインした状態で、下記のページにアクセスします。

https://developers.facebook.com/

ページの右上の「スタートガイド」をクリックすると登録用のウィンドウが出てきます。
あとは画面の案内通りに進めれば開発者登録が終わります。
ちなみに、開発者登録には電話番号認証もしくはクレジットカード認証が必

fgetsとかSTDINとか標準入力がわからなくてPaizaスキルチェックを始められない方へ

#はじめに
プログラミングを学び始めて、もっと実力を磨くために、問題集みたいなのないかなーと探してPaizaに辿り着いたまではいいものの、「標準入力?fgets?STDIN?何それ?」「標準入力の値の取得方法は下記ページのサンプルコードを参照ください。って言うから値取得・出力サンプルコード見たけど、意味不。」と、当初はDランクの問題ですら、60分以内に解けなかった僕が通ります。

私はPHPを学習しているので、PHP前提でこの記事を作成します。

上級者の方、ツッコミや補足情報あれば、ぜひお願いします。

#標準入力
標準入力とは、ここでは、Paizaスキルチェックにおいて、Paiza側から渡されるデータのことです。現時点では、あなたのプログラムの整合性を確認するために、10パターンのデータを用意して、あなたが提出したプログラムをチェックします。そのデータはこの標準入力としてあなたのプログラムに読み込む準備をしておかなくてはなりません。

そこで必要なのが、fgets関数とSTDINというオブジェクト(モノ)です。
#fgetsとは
fgetsは関数で[PHP公式](https://w

Laravelでneo4jを使ってみる②Loginをneo4jに対応してみる

※モデルファイルをapp/Models内に移動しています。
※参考[【Laravel】モデルのディレクトリ構成変更についてのメモ](https://qiita.com/vrvr/items/4755e758f5d4b2e07579)

#②ログイン機能を対応してみる

##1)ログイン機能の有効化
下記コマンドをプロジェクトで実行

“`
php artisan make:auth
“`

##2)User.phpの変更

“`app/Models/User.php※フォルダ構成変更していない場合はapp/User.php

Laravelでneo4jを使ってみる①設定編

#①設定
・laravel バージョン 5.6
・neoEloquent バージョン 1.4.6

##1)Laravelプロジェクトをバージョン指定して作成

“`
composer create-project “laravel/laravel=5.6.*” [プロジェクト名]
“`

##2)Vinelab/NeoEloquentの設定

“`
composer require vinelab/neoeloquent 1.4.6
“`
※neo4jの設定がないと怒られる場合、先にconfig/database.phpの設定をしてキャッシュクリア。
 

##3)neo4jデータベースの利用設定

config/database.phpにneo4jの設定を追加

“`
‘default’ => env(‘DB_CONNECTION’, ‘neo4j’),
“`

“`
‘connections’ => [

‘neo4j’ => [
‘driver’ => ‘neo4j’,

Amazon Linux 2 で PHP を簡単にアップデートする方法

Amazon Linux 2 の、ここ1年位の Amazon Linux Extra を使って、PHP をインストールしている人は、Amazon Linux Extra でパッケージの Disable & Enable をするだけで、結構簡単に PHP のアップデートができるという話です。

参考: [Amazon linux 2でのphpの更新方法](https://qiita.com/P__act2_tech/items/69a5b94ead8ee3edbc7e) (感謝!)

# 自分の環境

– AWS
– 開発用のサーバー
– Amazon Linux 2
– PHP 7.1 の Extra を導入
– 導入済みの PHP 一覧 `libmcrypt php php-bcmath php-cli php-common php-dba php-embedded php-enchant php-fpm php-gd php-gmp php-intl php-json php-ldap php-mbstring php-mysqlnd php-odbc php-opcache

PHP 配列の中の配列の値を書き換える方法

# 目的

– 配列の中に入った配列の中の値を更新する方法をまとめる

# 実施環境

– 下記サイトにてPHPの動作を確認しながら本記事を書いた。
– [https://paiza.io/ja](https://paiza.io/ja)

# 例

– 配列の中に入った配列の値を更新する処理を下記に記載する。

“`php
foreach (配列A as &変数){
変数[‘インデックス’] = ‘更新したい値’;
}
“`

# 連想配列の既存インデックスのデータを書き換える具体例

– 配列「$infos」には連想配列が格納されている物とする。
– 連想配列にはインデックス「id」に商品IDが、インデックス「item_name」に商品名が、インデックス「price」に商品の税抜きの値段が格納されている物とする。
– 配列「$infos」に格納されている連想配列のインデックス「price」の税抜き金額を引き出し、税率を用いた計算をし、連想配列のインデックス「price」の税抜き金額を税込み金額で書き換える方法を下記に記載す

Laravelで更新項目をkey-valueで取得して動的にValidationを実施して更新を実施する

## TL; DR
APIの開発をしていると、通常はFormRequestで更新項目を取得し、validationを実施します。

しかし、更新する項目のみをリクエストとして送信する、かつ1項目のみとする場合は、通常の実装ではこの限りとはなりません。

そのため、少しとトリッキー~~冗長~~なやり方で実装してみます。

## 環境
– PHP7.4
– Laravel7.2

## 通常の更新処理の実装
通常、以下の要領で更新処理のリクエストを送信します。

“`json
{
“name”: “名前”,
“mail”: “test@exmaple.com”,
“gender”: 1
}
“`

このリクエストに対応するFormRequestは、以下のとおりです。

“`php

【Laravel】バッチでユーザーにメール送信

継続は力なり。めげずに今日も備忘録。
バッチの理解を深める為、簡単な処理を実装してみた。

## 環境
PHP 7.3.8
Laravel 6.18.35

## 本日のお題
バッチでメールを送ってみる。
今回は実装するアプリケーションの登録ユーザーに一括送信するもの。

## メールの環境設定
[mailtrap.io](https://mailtrap.io/inboxes)というSMTPのダミーサーバーを利用する。
mailtrap.ioを利用する事で送信したメールは指定したアドレス宛てには送信されずに、mailtrap.ioの画面で結果を確認する事が出来るので、非常に便利です。会員登録したら直ぐに使えます。

mailtrap.ioの` Inboxes` から` Demo inbox` に遷移して、SMTP情報を確認します。
その情報を元に.envを編集します。

“`php:.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=mailtrap.ioのSMTP情報を参照
MA