- 1. Web掲示板を作成しました(PHP)
- 2. PHP:論理型:ブール変数を使いこなさないといけない
- 3. PHP:浮動小数点同士の比較には気を付ける。単純にトリプルイコールでは誤判断する
- 4. PHP:重要:変数の運用の仕方(狭小、隣接、短命、単一目的、良名)
- 5. PHP:配列の並び替えも注意点ある。キーが消え去る関数があるので要注意
- 6. PHP:二つの配列を結合する方法大きく二つ。基本はarray_merge使用だがいくつか注意点ある
- 7. amazon linux 2にSonarQubeをインストールし、phpを静的コード解析
- 8. PHP:配列の最終要素の後にカンマを付ける場合と付けない場合(慣習的に)
- 9. 【PHP】x-server から Gmail含め、メールを送信する。
- 10. PHP:連想配列へキーと値を追加する記法には注意
- 11. PHPでカレンダー出力用の配列を生成する拡張機能 Calendarar を作った
- 12. 【未検証】PHP:declare(strict_types=1)をプロジェクト全体に適用する
- 13. PHP:改めて、型宣言も徹底する
- 14. PHPで比較を行う場合、基本的には厳密な比較であるトリプルイコールのタイプを使う
- 15. PHP:型:「コールバック」とは「関数を引数で取るための擬似的な型」
- 16. PHP:型:「リソース」:外部リソースえのリファレンスを保持しているデータ型
- 17. 【EC-CUBE4】symfony 複合検索のクエリビルダー
- 18. Docker環境のPHPでBootstrapをインストールする手順
- 19. Fedora へ引っ越しします。(Bludit,nginx,php,selinux)
- 20. PHP:バリデーションエラー時にformで入力した値を消さないようにする
Web掲示板を作成しました(PHP)
PHPで***Web掲示板***を作成しました。
実装した機能は
1.NGワードは投稿できない
2.スペースのみ、0文字はNG
です。投稿フォーム(___index.php___)
“`PHP
BBS掲示板
PHP:論理型:ブール変数を使いこなさないといけない
# 例えばif文等で比較する文字数が冗長な時に重宝する
“`php
// それぞれの文字列が冗長だと、全体でものすごく長い比較文になってしまう。
if (A >= B && A <= B && C < D) // そこで、二つに区切って、区切った部分の意味を表現する変数名の変数へそれぞれ代入すると、とても短い比較文になる。 if ($clear && $correct) ```
PHP:浮動小数点同士の比較には気を付ける。単純にトリプルイコールでは誤判断する
# 浮動小数点同士の比較をトリプルイコールで行うと、誤判断する
“`php
if ((0.2 + 0.3) === 0.5) echo ‘同じ数値’;
else echo ‘異なる数値’;
// どの小数点でも誤判定するわけではないが、この場合はelseが表示されてしまう。
“`# 正確性を求めるなら BC Math関数が良いが、消費税ならば工夫でできそう
## 消費税
1.1に100をかけて計算し、最後に100で割れば良いかも。## BC Math関数
ただ、そのままでは使用できない。
BC Mathは拡張機能のため、あらかじめ環境にインストール及び有効化されている必要あり。(例)Docker環境の場合
(Dockerfile)
“`docker
FROM php:8.0.21-apache
RUN docker-php-ext-install bcmath
“`BC Mathの有効化はphpinfoより確認することができる。
(BCMath support enabled になっていればOK)公式ドキュメント
https://www.php
PHP:重要:変数の運用の仕方(狭小、隣接、短命、単一目的、良名)
# 【狭小】スコープは最小限の範囲で
コードを把握する時間がかかる。
当然バグを生みやすくなる。# スコープ狭小のために
## 【隣接】変数を使う場所の近くで宣言する
## 【隣接】変数の参照も近くにまとめる
## 【短命】変数を使用する行数(使用期間)をできるだけ短くする
# 【単一目的】同じ変数名を異なる目的で複数回使用しない
# 【良名】良い変数名を命名する
PHP:配列の並び替えも注意点ある。キーが消え去る関数があるので要注意
# sort関数:キーが消え去り、キーは0から順番に割り振られてしまう
これがマッチする用途もあるのだろう。“`php
$arr1 = [3, 1, 2];
sort($arr1);
var_dump($arr1); // [0] => int(1) [1] => int(2) [2] => int(3)
“`“`php
$arr2 = [‘a’ => 3, ‘b’ => 1, ‘c’ => 2];
sort($arr2);
var_dump($arr2); // [0] => int(1) [1] => int(2) [2] => int(3)
“`# asort関数:キーと共に並び替えしてくれる
“`php
$arr3 = [‘a’ => 3, ‘b’ => 1, ‘c’ => 2];
sort($arr3);
var_dump($arr3); // [‘b’] => int(1) [‘c’] => int(2) [‘a’] => int(3)
“`# 結論:ケースに合わせて使い分ける
PHP:二つの配列を結合する方法大きく二つ。基本はarray_merge使用だがいくつか注意点ある
# + の場合:左辺の要素数よりも右辺の要素数が多ければ、その多い要素だけを左辺の要素の後ろに結合
“`php
$arrA1 = [‘a’, ‘b’];
$arrA2 = [‘c’, ‘d’, ‘e’];
$arrA = $arrA1 + $arrA2;
var_export($arrA);
echo PHP_EOL;
// $arrA は [‘a’, ‘b’, ‘c’, ‘e’] が入っている。
“`# array_merge の場合:「文字列ならば」想像通り順序よく結合してくれる
“`php
$arrB1 = [‘a’, ‘b’, ‘c’];
$arrB2 = [‘d’, ‘e’];
$arrB = array_merge($arrB1, $arrB2);
echo PHP_EOL;
var_export($arrB);
// $arrB は [‘a’, ‘b’, ‘c’, ‘d’, ‘e’] が入っている。
“`# しかし、array_merge はキーが数字の場合、キーが破棄される
“`php
# array_mergeの注意点
$arrC1 =
amazon linux 2にSonarQubeをインストールし、phpを静的コード解析
## 実行環境
– amazon linux 2 t2.medium
※java,esなどを動かすためある程度のスペックが必要です。
t2.micro, t2.midiumではメモリ不足ですぐにプロセスが殺害されます。。。
公式ドキュメントにはRAM3GBが最低条件と記載ありましたが、もっと必要かと。## SonarQubeとは
オープンソースの静的解析ツール
私たちの書いたコードを全自動でレビューしてくれて、エラーの可能性や脆弱性のある個所を教えてくれます
主な機能は以下のような感じ
– 重複コードの検出
– サイクロマチック数の計測
– 脆弱性のあるコードの検出
– バグを誘発しそうなコードの検出
– 指摘されたissueの管理APIなどでなく、専用のサーバにインストールして使用するためオンプレ環境などでも利用できるのも利点。
## SonarQube構成
[公式の画像]([https://docs.sonarqube.org/latest/setup-and-upgrade/install-the-server/](https://docs.sonarqub
PHP:配列の最終要素の後にカンマを付ける場合と付けない場合(慣習的に)
# 配列の最終要素の後にカンマを付ける場合
複数行に渡っている時(慣習的に)
“`php
$group = [
‘hr’,
‘sales’,
‘marketing’,
];
“`# 配列の最終要素の後にカンマを付けない場合
単一行の時(慣習的に)
“`php5
$group = [‘hr’, ‘sales’, ‘marketing’];
“`
【PHP】x-server から Gmail含め、メールを送信する。
#### 前提条件
送信先:soushin@gmail.com(記載用)
送信元(自分):test_01@xs810378.xsrv.jp(エックスサーバーメール)#### ソースコード
mail.php
“`PHP mail.php
PHP:連想配列へキーと値を追加する記法には注意
# 連想配列へキーと値を追加
$arr = array(‘a’ => 1, ‘b’ => 2, 999 => 3);
#キーと値の追加
記法に注意。配列変数にキーを書いて、その値を右辺から代入する。
微妙に覚えにくい。$arr[‘c’] = 3;
var_export($arr);
array (
‘a’ => 1,
‘b’ => 2,
999 => 3,
‘c’ => 3,
)
PHPでカレンダー出力用の配列を生成する拡張機能 Calendarar を作った
弊社サイトで、お店の営業時間を日別でカレンダー表示(週始めが日曜表示)しておりましたが、ある日デザイナーさんから「このカレンダーを月曜スタートにしてユーザーの反応を見たい」という~~困った~~素晴らしいアイディアをいただきました。
![mosaic_20230217123848.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/2849a372-5dfe-8106-ec2b-fc717897e643.png)
とは言っても日曜スタート前提でロジックを組んでいたため、それを月曜に変更するのもテストするのもしんどかったです。もし戻せと言われたらと思うとまたしんどい。
二度とこういう苦行をしたくない、日曜スタートか月曜スタートか一発で切り替えられるようにしたい…と思って作成したのがこの拡張機能です。
# Calendarar
かれんだらー
## 機能概要
開始日と終了日を設定し、その開始日から終了日までのカレンダー出力用の配列を作成する。
php7.4 以上
## g
【未検証】PHP:declare(strict_types=1)をプロジェクト全体に適用する
# declare(strict_types=1)をプロジェクト全体に適用する
https://wonwon-eater.com/php_strict_types/
strict_types=1 を一箇所に記述して完了させたかった。
静的解析ツールとVScodeを使うことで半自動化する方法が紹介されている。1.PHP-CS-Fixerをインストールする
2.PHP-CS-Fixer設定
3.VSCode設定
PHP:改めて、型宣言も徹底する
# ネット上のコードは、そのほとんどで型宣言されていない
永遠に個人開発し続けるのなら自分さえ良ければ良いかもしれないが、そうでない限り複数のエンジニアが開発に関わる。よって、型を宣言するのが当たり前である。
ネット上のコードは圧倒的に宣言しておらず、省略しているのだろうが非常に違和感を覚える。
バグ・不具合の温床になるため、型を宣言しないコードは「動くからひとまず良い」という、PHPの仕様に依存した不完全なコードと思う。
動的型付けができる仕様の言語であろうが、それに依存することはしない。
静的型付け言語を扱う思想でコーディングする。# 改めて、種類
array, bool, int, float, string, object(オブジェクト名)
union, mixed, null許容, voiddeclareしていく。
PHPで比較を行う場合、基本的には厳密な比較であるトリプルイコールのタイプを使う
# 教材やネット上の情報ではダブルイコールタイプのコードが圧倒的に多い
バグの温床になるはずなのに。省略している場合と、よくわかっていない場合が混在していると思われる。
しかし、今、改めてダブルイコールタイプは真似しないことを明確にする。# 今後は、トリプルイコールである「===」、「!===」で統一する
※例外を除いて学習中の時から徹底することである。
仕事になってプロダクションコードを扱う場面になってから徹底しようとするようでは間違いなくミスを犯す。
もっともそのような手腕ではプロダクションコードを任されることはないだろうが、何事にも隙間というものはある。
いかに安全なコーディングをするか?非常に重要。バクが発生し、最悪の場合最終的に発注者が被害を被る。
PHP:型:「コールバック」とは「関数を引数で取るための擬似的な型」
# コールバックという型とは?
関数を引数で取るための擬似的な型で、呼び出し可能な関数かをチェックする。
引数として受け取れる関数「コールバック関数」
PHP:型:「リソース」:外部リソースえのリファレンスを保持しているデータ型
# リソースとは?
外部リソースえのリファレンスを保持しているデータ型。
“`
$fileOpen = fopen(“data.txt”, “W”); // 外部ファイルを書き込む
echo getttype($fileOpen); // resource
fclose($fileOpen); // ファイルを閉じる
【EC-CUBE4】symfony 複合検索のクエリビルダー
# 初めに
私現在、EC-CUBEのカスタマイズなどをしております。
今回は、案件の中で複合検索を作る機会があり少し複雑な処理を書いたのでメモ程度に残します。## 状況
それぞれのカテゴリIDにて検索することはできるものの、赤色、3000円以下で絞るなど複合検索ができないので、実装する。
知らない人のために、EC-CUBEのカテゴリの構造はこのようになっています。
“`:カテゴリの構造
ID:1 色
ID:4 赤
ID:5 青ID:2 用途
ID:6 お出かけID:3 予算
ID:7 3000円以下
ID:8 3000円~5000円
ID:9 5000円以上
“`#### 要件
・それぞれの大きなカテゴリ別ではorwhere検索(3000円以下と5000円以上選ぶとどちらかが当てはまればヒット)
・別のカテゴリではandwhere検索(赤色の3000円以下で検索した場合どちらも満たしているもののみヒット)## 実装の内容
説明するよりコード見た方が早いと思うので載せます
“`php
class
Docker環境のPHPでBootstrapをインストールする手順
# Warpで直接コマンドでインストールする
Bootstrap本家サイトでインストールするコマンドをコピーしてDockerコードの後にコマンドを追加して実施する。https://getbootstrap.jp/docs/5.0/getting-started/download/
※URLはサイトの構成見直しで変更される可能性がある。要は「ダウンロード」のリンク先。色んな環境に合わせたインストール方法が紹介されている。
「Composer」の欄を見つける。
「Composer を使って Bootstrap の Sass と JavaScript をインストールできます。」とあり、コマンドが掲載されている。バージョンがアップデートされればバージョン名が変わっていく。
ちなみに今日は以下。
注意点!!:以下のコマンドをそのまま使ってはだめ。“`
composer require twbs/bootstrap:5.0.2
“`Dockerなので冒頭の記述を行った後で上記のコードを追記してコマンド実施する。
“`
docker-compose exec app comp
Fedora へ引っ越しします。(Bludit,nginx,php,selinux)
セキュアブートがややこしくて、セットアップモードうんたらが、イマイチわかりません。
セキュアブート&SELinux対応を、一からするのが疲れ果てそうだったので、素直に、そういうことを気にしないでいい、ディストリビューションに移りました。
ブートローダーで対応しているのは、UbuntuやFedoraは対応しているみたいです。(他にもOpenSUSEなども?)
セキュリティ機構の標準が、UbuntuがAppArmorで、FedoraはSELinuxが有効になっているみたいです。試してみたら、あのGNOMEがなんか軽い気がする。
KDEもメニューの応答性が、、、マシンが弱いせいだと思っていたが、なぜかいい感じです。
###### ↑きっとインストール直後の錯覚によるものです。ハードディスクもデータが少ないので当然、軽いです。
でも何か他に原因が、と突き詰めたくなりましたが、素直にラップトップはFedoraに住み替えることにしました。その上で、個人的なサーバーもFedoraにしてみようというところで、移行が簡単にできるか確認しました。
サーバでは、BluditというCMSを使ってい
PHP:バリデーションエラー時にformで入力した値を消さないようにする
# input textなどの場合value値を使う
## テキスト入力欄などのvalue値は「初期入力値」を表す
例
“`
>
“`