- 1. 【PHP】簡単!CSRF 対策
- 2. 【PHP初級⑩】for文応用2
- 3. 【Laravel】1番簡単なエラーメッセージの日本語化
- 4. 【Laravel】Session store not set on request.【Socialite】
- 5. 【Laravel】エラーレスポンスの統一
- 6. 【PHP】巨大なダウンロードファイル作成時にtmpファイルを作成する
- 7. Laravelの汎用的な構成を考えてみた
- 8. php imagick 背景画像を繰り返す
- 9. AWS Linux2 EC2 環境構築 MariaDB
- 10. うちの息子(2歳)が Laravel に詳しすぎる件【グローバルヘルパー編】
- 11. PHPの値渡し、参照渡しについて
- 12. 【Laravel】laravel duskインストール時のエラー解決
- 13. Laravel PHP デバッグ やり方 [検索]
- 14. PhpStormでマウスを使わずに矩形選択する方法
- 15. Laravel-admin EC2 インストール手順 2022年版
- 16. Laravelのmigrateでcould not find driverが出た時の対処法
- 17. viteを削除後、なぜか削除したはずのViteでVite manifest not foundエラーが発生し、画面表示できず
- 18. DDDで扱うValueObjectについて 初歩編
- 19. Chapter6 検索とスコープ(6-2)
- 20. Laravelで画像投稿機能の作成
【PHP】簡単!CSRF 対策
# はじめに
Laravelなどを使わず、シンプルなPHPでフォームを作る場合、csrf対策を自力で行う必要があります。
まあそんな機会は多くないかもしれませんが、覚えておいて損はない、、!
ということでやっていきましょう。入力画面、確認画面、結果画面、3画面の一般的なフォームで実装していきます。
# 入力画面
ランダムな文字列で生成したトークンを、セッションに格納します。
すでにセッションに存在する場合は、そちらを使います。“`php:entry.php
【PHP初級⑩】for文応用2
[問題] (参照:http://www.cc.kyoto-su.ac.jp/~mmina/bp1/hundredKnocksPrimary.html)
整数値を入力させ、その個数だけ*を表示するプログラムを作成せよ。入力値が0以下の値の場合は何も書かなくてよい。# コード
“`php
$m = intval(fgets(STDIN));
for($a = 1; $a <= $m; $a++){ echo '*'; } echo "\n"; ``` ↓「10」と入力 # 結果 ``` ********** ```
【Laravel】1番簡単なエラーメッセージの日本語化
## 環境
Laravel v9.5.1 (PHP v8.1.3)## やり方
上からコマンドを実行していくだけ!“`
php -r “copy(‘https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php’, ‘install-ja-lang.php’);”
php -f install-ja-lang.php
php -r “unlink(‘install-ja-lang.php’);”
“`
エラーメッセージの日本語化のやり方はさまざまあるけど、公式ドキュメントのやり方が一番簡単で安心な気がする。## 参考
https://readouble.com/laravel/9.x/ja/auth-php.html
【Laravel】Session store not set on request.【Socialite】
## 環境
Laravel v9.5.1 (PHP v8.1.3)## 状況
Socialiteを使ってGoogleログイン機能を実装し、デプロイ後“`/auth/google/redirect“`にアクセスした際下記のエラー。“`
RuntimeException
Session store not set on request.
“`“`api.php
Route::get(‘auth/google/redirect’, function () {
return Socialite::driver(‘google’)->redirect();
});Route::get(‘auth/google/callback’, [OAuthController::class, ‘authGoogleCallback’]);
“`## 解決法
“`web.php“`にルーティングを記載する。
“`Socialite“`はセッション認証なので“`api.php“`ではなくて“`web.php“`に記載しないと動かない。“`web.php
【Laravel】エラーレスポンスの統一
## 環境
Laravel v9.5.1 (PHP v8.1.3)## エラーレスポンスの統一
LaravelのデフォルトのままだとバリデーションエラーとHTTPエラーでエラーレスポンスの形が異なっているため統一する。
エラーメッセージは下記の形で返るようにしたい。“`
{
“message” => “Forbidden”
}
“`## ①Handlerに登録
HandlerにバリデーションエラーとHTTPエラーそれぞれのエラーレスポンスの処理を登録。
“`app/Exceptions/Handler.php
…
public function register()
{
$this->renderable(function (HttpException $e, $request) {
$message = $e->getMessage();switch ($e->getStatusCode()) {
case 401:
$message = __(‘Unauthorized’);
【PHP】巨大なダウンロードファイル作成時にtmpファイルを作成する
# 何故作ったのか
業務中にDBのSELECT結果を加工しcsvで出力する処理があったが、
出力されるファイルサイズが大きく、加工処理も複雑なものであった。
この処理でメモリ多く食ってしまうのではないかと思い簡単な対策として作成した。
## ソース
“`php
$filename = ‘好きなファイル名を入れてください.csv’;
//tmpファイル作成
$csvFile = tmpfile();
$metaData = stream_get_meta_data($csv);
//tmpファイルのパスを取得する
$csvpath = $metaData[‘uri’];
/*
tmpファイルに大量に書き込む処理
*/
//この例ではcsvなのでファイルによってContent-Typeを変える事
header(“Content-Type: text/csv”);
//– ウェブブラウザが独自にMIMEタイプを判断する処理を抑止する
header(“X-Content-Type-Options: nosniff”);
//tmpファイルのサイズを渡す
he
Laravelの汎用的な構成を考えてみた
## はじめに
弊社では、バックエンドにLaravelを使うことが多いです。
Laravelは非常に生産性が高いと考えてます。しかし、さらに生産性を上げるべく、モジュール構成の検討を進めています。
標準化を進めるにあたって、目的としたのは以下のものです。
– ユニットテストを楽に書きたい
– 外部サービスなどは流用しやすいようにモジュール化
– Webページ(blade)とAPIで同じロジックを共有したいこの記事は、これを目指して、試行錯誤している内容となります。
## 前提
– Laravelの機動性の高さを活かすべく、過度に凝ったモジュール構成をしない
– コーディング量が大幅に増えない範囲で検討する
– 実装には[InfyOm](https://infyom.com/)の[LaravelGenelator](https://infyom.com/open-source)を使用する前提とする
(「とりあえず動く」状態からの変更は非常に生産性が高いので)## そうしてできた構成図がこれ
(※説明のため、若干簡略化しています。)
(※あまりUMLに慣れていないので
php imagick 背景画像を繰り返す
タイトルの通り
laravel を利用。“`hoge.php
//背景画像を用意
//576 x 320
$bg = new \Imagick(public_path(‘/img/twitter-bg2.png’));// 背景画像を繰り返し描写
$x = 0;
$y = 0;
$i = 0;
$s = 0;
while($s < 50){ // リモート画像でもOK //64 x 64 で リピートさせたい画像を用意 $icon = new \Imagick(public_path('/img/bk3.png')); $bg->compositeImage($icon, $icon->getImageCompose(), $x, $y); //画像を重ねる x , y$i++;
AWS Linux2 EC2 環境構築 MariaDB
https://qiita.com/TaichiEndoh/items/e7e546cbac21aaa4e20e
研究で作成しなければいけないシステムがあり
前回作成したシステムを参考にAWS EC2に SQL も使用していきたいと思いました2022年7月14日現在
AMI AWS Linux2 の場合
実施できる環境に注意が必要だったため共有します# mySQLに相当するデータベースMariaDB
AWS Linux2 のため
mySQLに相当するデータベースとして、MariaDB
という派生データベースが採用されます# EC2インスタンスを立ち上げる
## EC2にリモートログイン
“`
ssh -i ~/(設定した)Key ec2-user@[パブリック IP]
“`## Apacheを入れる
“`
$$ sudo yum -y update
$$ sudo yum -y install httpd
$$ sudo service httpd start
$$ sudo chkconfig httpd on
“`### html ファイルあるか確
うちの息子(2歳)が Laravel に詳しすぎる件【グローバルヘルパー編】
:::note warn
前置き
本記事は, Laravel のグローバルヘルパー関数は **使い所を考えよう** という趣旨の記事です.
:::# リモートワークの朝
ワイ「ファ〜〜〜」
ワイ「今日も12時間寝てもうたわ」
ワイ「さて,業務開始や」
ワイ「今日も Laravel 書いていくで〜」“`php
use Illuminate\Support\Collection;// とりあえず心配なので作っとく
$collection = new Collection();
“`2歳息子「(PC の画面を覗き込む)」
ワイ「どうかしたん?」
息子「・・・」
# リモートワークの昼
ワイ「よーし,昼休憩3時間取ったし,そろそろ業務再開や」
ワイ「さっきの続きやけど,まずは現在時刻を取得せなあかんな」“`php
use Carbon\Carbon;// 多分現在時刻が必要になる予感がする
$now = Carbon::now();
“`息子「(また PC の画面を覗き込む)」
ワイ「な,なんやねんさっきから」
ワイ「ワイの画面にゴミでも付いとるか?
PHPの値渡し、参照渡しについて
最近学んだのでまとめます。
## 値渡しとは??
“`php
$a = 1;
$b = $a;
echo $b;
// 1
“`
僕含め、よく皆さんが使っているであろうデフォルトの変数の代入です。
想定通りの挙動ですね。
内部的には、$aの**中にある1という値を複製して**$bに渡しています。
文字通り、「値渡し」ですね。## 参照渡しとは??
“`php
$a = 1;
$b = &$a; // &を使うことで、$aを$bに参照渡しできる
$a = 2;
echo $b;
// 2
“`
あれ?$bには「1が入ってる$a」を代入してるから、$bをechoしたら1じゃないの??
しかし、2が出力されます。
これは、内部的には「**変数$aそのものを$bに渡して**」います。
(正確には、$aの参照先を$bに渡す or 変数のメモリ番地を渡すという言い回しでした)
$aを$bに参照渡しした結果、**$aの値を変えると$bの値も変わります。**
なので、$a、$bも2になってしまう仕組みです。それを踏まえて下記コード。
“`php
【Laravel】laravel duskインストール時のエラー解決
# Laravel duskインストール時にエラー発生
公式ドキュメントを見ながらLaravel duskの導入をしていたら、以下のようなエラーが発生しました。
“`plaintext
$ sail artisan dusk:install
Dusk scaffolding installed successfully.
Downloading ChromeDriver binaries…== 略 ==
file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A000126:SSL routines::unexpected eof while reading
“`実行環境は以下の通りです。
– OS : macOS Monterey
– PHP : 8.1.6
– Laravel : 9.19.0
– Laravel Dusk : 6.24.0
– Laravel Sail : 1.0.1# PHPとOpenSSLとの互換性の問題
調べてみると、[*
Laravel PHP デバッグ やり方 [検索]
こんにちは。やまゆです。
Laravel や PHP のロジックをデバッグしたい時に使える機能をリストアップしてみました。
IDE と xdebug 等を併用した高度なステップ実行デバッグなどではなく、素朴に出力する系についてまとめています。
## PHP 汎用
### echo
[PHP: echo – Manual](https://www.php.net/manual/ja/function.echo.php)
グローバル関数ではなく言語構造です。
これを書いた場所で標準出力に流れます。引数は文字列のみ可能なので、 array とか入れても Array としか表示されません。
“`php
echo [‘a’];
Warning: Array to string conversion in /in/35K9M on line 3
Array
“`まあ、あまり使うことはないでしょう。
### print_r()
[PHP: print_r – Manual](https://www.php.net/manual/ja/function.print-r)
PhpStormでマウスを使わずに矩形選択する方法
## 概要
PhpStormでマウスを使わずにキーボードのみで矩形選択する方法が検索してもあまりヒットしなかったため、備忘録として残す。## 環境
OS:Windows
PhpStormのバージョン:2022.1.3## 手順
1. Ctrlを2回押す。
2. 1.でそのままCtrlを押しっぱなしで矢印キーで矩形選択できる。
Laravel-admin EC2 インストール手順 2022年版
# Laravel-AdminをEC2にインストールする手順 2022年版
### パッケージのインストール
“`
sudo amazon-linux-extras install -y php7.4
sudo yum install -y php-xml
sudo yum install -y php-mbstring
sudo amazon-linux-extras install -y mariadb10.5
sudo yum install httpd httpd-devel
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
“`### 自動起動設定
“`
# mysql
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl is-enabled mariadb
sudo mysql_secure_installation# h
Laravelのmigrateでcould not find driverが出た時の対処法
環境
・Ubuntu 18.04
・MySQL 5.7
・PHP 7.4
・Laravel 6.7.0マイグレーションを使うために php artisan migrate:install コマンドを実行したところ、
Illuminate\Database\QueryException : could not find driver の文字が表示された。
どうやら、PHPからMySQLに接続するためのドライバが見つからないらしい。mysqlのドライバをインストールすために、下記のコマンドを実行した。(Ununtuの場合)
sudo apt install php7.4-mysqlそしてもう一度migrate:installを試したところ、成功した。
viteを削除後、なぜか削除したはずのViteでVite manifest not foundエラーが発生し、画面表示できず
viteを削除したうえでLaravel mixをダウンロードし、作成したアプリを表示させようとしたらVite manifest not foundエラーが発生してしまいました。
削除したはずのViteでエラーが発生したので、削除手順に問題なかったかを確認。
すると、
app.blade.phpとguest.blade.phpにてコメントアウトしていた、下記コードを削除してみたところ正常な挙動になりました。↓コメントアウトしていた行を削除した。
<-- @vite([‘resources/css/app.css’, ‘resources/js/app.js’]) -->“`php:app.blade.phpとguest.blade.phpに記載していた内容
DDDで扱うValueObjectについて 初歩編## ValueObjectとは
ValueObjectとは、値をオブジェクトとして扱うパターンのこと(ルールあり。後記載)## ValueObjectを扱う前に
基本データ型との比較をしていき、なぜオブジェクトして扱うと良い場合があるのかを記載
例えば**氏名を表す場合**
基本データ型の場合
“`php
オブジェクトで扱う場合
`
Chapter6 検索とスコープ(6-2)
# whereによる検索
## 複数のレコードを得る
“`sample.php
$変数 = モデルクラス :: where(*フィールド名*,*値*)->get();
“`## 最初のレコードを得る
“`sample.php
$変数 = モデルクラス :: where(*フィールド名*,*値*)->first();
“`<注意店>
上記の`where`は、ビルだクラスのインスタンスを返します。
DBクラスの`where`では、`Illuminate\Database\Query`名前空間にある
Builderクラスのインスタンスが返されました。
モデルクラスの`where`では、`Illuminate\Database\Eloquent`名前空間にある
Builderクラスのインスタンスが返されました。## nameを検索する
“`PersonController.php
Laravelで画像投稿機能の作成
## はじめに
今回はとても時間かかったLaravelでの画像投稿機能を作ったのでそちらを記事に書いていこうと思います。
調べても思ったより上手くいかなくて、3日ほど使ってしまったのでこれから導入する人の少しでも参考になれば幸いです。※1ヶ月前くらいから少しづつLaravelの勉強を始めた初心者ですので間違ってる箇所、至らない点などあると思いますが、指摘して頂けると助かります
(こちらはメモとして書いているのでフロント部分は簡易的なものになります)
ただ、コントローラーの部分はしっかり書いているので、画像を投稿して表示する機能を作成するのに少しでもお役に立てたら嬉しいです### 使用する環境
– MacOS(M1)
– PHP 8.0.19
– Laravel 9.19.0
– MySQL 8.0.29## 前提条件
laravelのプロジェクトを作成しており、認証機能(ログインや会員登録)まで作成済
リレーションは後日記事を出します### ルーティングの作成
“`web.php
Route::get(‘/input’, [ContentsController