- 0.1. なぜ出力時のHTMLエスケープを省略してはならないのか
- 0.2. PHPからJavaScriptにデータを受け渡すときに考えること
- 0.3. 【CakePHP】git cloneして開発環境構築
- 0.4. BLOCS で エディタ / IDE のサポートを有効にする
- 0.5. [Laravel] sail 8.1 起動時エラーで立ち上げられなかった話。
- 0.6. 【Laravel】git cloneして開発環境構築
- 0.7. 【Drupal9】Docker × DDEVでDrupalローカル開発環境構築
- 0.8. 【PHP】イミュータブルな実装って何が美味しいの?
- 0.9. 関数の呼び出し(PHP)
- 0.10. Laravelで使えるテンプレートエンジン『BLOCS』を使ってみた!
- 1. ひよっこエンジニアにはBladeがややこしい!
- 1.1. PHPでPIDが存在するかチェック【file_exists vs posix_getpgid vs is_dir vs posix_kill】
- 1.2. ページングしながら全体の表示件数をある倍数にする
- 1.3. XAMPP 8.2.0がリリースされましたん??
- 1.4. 1292 Incorrect datetime value: ‘0000-00-00 00:00:00’のエラー
- 1.5. symfony5.4のコマンドまとめ
- 1.6. Mac,PHP環境構築(MAMP)
- 1.7. but it does not match your minimum-stability.
- 1.8. Symfony4 複数DBの使用方法①
- 1.9. [LIFF] PHPとAjaxとMySQLを使った会員証アプリをつくる
- 1.10. Laravel9でFortifyを使用する
なぜ出力時のHTMLエスケープを省略してはならないのか
メリークリスマス! 週末もPHPを楽しんでますか? :santa_tone2:
ところでWebセキュリティはWebアプリケーションを公開する上で**基礎中の基礎**ですよね! :innocent:メジャーな脆弱性を作り込まないことはWeb開発においては専門技術ではなく、プロとしての基本です。
中でも**XSS** (Cross-Site Scripting)やインジェクションについての考慮は常に絶対に欠いてはならないものです。現実にはプログラミングには自動車のような運転免許制度がないため、自動車学校に通わず独学で公道に出ることができてしまいます。つまりは基礎知識がないままにWebプログラマとして就職したり、フリーランスとして案件を請けることも現実には罷り通っています。それは**一時停止標識も赤信号も知らずにタクシー営業しているようなもの**です。
このような事情により、体系的な理解のないWeb開発初心者は *(時には**n**年のキャリアを持つ人でも)* 雰囲気による曖昧な基準でHTMLエスケープをしたりしなかっ
PHPからJavaScriptにデータを受け渡すときに考えること
PHPからJavaScriptにデータを受け渡す需要は多くあるので、把握しておくべきことをまとめます。
原則としてはPHPの値をJSONに変換することです。## 仕様について
**JSON**(JavaScript Object Notation)はJavaScriptのオブジェクトとリテラル記法に由来する部分集合として定義されました。JSONの仕様は[JSON.orgの説明](https://www.json.org/json-ja.html)と[RFC 8259](https://www.rfc-editor.org/rfc/rfc8259)などで定義されています。ざっくりとした理解はWikipediaなんかを見てもらうといいでしょう。
https://ja.wikipedia.org/wiki/JavaScript_Object_Notation
## データ型
PHPとJSONは基本的には似たようなデータ型を備えていますが、細かい点で違いがあります。
| データの種類 | PHPの型名 | JSONの型名
【CakePHP】git cloneして開発環境構築
# 0. はじめに
大阪の受託開発エンジニアの、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
CakePHPプロジェクトを`git clone`して、`vendor`や`.env`,`app_local.php`ファイルを作って`bin/cake server`するまでのメモです!## 0-1. 目次
> [1.環境構築](#1-環境構築)
> [2.初期設定](#2-初期設定)
> [Reference](#reference)## 0-2. 前提条件
– Gitインストール済み
– GitHub登録済み## 0-3. 開発環境
|key|value|
|:–:|:–:|
|OS|macOS|
|FW|CakePHP|
|バーション管理|Git/GitHub|
|パッケージ管理|Composer|# 1. 環境構築
## 1-1. git clone
“`terminal:local
$ mkdir cakephp
$ cd cakephp
$ git clone https:
BLOCS で エディタ / IDE のサポートを有効にする
最近のエディタや各種 IDE においては大体入力をサポートしてくれる機能があり、少ないタイプ数で、あるいは少々うろ覚えでも書き進めることができます。
ところで BLOCS という新しいテンプレートエンジンをリリースしました。こういう時に困るのが入力のサポートを受けられないことです。そこでいくつかのエディタ / IDE で BLOCS のデータ属性を入力する際にサポートを受けれるようにスニペットやライブテンプレートを用意しました。
ちなみに BLOCS はこちらになります
https://github.com/blocs/blocs
# Sublime Text で Snippets を使う
上記リポジトリの `snippets/SublimeText/*.sublime-snippet` を以下のディレクトリに置く
[Windows]
`~\AppData\Sublime Text\Packages\User\`[Mac]
`~/Library/Application Support/Sublime Text/Packages/User/`![sublimetext
[Laravel] sail 8.1 起動時エラーで立ち上げられなかった話。
sail 8.1 でLaravelプロジェクトを立ち上げたのだが、下記エラーがでた。
“`terminal
=> ERROR [ 4/11] RUN apt-get update && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 && curl 9.3s
——
> [ 4/11] RUN apt-get update && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 && curl -sS ‘https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae526
【Laravel】git cloneして開発環境構築
# 0. はじめに
大阪の受託開発エンジニアの、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
Laravelプロジェクトを`git clone`して、`vendor`や`.env`ファイルを作って`php artisan serve`するまでのメモです!
(※初期設定は必要に応じて実施してください。)## 0-1. 目次
> [1.環境構築](#1-環境構築)
> [2.初期設定](#2-初期設定)
> [Reference](#reference)## 0-2. 前提条件
– Gitインストール済み
– GitHub登録済み## 0-3. 開発環境
|key|value|
|:–:|:–:|
|OS|macOS|
|FW|Laravel|
|バーション管理|Git/GitHub|
|パッケージ管理|Composer|# 1. 環境構築
## 1-1. git clone
“`terminal:local
$ mkdir laravel
$ cd laravel
$ git cl
【Drupal9】Docker × DDEVでDrupalローカル開発環境構築
# 0. はじめに
大阪の受託開発エンジニアの、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
『Drupal 9 Web開発ことはじめ』記載の環境構築がうまくいかなかったのでメモ。https://nextpublishing.jp/book/12999.html
## 0-1. 全体の流れ
> [1.DDEV](#1-ddev)
> [2.Drupal](#2-drupal)
> [3.appendix](#3-appendix)
> [Reference](#reference)## 0-2. 前提条件
– `Docker`インストール済み
– `Homebrew`インストール済みhttps://www.docker.com/products/docker-desktop/
https://brew.sh/index_ja
## 0-3.開発環境
|key|value|
|:–:|:–:|
|Drupal|9|
|PHP|8.1|
|Docker|20.10.21|
|Home
【PHP】イミュータブルな実装って何が美味しいの?
## はじめに
保守的性の高いコードの書き方を調べているとイミュータブルなオブジェクトに関する話題を見つけました。## 調べてみる
### (そもそも)ミュータブルとは
– mutableは、可変という意味
– インスタンス(オブジェクト)の状態を変更できるインスタンス(オブジェクト)
– 想定していない更新が起こる可能性があるためイミュータブルより安全性が低い### (本題の)イミュータブルとは
– immutableは、不変という意味
– インスタンス(オブジェクト)の状態を変更できないインスタンス(オブジェクト)
– 変数に対して再代入をすることができないため、想定していない更新を防ぐことができる。ミュータブルより安全度が高い## 書いてみる
“`Sale.php
class Sales {
private $price;public function __construct(int $price){
$this->price = $price;
}
public function getPrice(): int
関数の呼び出し(PHP)
関数の呼び出しを使ったサンプルプログラムです
“`HTML
関数テスト
Laravelで使えるテンプレートエンジン『BLOCS』を使ってみた!
エンジニア歴1年、Laravel使用歴半年程度の私が、HTMLと親和性の高いテンプレートエンジン『BLOCS』を使ってみたので、使用感をご紹介します。
ひよっこエンジニアにはBladeがややこしい!
Laravelを使っている方であれば、標準のテンプレートエンジンであるBladeを使っている方がほとんどかと思います。
経験豊富なエンジニアであれば、Bladeを不便なく使うことができるでしょう。しかし、ついこの間PHPに触れたばかりのひよっこエンジニアにとって、Bladeを使ってテンプレートを作成することは、PHPでプログラムを行うのと大差ない抵抗感を覚えることも多いのではないでしょうか。例えば、コントローラーから受け取った“`$name“`という値をそのまま表示するだけであれば、Bladeで下記のように書けばよいだけです。
“`html:example.blade.phpHello, {{$name}}.
“`
ここまでは、初心者でも簡単に理解できます。
しかし、“`$name“`がある時だけ表示したいなど、ifの条件がある時には下記
PHPでPIDが存在するかチェック【file_exists vs posix_getpgid vs is_dir vs posix_kill】
# TL;DR
`posix_getpgid($pid)`を使うのがオススメ
https://stackoverflow.com/questions/9874331/how-to-check-whether-specified-pid-is-currently-running-without-invoking-ps-from
PHPでPIDがあるか確認する方法はいくつかあるが、最速を検討する
“`php
random_int(1, $pid_max), range(1,2**20));$start = microtime(true);
ページングしながら全体の表示件数をある倍数にする
“`php
$maxPage = $lastPage = (int) ceil($totalCount / $this->getDisplayNumber());
// 1ページでおさまるときは調整しない
if (1 < $lastPage) { // 10件ずつにした際の端数 $modByTen = $totalCount % 10; // ページングした際の最終ページの件数 $modByDisplayNumber = $totalCount % $this->getDisplayNumber();// 全てのページが埋まっているときや、もとから10の倍数のときは調整しない
if (0 !== $modByDisplayNumber && 0 !== $modByTen) {
$adjust = $modByDisplayNumber – $modByTen;
XAMPP 8.2.0がリリースされましたん??
https://www.apachefriends.org/blog/new_xampp_20221229.html
こんにちはアパッチフレンズ!
PHP 8.2.0 用の Windows、Linux、および OS X 用の XAMPP の新しいバージョンをリリースしました。これらの新しいインストーラーはhttp://www.apachefriends.org/download.html からダウンロードできます。
これらのインストーラーには、次の主要コンポーネントが含まれています。
8.2.0-0
PHP 8.2.0
アパッチ 2.4.54
マリアDB 5.4.27
phpMyAdmin 5.2.0
OpenSSL 1.1.1p (Windows) および OpenSSL 1.1.1s (Linux および OS X)
PHP バージョン7.4.xは現在サポートが終了していますが、引き続きSourceForge XAMPP サイトから以前のバージョンをダウンロードできます。OS X ネイティブ インストーラには、新しい OS X M1 および M2 (ARM アーキテク
1292 Incorrect datetime value: ‘0000-00-00 00:00:00’のエラー
エラーが出て困ったのでメモです。
symfonyは自動でcreated_atやupdated_atが入らないようです。
idは入りましたが。僕のローカルのmysqlが’0000-00-00 00:00:00’を許さない設定のようでこうなったようです。
実際のプロダクトだとmysqlの設定を変えるのがよさそうですが、今回はローカルだけの勉強用なので、簡単にこうしました。
“`
[error] Migration DoctrineMigrations\Version20xxxxxxxx failed during Execution. Error: “An exception occurred while executing a query: SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: ‘0000-00-00 00:00:00’ for column ‘created_at’ at row 1”
“`“`
An exception occurred while execu
symfony5.4のコマンドまとめ
### 前提
Symfony 5.4“`console
# ローカルサーバスタート
symfony server:start# db作成
php bin/console doctrine:database:create;# Entityクラス作成
symfony console make:entity XxxxXxxxx# マイグレーションファイル作成
symfony console make:migration# マイグレーションファイルからdb定義変更
symfony console doctrine:migrations:migrate# マイグレーションファイルのどこまでやっているかを見れる
php bin/console doctrine:migrations:status# コントローラ作成
symfony console make:controller XxxXxxxController
“`
Mac,PHP環境構築(MAMP)
学校のPHPの授業でMacを使用している方が困っていたので投稿します。
学校ではXAMMPを使用していましたが、MAMPを使います。
https://www.mamp.info/en/downloads/
リンクからお使いの端末に合わせて、ダウンロードしてください。
MAMP PROは使わないので、自分は削除しています。
アプリを起動させたら、確認のためにファイルを作成名前は”check.php”中身は”
“`check.php
“`
としています。
![スクリーンショット 2022-12-30 3.19.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3085337/b9179559-d8c3-ba0a-608c-3dde7fcb7345.png)
このファイルをFinderのアプリケーションのMAMPのhtdocsの中に入れます。さっきのファイルをブラウザで表示したいと思います。
アプリの『Preferences』でポート番号を確認。
but it does not match your minimum-stability.
composer.jsonがないときは
“`bash
echo {} > composer.json
“`
“`bash
composer config minimum-stability dev
“`https://stackoverflow.com/a/65847508/5602117
エラー内容
“`bash
composer require amphp/http-client:v5.x-dev
./composer.json has been updated
Running composer update amphp/http-client
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.Problem 1
– R
Symfony4 複数DBの使用方法①
## はじめに
駆け出しエンジニア2年目のtakaと申します、symfonyの日本語ドキュメントが少なすぎて困ることが多かったので備忘録として記事にしました。
初めて書くので至らないところが多いですが同じような方の助けになれば幸いです。# 目次
1. [対象者](#対象者)
1. [環境](#環境)
1. [経緯](#経緯)
1. [結論](#結論)
1. [コード一覧](#コード一覧)
1. [解説](#解説)
1. [おわりに](#おわりに)– 駆け出しエンジニア
– プログラミング初学者
– PHP技術者(symfony4)
– DQLについて知見、使用したことがある
## 経緯
User側でログイン等の機能を有しているが、各々のDBにデータがあるためAdmin側で一括管理ができない状態だった、改善としてUser
[LIFF] PHPとAjaxとMySQLを使った会員証アプリをつくる
社内でLIFFを使ったミニアプリを開発することに(なりそう)なので、ひとまず会員バーコードの表示機能を試作しました。以下備忘録。
# 全体図
![全体図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1552742/16438d7b-79dc-be21-0ba9-b7387835db2c.jpeg)
こんな感じでLINEのuserIdと紐づけた会員データベースの会員NoをAjax経由で取ってきて
その会員Noを1次元バーコードに生成する。# LIFFにてuserIdを取得する
– LINE Developersページへログインして、Messaging APIでログイン用チャネルを作成してLIFFのIDを発行(中略)
– 表示するページをエンドポイントに設定
– 表示するページにてLIFFのIDを指定すればgetProfile()にてuserIdが取得できる
“`html:index.html