- 1. 【Laravel】メールアドレス+認証コードでモダンな認証機能を作成する
- 2. PHP 8.2のインストール
- 3. PHP: guzzlehttp/guzzle の使い方
- 4. Laravel10に必要なPHP拡張機能の追加
- 5. 【Laravel】バリデーションの作成
- 6. 【PHP】任意の順番で配列を並び替え
- 7. php aritisan serveを実行後→「Failed opening required ‘…/example-app/vendor/autoload.php’ (include_path=’.:’) in /example-app/artisan on line 18」
- 8. composer install実行後→「Your requirements could not be resolved to an installable set of packages」
- 9. nginx UnitはPHP-FPMに比べて本当に8倍速いのか
- 10. PHPフレームワークLaravel入門第2版を読むときに気をつけること
- 11. 【WP-Cron】wp_schedule_eventを1秒に一回/1分に一回実行【Secondly/Minutely】
- 12. 【Laravel9】ChatGPTのAPIを利用する方法
- 13. Laravelで論理削除を実装してみる
- 14. セキュリティ問題と解決方法-その1
- 15. 「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
- 16. telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
- 17. PHP7に PDF Haru拡張をインストール
- 18. Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
- 19. WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
- 20. 戻り値returnは何のためにあるの?
【Laravel】メールアドレス+認証コードでモダンな認証機能を作成する
## 本記事のゴール
![画面収録 2023-09-25 7.13.16.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1814845/219eb861-2277-f2f4-a595-b8ffb9f88adf.gif)“`mermaid
flowchart TB
welcome –>|ボタンクリック| first-auth –>|メールアドレス入力| second-auth –>|ワンタイムトークン入力| dashboard
“`## 開発環境
– M1 MacbookPro
– macOS Venture13.5.1
– Docker Deskctop## 利用フレームワーク/パッケージ
– Laravel Sail
– Laravel 10
– Laravel Breeze## 実装フロー
1. プロジェクトの初期設定
1-1. [プロジェクト作成](#1-1プロジェクト作成)
1-2. [エイリアスの設定](#1-2エイリアスの設定)
PHP 8.2のインストール
PHP 8.X系をインストールしたので、手順を備忘録として残しておきます。
## 経緯
AWSを使用したPHPのアプリを何か作りたいと考えていて、Laravelを使うべくインストールしようとしたら、自前のMacにPHPが入っていないことに気付かされる。## 環境
macOS Monterey version 12.3.1
Homebrew 4.1.2## 前提
Homebrewのインストールは下記参照。Homebrewは入っていたので、Composer入れるべく、OpenSSLのインストール。
“
% brew install openssl
“
次に、以下のコマンドでComposerをインストール…
“
% curl -sS http://getcomposer.org/installer | php
“
しようとしたところ、下記のエラーが出てきた。
“`
zsh: command not found: php
curl: (23) Failure writing output to des
PHP: guzzlehttp/guzzle の使い方
次のページと同じことを Ubuntu 23.04 で行いました。
[PHP Http ClientのGuzzleパッケージを使う](https://reffect.co.jp/php/php-http-client-guzzle/)## ライブラリーのインストール
“`bash
composer require guzzlehttp/guzzle
“`作成された composer.json
“`json:composer.json
{
“require”: {
“guzzlehttp/guzzle”: “^7.8”
}
}
“`## テストプログラム
“`php:check01.php
#! /usr/bin/php
request(‘GET’, ‘https://jsonplaceholder.typicode
Laravel10に必要なPHP拡張機能の追加
## 1. PHP8.1以上であること
“`bash
$ php -v
PHP 8.2.10 (cli) (built: Sep 2 2023 06:59:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies
“`## 2. 各種拡張機能
下記の13個の拡張機能が必要とのこと
– Ctype PHP拡張
– cURL PHP拡張
– DOM PHP拡張
– Fileinfo PHP拡張
– Filter PHP拡張
– Hash PHP拡張
– Mbstring PHP拡張
– OpenSSL PHP拡張
– PCRE PHP拡張
– PDO PHP拡張
– Session PHP拡張
– Tokenizer PHP拡張
– XML PHP拡張参考 [https://readouble.com/laravel
【Laravel】バリデーションの作成
システム開発を行う上でバリデーションは必須の機能になります。
今回はそのバリデーションの書き方について説明していきます。開発環境
・PHP8.0.8
・Laravel 9.52.8
・MacOS M1チップ## なぜバリデーションが必要なのか
そもそもバリデーションとはユーザーによって開発者の期待しない値が送信されたときにその入力値によってバグがおきないように事前に入力制御するものです。
通常だとバリデーションされた値はデータベース上に登録されず、再度ユーザーに入力を促します。## バリデーションの作成
バリデーションを行うためのファイルを下記コマンドを使用して作成していきます。
作成後はapp/Http/Requestsフォルダに作成したファイルが作成されています。“`php
php artisan make:request SampleFormRequest(ファイル名)
“`## バリデーションの書き方
“`php:SampleFormRequest.php
namespace App\Http\Requests;use Illuminate\Fou
【PHP】任意の順番で配列を並び替え
# コード
“`php
usort($query_data, function($v1, $v2) use ($id_list){
return array_search($v1[“id”], $any_sort) > array_search($v2[“id”], $any_sort);
});
“`
php aritisan serveを実行後→「Failed opening required ‘…/example-app/vendor/autoload.php’ (include_path=’.:’) in /example-app/artisan on line 18」
## 開発環境
– Mac OS Monterey(バージョン12..2.1)
– MacBook Air (M1)
– composer version 2.0.9
– Laravel Framework 10.10Laravel環境を構築して、`php artisan serve`を実行した時のエラー
“`jsx
Failed to open stream: No such file or directory in /example-app/artisan on line 18Failed opening required ‘…/example-app/vendor/autoload.php’ (include_path=’.:’) in /example-app/artisan on line 18
“`LaravelはURLにアクセスした時にエントリーポイントが参照(public/index.php)仕組みになっていて、その中で、オートロードファイルを読み込みアプリケーションの設定・実行が行われるため、本来設定されているはずのファイルが存在しないよって事らし
composer install実行後→「Your requirements could not be resolved to an installable set of packages」
## 開発環境
– Mac OS Monterey(バージョン12..2.1)
– MacBook Air (M1)
– composer version 2.0.9
– Laravel Framework 10.10`composr install` を実行しようとすると以下のエラーが出てきた。
“`jsx
Your requirements could not be resolved to an installable set of packages.Problem 1
– laravel/framework[v10.10.0, …, v10.24.0] require composer-runtime-api ^2.2 -> found composer-runtime-api[2.0.0] but it does not match the constraint.
– Root composer.json requires laravel/framework ^10.10 -> satisfiable by laravel/framewor
nginx UnitはPHP-FPMに比べて本当に8倍速いのか
# 発端
元ソース。https://gigazine.net/news/20230913-nginx-unit/
nginx Unitを使うと、現在利用しているPHPのアプリケーションサーバPHP-FPMより
応答速度が8倍速くなるとかいう触れ込み。
赤い彗星もビックリ。# ソフト概要
## PHP-FPM
https://www.php.net/manual/ja/install.fpm.phpPHPの標準アプリケーションサーバソフトウェア。
Webサーバーとして稼働する際に、
ブラウザからのリクエストによってPHPを実行する為のプログラム。
特に選択肢が無ければ使われる様な気がする。## nginx Unit
nginx.Incが出しているアプリケーションサーバソフトウェア。
PHPだけでなく、pythonやJavascriptなども実行する事が出来て、
マルチな言語に対応出来るのが魅力。
最近意外とはえーんじゃないかなと上記記事で少し話題になった。かもしれない。#
PHPフレームワークLaravel入門第2版を読むときに気をつけること
## 課題
掌田津耶乃著の[Laravel 入門第 2 版](https://www.shuwasystem.co.jp/book/9784798060996.html)は Laravel 6 をベースにかかれているため、2023 年 9 月現在の最新バージョンでは動かないコードがある。
## 環境
WSL2 Ubuntu 20.04.6 LTS
Laravel Framework 8.83.27## 本の通りでは動かないシリーズ
### p.43 のルート情報の書き方
#### 問題
本の通りに書いても、クラスが見つからないというエラーが出る。
#### 対処法
Laravel 8 では、コントローラのアクション名をフルパスで書く必要がある。
“`
Route::get(‘hello’, ‘App\Http\Controllers\HelloController@index’);
“`## 終わりに
読み進めていくうちにまた動かないコードが出てきたら追記する予定。
【WP-Cron】wp_schedule_eventを1秒に一回/1分に一回実行【Secondly/Minutely】
cron_schedulesを使うだけ
“`php
function my_cron_schedules($schedules){
if(!isset($schedules[“secondly”])){
$schedules[“secondly”] = array(
‘interval’ => 1,
‘display’ => __(‘Once Secondly’));
}
if(!isset($schedules[“minutely”])){
$schedules[“minutely”] = array(
‘interval’ => MINUTE_IN_SECONDS,
‘display’ => __(‘Once Minutely’));
}
return $schedules;
}
add_filter(‘cron_schedules’,’my_cron_schedules’);wp_schedule_event( time(), ‘secondly’, ‘my_secondly_event’);
“`
【Laravel9】ChatGPTのAPIを利用する方法
Laravel9でChatGPTのAPIを利用する際に必要な設定を書いていきます。
#### 1.PHPのバージョンを確認
“`bash
$ php -v
PHP 8.2.9 (cli) (built: Aug 24 2023 20:33:12) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.9, Copyright (c) Zend Technologies
“`
ChatGPTのAPIでは、PHP8.1.0以上が必須になります。#### 2.composer requireを実行
“`bash
$ composer require openai-php/laravel
“`
PHPのバージョンが足りないと、ここでエラーが出ます。
途中で
“Do you trust “php-http/discovery” to execute code and wish to enable it now? ”
と聞かれることがありますが、yesを選択して大丈夫です。#### 3.configを作成
“`bash
php a
Laravelで論理削除を実装してみる
## はじめに
一般的な削除である物理削除ではなく、今回はDBに残しながらも削除扱いとなる論理削除(SoftDelete)を実装していく。
物理削除してしまうと貴重なデータが完全に消えてしまうが、論理削除だと必要なコマンドを打てば取り出すことができるため分析時に役に立つ。## 論理削除の手順
### ①マイグレーションファイルを修正し、`deleted_at`カラムを追加する
下記コマンドでマイグレーションファイルが新たに作成される。
“`terminal
php artisan make:migration add_deleted_at_to_subscriptions_table –table=subscriptions
“`作成されたマイグレーションファイルを開き、下記のように加筆する。
`nullable()`はnullを許容しているため、必ず登録する必要がない場合はつけてあげる。
“`php
public function up()
{
Schema::table(‘subscriptions’, function (Blueprint $table)
セキュリティ問題と解決方法-その1
# この記事を書いた理由
コーディングテストでセキュリティに関する問題が出題されて、改めてどういったものなのか調べ、対処法も含めて備忘録として残します。# 目次
1. CSRFとは
2. PHP(Laravel)で防止する方法は?## CSRFとは?
クロスサイトリクエストフォージェリと言い、
Webアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のことを指します。
掲示板や問い合わせフォームなどを処理するWebアプリケーションが、本来拒否すべき他サイトからのリクエストを受信し処理してしまいます。攻撃者が攻撃用にサイトを作成しユーザーがアクセスするように誘導し、アクセスすると不正なリクエストが攻撃者が対象にしているサーバーに送られます。
意図していないリクエストを処理するため、ユーザーの意図とは違う処理が行われます。不正な書き込みや、大量の書き込みを使用したDos攻撃などが当てはまります。
※Dos攻撃とDDos攻撃があるので違いを簡単に記載します
・DoS攻撃とは、1台のコンピューターから攻撃をしてくるサイバー攻撃です。
・DDoS攻撃は、複数
「パスワードがペッパー付きハッシュ値で保存されているサイトのSQLインジェクションによる認証回避の練習問題」をちょっと考える
# 前置き
https://qiita.com/ockeghem/items/0f3b09a0f413bdd39bd5まだ問題を見てない方は上にあるのでどうぞ
# 本題
### フォームの確認
多分ツールを使えばわかることなのでソースを確認してログイン画面以外ではprepareメソッドを使ってることを確認しました。### SQLの解析
・アカウント作成
newuser.phpでアカウントを作成すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/43cd7311-fdd7-e697-c634-6bc7f893a988.png)
とシンプルな表示。ですがここで同一メルアドでもう一度作成すると![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557059/45d6aecc-9759-a273-28e3-3177c5669866.png)
となりテーブル名が判明。多分UN
telescopeの導入とERROR There are no commands defined in the “telescope” namespace.
## LaravelにTelescopeを導入したい。
https://laravel.com/docs/9.x/telescope
基本的にこの通りにやればいいのだが、記載されていないエラーがでた。## 手順
いつも通りに、/var/www に移動。
“`PHP:Laravel
composer require laravel/telescope –dev
“`
“`PHP:Laravel
php artisan telescope:install
“`
// ここでエラーでる
ERROR There are no commands defined in the “telescope” namespace.ので
config/app.phpの’providersに下記を追加“`PHP:config/app.php
‘providers’ => [
// ・・・
Laravel\Telescope\TelescopeServiceProvider::class,
]
“`その後、再度
“`PHP:Laravel
php artisan telesc
PHP7に PDF Haru拡張をインストール
pecl で PDF Haru拡張機能を PHP7 にインストールしようとすると、PHPバージョンが対応外であるため失敗します。
“`shell:PHP Extention haru Install
>pecl install haru
pecl/haru requires PHP (version >= 5.1.3, version <= 6.0.0, excluded versions: 6.0.0), installed version is 7.4.15 No valid packages found install failed ``` そこで libharu と PHP7に対応した haru拡張をソースからビルドしてインストールします。 ## 必須ライブラリ/プログラムのインストール ソース取得には wget, git、libharu ビルドには cmake, zlib, libpgn, haru拡張には php-devel,libtool が必要です。 ```shell:Install requisite modules and programs >apt
Windowsのローカル環境でLaravelのGoogleログインにアカウント切り替えを実装してみた話
# はじめに
うわっ…私の記事、タイトル長すぎ…?
と思わなくもなかったのですが、↓の続編ということがわかりやすいようにしました。https://qiita.com/fsd-yamagen/items/fa819d9c55a76ff0ce03
前回、LaravelのSocialiteを使ってGoogleのソーシャルログインが実装できたので、今回はログアウト→別アカウントでログインという処理を実装したら、思ったより苦労したという備忘録です。
環境やソースコードは前回のものを使っています。
# ログアウト処理の実装
まずは以下のように実装してみました。**resources\views\welcome.blade.php**
好きな場所に以下のログアウト用リンクを設置“`PHP
@auth
logout
@endauth
“`
**routes\web.php**
末尾に以下を追記“`PHP
Route::get(‘/logout’, [GoogleLoginController::class,
WordPress にユーザ名・パスワードなしでダブルクリックだけでログインする
WP本体をいぢる必要はなく、 生PHP (?) , 生Javascript (?) だけで書いた以下のPHPをWP直下におくだけです。
以下のPHPファイル(xxx.php)を、WP直下におきます。
https:// site //xxx.php?yyyyyy=zzzzzzz のショートカットリンク を作っておけば、すぐにログインできます。
セキュリティ上の問題はありますが、 xxx, yyy, zzz を超長く、複雑にしておけば、多少はマシかと。
自己責任でお願いします。メリットは不要になったら、このPHPファイルを削除するだけでよく、WP本体ファイルには手を入れないでよいということです。
“`php
戻り値returnは何のためにあるの?
# 初学者向け|戻り値returnについて
whileを使ったループ処理を書くとき、必ず出てくるのが戻り値”return”。
リターンは **「関数が行った仕事の結果」** を教えてくれるものです。
と言っても意味わかんないですよね。
# 3つの目的
設計にもよりますが、平たく言えば、次の目的で使われることが多いです。#### 1、答えを教えてくれる
例:「2 + 3は何?」と聞いた時の「5」という答え。#### 2、情報を教えてくれる
例:「今日の天気は?」と聞いた時の「晴れ」という答え。#### 3、うまくいったか、ダメだったかを教えてくれる
例:ゲームで宝箱を開けるとき、「鍵が必要だよ」というメッセージが表示される場合。これは「ダメだった」という結果の一種です。いずれも、 **答えを表示してくれないと何もわかりませんよね。**
# まとめ
要するに、関数の戻り値は、私たちが関数に頼んだ仕事の結果や答えを教えてくれるものなのです。