- 1. PHP セキュリティ攻撃・対策
- 2. Paiza[構造体の更新 PHP編]
- 3. Laravel 11でMariaDBがサポートutf8mb4_uca1400_ai_ci🫨🫎🫏🪽🐦⬛🪿🪼🪻🫚🫛🪭🪮🪇🪈🪯
- 4. Laravel11 アップデートが来たった!!
- 5. Laravel 11のアーティさん【php artisan make:class/enum/interface/trait】
- 6. PHPer kaigi2024 初参加してきた
- 7. 【Laravel】PHP CodeSniffer を使ってコーディングチェクをする
- 8. 【Laravel】PHPStanをGitHub上でDockerの中で実行する
- 9. Laravel Reverb 101
- 10. Laravel OctaneをDockerで動かす
- 11. Vue.js でPHPの連想配列を出力するときのたった一つのコツ
- 12. base64でエンコードした画像をデコードした後にlaravel上で正しいMIMEを取得する方法
- 13. 短縮url作成webアプリ「kari」を作成しました
- 14. MyBBをDebianにインストールする方法
- 15. Livewire\Exceptions\CorruptComponentPayloadException: Livewire encountered corrupt data when trying to hydrate the [abcdefg.index] component. Ensure that the [name, id, data] of the Livewire component wasn’t tampered with between requests.
- 16. PHPとMySQLの接続〜登録〜取得
- 17. PHP,Smartyと、jquery ui で作成。予約システム、日別照会機能 & 画面
- 18. Amazon S3上にアップロードされているファイルの存在確認は、アクセス権限が無いとできない
- 19. 【Laravel】GitHubのPush時にPHPUnitでテストする
- 20. [PHP8対応] PHP拡張モジュールを自作してBlurHashの計算を高速化する
PHP セキュリティ攻撃・対策
# ①XSS (Cross Site Scripting)
:::note info
#### 概要
– 入力フォームにJavaScriptなどのScriptを仕込むことができる
::::::note warn
#### 対策
– 各formにサニタイズの処理を行う。
– サニタイズ = 特殊な文字を別の文字に置き換えること。
消毒、無害化、エスケープとも言う。
– 関数「htmlspecialchars」を使用する
:::# ②クリックジャッキング
:::note info
#### 概要
– 通常のボタン上に、悪意のあるボタンを透明にして設置する
::::::note warn
#### 対策
– サーバーまたはPHP上に「X-FRAME-OPSIONS:DESY」を記述する
– PHPの場合は、header(’X-FRAME-OPSIONS:DESY’)を記述
:::# ③CSRF (Cross Site Request Forgeries)
:::note info
#### 概要
– シーサーフと読む
– 「formが存在するページ」をForg
Paiza[構造体の更新 PHP編]
解いたので記録として載せておく。
最適解かどうかはわからない。https://paiza.jp/works/mondai/class_primer/class_primer__change
“`PHP:result.php
$input_line = fgets(STDIN);
$users = [];
$update_list = [];
$first_line = explode(” “, $input_line);
$people_num = $first_line[0];
$update_num = $first_line[1];
$sum_line = $first_line[0] + $first_line[1];for ($i = 0; $i < $sum_line; $i++) { $s = fgets(STDIN); $s = str_replace(array("\r\n","\r","\n"), '', $s); $s = explode(" ", $s); if($people_num > $i){
Laravel 11でMariaDBがサポートutf8mb4_uca1400_ai_ci🫨🫎🫏🪽🐦⬛🪿🪼🪻🫚🫛🪭🪮🪇🪈🪯
https://laravel.com/docs/11.x/releases#mariadb
# MariaDB のサポートの改善
Laravel 11 には、MariaDB のサポートが改善されました。以前の Laravel リリースでは、Laravel の MySQL ドライバー経由で MariaDB を使用できました。ただし、Laravel 11 には、このデータベース システムにより良いデフォルトを提供する専用の MariaDB ドライバーが含まれています。
Laravel のデータベースドライバーの詳細については、[データベースのドキュメント](https://laravel.com/docs/11.x/database)を参照してください。
Laravel 11 では、専用の構成オプションを導入し、推奨される照合順序を採用することで、MariaDB との互換性を強化しています。
主な変更点:
個別の構成: MariaDB には、MySQL とは別に、カスタマイズされた設定のための独自の構成セクションが追加されました。
照合順序の更新:
MySQL のデフォルトの
Laravel11 アップデートが来たった!!
# Laravel11 アップデート
Laravel11 がリリースされたので色々な記事を参考に自分なりにまとめていきます。
ReleaseNote : https://laravel.com/docs/11.x/releases
## 前提情報
PHP8.2 以上
## スリム化された構成
> 新しいアプリケーション構造は、Laravel 開発者がすでによく知っている概念の多くを保持しながら、より無駄がなく、より現代的なエクスペリエンスを提供することを目的としています。
“`
app/
├── Http/
│ └── Controllers/
│ └── Controller.php
├── Models/
│ └── User.php
└── Providers/
└── AppServiceProvider.php
bootstrap/
├── app.php
└── providers.php
routes/
├── console.php
└── web.php
“`※今回は上記の 7 ファイルについて記述していきます。
#
Laravel 11のアーティさん【php artisan make:class/enum/interface/trait】
Laravel 11で追加されたartisanの挙動を確認しよう!
https://laravel.com/docs/11.x/releases#new-artisan-commands
# Laravel 11のインストール
Laravel 11はPHP8.2以上が必要です
“`bash
composer create-project laravel/laravel:^11.0 example-app
cd example-app
“`# php artisan make:class
“`bash
$ php artisan make:class HogeINFO Class [app/Hoge.php] created successfully.
“`“`php:example-app/app/Hoge.php
PHPer kaigi2024 初参加してきた
初めてPHPer kaigiに参加してみたので感想です。
カンファレンスというより、フェスって感じの企画&熱量でした…楽しかった…# 参加してみようと思った理由
私は主に以下動機で参加を決めました。
– 去年以前の参加レポ見て楽しそうだった
– 産休前の人脈作り(5月から産休予定で会社から1年弱離れるので、技術キャッチアップのためにPHPerと知り合いになってSNSで繋がったりしておきたかった)
– PHPコミュニティに入ってみたかった
– 雑魚ペチパーを卒業したい気持ち(7-8年くらいPHPerなのにPHPに詳しくなさすぎる:weary:)チケット代が8,000円で参加にはちょっと勇気が要りましたが、結果的に行って本当に良かったです。
# カンファレンス中
Day0はオンライン、Day1,2は現地会場参加しました。
特にPHPerの知り合いがいない状態でしたが、幸い所属会社のさくらインターネットがブースを出していたのでそこに突撃して自己紹介したりして、完全ボッチからは抜け出せました。
最初は慣れず、ブース見るのに気が取られてうっかり聞きたかったセッションに遅
【Laravel】PHP CodeSniffer を使ってコーディングチェクをする
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
今回はPHP CodeSnifferを使ってみようと思います。
https://zenn.dev/yokozawa_0701/articles/4d1816b9e5b2c9
この記事を参考に行っていきます。
# インストール
以下のコマンドで各ライブラリをインストールします。
“`
composer require –dev squizlabs/php_codesniffer
composer require slevomat/coding-standard –dev
composer require sirbrillig/phpcs-variable-analysis –dev
“`# phpcs.xmlの作成
そして、プロジェクトディレクトリ配下に`phpcs.xml`を作成します。
内容は記事で紹介されているものをそのまま使ってみます。
“`xml:phpcs.xml
【Laravel】PHPStanをGitHub上でDockerの中で実行する # はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
前回、PHPStanをGitHubActionsでGitHubにPull Requestを出した時に、テストできるようにしました。
前回の記事
https://qiita.com/keitaMax/items/46102fd5a07e7c86168c
ymlファイルでGitHubのテスト環境のPHPバージョンなどの記載をしたら、PHPバージョンアップの対応をした時に修正し忘れそうだ思ったので、
今回は、それをGitHub上でDockerを立ち上げて、PHPStanがDocker上で動くように修正したいと思います。
# GitHubActionsのymlファイルの修正
“`yml:phpstan.yml
name: LaraStan
on: [pull_request]jobs:
phpstan:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src
Laravel Reverb 101
https://reverb.laravel.com/
https://github.com/laravel/reverb
# 導入
[Laravel Reverb](https://github.com/laravel/reverb) は、超高速でスケーラブルなリアルタイム WebSocket 通信を Laravel アプリケーションに直接提供し、Laravel の既存の[イベント ブロードキャスト ツール](https://laravel.com/docs/11.x/broadcasting)スイートとのシームレスな統合を提供します。
# インストール
`install:broadcasting`Artisan コマンドを使用して Reverb をインストールできます。
“`bash
php artisan install:broadcasting
“`# 構成
バックグラウンドで`install:broadcasting`Artisan コマンドが`reverb:install`コマンドを実行し、適切なデフォルト設定オプションのセットを使用して Reverb
Laravel OctaneをDockerで動かす
### Laravel Octane
Laravel Octaneは、アプリケーションの起動後全ての処理をメモリ上にロードした状態を維持しリクエスト間で使い回すことによって、高速なアプリケーションを提供するツールです。
SwooleやOpenSwooleなどを使った非同期処理のアプリケーションサーバーに載せることができます。またApacheやNginx不要でWebサーバーを建てることができます。
https://readouble.com/laravel/9.x/ja/octane.html
そこで今回はこの「Laravel Octane」をDockerで動かしてみました。
### やってみる
ディレクトリ構成
“`
├── octane-server
│ ├── app
│ ├── bootstrap
│ …
│
└── Dockerfile
“`とりあえず公式の手順に従ってLaravelのプロジェクトを作成します。
“`shell
$ composer create-project laravel/laravel octane-ser
Vue.js でPHPの連想配列を出力するときのたった一つのコツ
# はじめに
.phpファイル上でVue.jsを動かしていて、ブラウザ上でのアクションに合わせてPHPの変数を出力したくなり、はてどうやるんだ?と調べた結果、うまくいったものを紹介します。# 問題
筆者の環境
・CDNでVue.jsを導入
・PHPファイルで、HTMLを記述
・Vue.jsのv-forディレクティブで、PHPの連想配列を出力したくなった# 解決方法
PHP標準の、json_encode関数を用いることです。
PHPの連想配列そのままでは、Vue.jsで出力することができません。
実例
“`index.php1,
“name” => ‘John’
“age” => ’15’
),
array(
“id” => 2,
“name” => ‘Mary’
“age” => ’15’
),
array(
“id” => 3,
“name” => ‘Tom’
“age” => ’16’
),
base64でエンコードした画像をデコードした後にlaravel上で正しいMIMEを取得する方法
# 遭遇した事象
クライアントからサーバーに画像ファイルをアップロードするAPIで、クライアントで画像ファイルをbase64にエンコードしてAPIのリクエストとして送信する処理がある
“`javascript
const reader = new FileReader();reader.onload = (e) => {
let base64 = e.target.result;
const requestBody = {
file: base64,
}axios.post(“/api/upload”, requestBody, {
headers: {
“Content-Type”: “application/json”,
},
})
.then((res) => {
// 事後処理
}
}
“`
これを受けてバックエンド(laravelで構築)では下記のデコード後にMIMEを調べて画像じゃなかったらエラーを返すという処理をしてい
短縮url作成webアプリ「kari」を作成しました
# 簡単な紹介
**技術スタック**
フロントエンド: HTML、CSS、JavaScript, tailwindcss
バックエンド: PHP
データベース: MySQL
を採用した**短縮url作成&url解析(ログイン時のみ)機能があるwebアプリです。**# 体験サイト
[これ](https://kariter.com)か[これ](https://potetotown.cloudfree.jp)です## 「kari」を作ったきっかけ
[kutt](https://github.com/thedevs-network/kutt)というossのものがあるけど実際phpじゃないからレンサバでホストできないよな。
あと[公式インスタンス](kutt.it)でユーザー登録ができないから実際の使い勝手が分からない。
じゃあ自分で作ろう!!っていう深夜テンションで作った。
最初は
**golang & supabase**
を使って書こうとしてたけどライブラリがなくて
**python(flask) & supabase**
で作ってたけどsupabaseより普通にmysqlあるレン
MyBBをDebianにインストールする方法
今回は MyBBをインストールする方法です。
Debian 11で動くはずです。
インストールしたてのDebianを利用してください。# Let’s do it
Apache2やcertbot, php7.4(8.1では動作しないため)とMariaDBをインストールします。
以下のコマンドを実行することで可能です。“`
sudo apt update -y
sudo apt install -y apache2
sudo rm /var/www/html/index.html
sudo apt install -y certbot python3-certbot-apache
sudo apt install -y software-properties-common python3-launchpadlib
sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update -y
sudo apt install -y php7.4
sudo apt-get install -y php7.4-cli php7.4
Livewire\Exceptions\CorruptComponentPayloadException: Livewire encountered corrupt data when trying to hydrate the [abcdefg.index] component. Ensure that the [name, id, data] of the Livewire component wasn’t tampered with between requests.
超悩まされていたこのエラー
“`
Livewire\Exceptions\CorruptComponentPayloadException: Livewire encountered corrupt data when trying to hydrate the [abcdefg.index] component.
Ensure that the [name, id, data] of the Livewire component wasn’t tampered with between requests. in file hijk.php on line 21
“`
何をやってもエラーになるので対処できずになやんでいたが、
どうもJavascriptで扱える整数を超えている値を扱った場合、出る様子。例えばこんな感じのコード。
“`
public function mount()
{
$this->datalist[2902364376262391407]=”AAAAA”;
$this->datalist[290246481
PHPとMySQLの接続〜登録〜取得
1)**mysqli_connect**
PHPからMySQLに接続する
**※SQLに接続できないケースも追加する(if文)**
“`SQL
function dbConnect()
{
$link = mysqli_connect(‘<ホスト名>”<ユーザー名>”<パスワード>”<データベース名>‘);
if(!$link) {
echo ‘Error:データベースに接続できませんでした’ . PHP_EOL;
echo ‘Debugging error:’ . mysqli_connect_error() . PHP_EOL;
exit;
}
return $link;
}$link = dbConnect();
mysqli_close($link);
“`2)**mysqli_query**
①テーブルを作成する
※エラーがあった場合、エラーメッセージを表示するよう
PHP,Smartyと、jquery ui で作成。予約システム、日別照会機能 & 画面
### ■開発環境
・RedHat 7
・PHP 7.4
・smarty 2.xxxx
・oracle 19### ■インターフェース
01
![ui_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/124358e2-37ca-6b69-83fe-abecf664abc1.png)02
![ul_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/a4f99272-c33e-2c4c-ba7e-3b70d1b070c0.png)03
![ui_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/56b895a1-e40b-b7be-37c4-940b066f52ae.png)### ■ソースコード
#### ●PHPソース
“`php
Amazon S3上にアップロードされているファイルの存在確認は、アクセス権限が無いとできない
## はじめに
この記事はLaravelアプリケーションの実装において、
Amazon S3(以下、S3と記載)にファイルがアップロードされているかをチェックしようとして、
3時間近く沼ってしまった今日の自分に捧げます。## 環境
Laravel: 8
PHP: 7.4
PC: MacOS14(Sonoma)## 結論
S3のバケットポリシーによって、S3にアップロードされているファイルへのアクセス権限がない状態だと、
LaravelのStorageクラスを使用してもファイルの存在が確認できなくなる。“`php
// ファイルへのアクセス権限がないと、結果は必ずfalse(ファイルが存在していない)になる
Storage::exists(‘S3上のファイルパス’);
“`バケットポリシー以外のアクセス権限でも、同様の影響を及ぼすかは不明。
## 経緯
S3で同じ名前のファイルが既に存在するかどうかの確認が必要だったため、以下のコードを実装しました。“`php
if (Storage::exists(‘ファイルパス’)) {
// 同じ名前のファイルが
【Laravel】GitHubのPush時にPHPUnitでテストする
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
前回の記事
https://qiita.com/keitaMax/items/1d995293f383f66b29af
今回は前回作成したPHPUnitをGitHubActionsでGitHubにPull Requestを出した時に、テストできるようにしようと思います。
# GitHubActionsのymlファイルを作成
まずはGitHubActionsを作成します。
https://zenn.dev/naonao70/articles/44bc859c3ebc37
この記事を参考に作成しました。
`.github/workflows`フォルダの中に`phpunit.yml`を作成します。
“`yaml:phpunit.yml
name: phpuniton: [pull_request]
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-direct
[PHP8対応] PHP拡張モジュールを自作してBlurHashの計算を高速化する
# BlurHashについて
https://blurha.sh/Webサイトにおける画像のプレースホルダーとして提案されているものです。画像の読み込みには時間がかかるので、読み込みが完了するまでの間に仮に表示させておく画像がプレースホルダーです。
ASCII文字30文字程度という非常に少ない情報量で保存できるので、HTMLに埋め込んでおくことも可能です。それでいて復元後の画像は色調をある程度再現しているので、クライアント側で画像を復元して表示することにより、真っ白な画像を出すよりもUXを向上できるでしょう。見た目がぼかしフィルターをかけたようなのでBlurとついています。例を示しましょう。以下の画像をBlurHashに変換し、BlurHashからプレースホルダー画像を生成したものです。この色調をASCII文字28文字で表現しています。
![sample.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204084/0e8c4960-1a01-b19d-c861-7e3c16423d1e.jpe