PHP関連のことを調べてみた2021年07月14日

PHP関連のことを調べてみた2021年07月14日

[php]毎月の月初日の配列を、作成したいよ〜〜!

DatePriodが優秀なので、こんな感じで簡単に取得できます。
日毎の配列も作成できますし、範囲の指定方法もDatetimeを操作するだけなので、便利ですね!

“`php:qiita.php
$datePeriod = (new DatePeriod(
new DateTime(‘2021/01/01’),
new DateInterval(‘P1M’),
new DateTime(‘2022/01/01’),
));

foreach ($datePeriod as $dt) {
echo $dt->format(‘Y/m’).”\n”;
}
//出力結果
//2021/01
//2021/02
//2021/03
//2021/04
//2021/05
//2021/06
//2021/07
//2021/08
//2021/09
//2021/10
//2021/11
//2021/12
“`

参考

https://www.php.net/manual/ja/class.dateperiod.php

元記事を表示

XSS問題(攻撃)の対処法について

XSS問題(攻撃)について、備忘録としてまとめていこうと思います。

#XSS問題(攻撃)とは
XSS(クロスサイトスクリプティング)問題(攻撃)とは、アプリケーション製作者の意図とは別に第三者がJavaScriptコードを埋め込むことで、リンクへのクリックなどによるページ遷移等のコードが読み込まれたタイミングで、保存のCookieを取得させることにより個人情報が漏洩する問題のことを指します。安全性の低いWebサイト等で別ページへ遷移する際に全く関係のない偽ページへ飛ぶ、個人情報が抜き取られるなどは、このXSSによる攻撃であるケースが1つとして考えられ、アプリケーション制作の際に最も対処が必要な問題の1つです。

#解決策
###1,エスケープする
HTML特殊文字( < , > , ” など)を実体参照(HTML エンティティ)に置換することをエスケープと言います。
このエスケープをするためには、htmlspecialchars関数を使います。

“`
function h($str) {
$message = htmlspecialchars($str, ENT_QU

元記事を表示

laravel 検索機能

laravelの検索機能を作成したのでアウトプットしていこうと思います。

#画面
商品名:あいまい検索
商品カテゴリー:プルダウン検索
![スクリーンショット 2021-07-11 22.37.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700700/7b1ea3bb-3632-bdca-3c7a-1e3a03098bc1.png)

入力保持:検索した値が残る
![スクリーンショット 2021-07-11 22.38.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700700/73b6e1e5-6ba5-3e9b-f931-b5b8fcfb890e.png)

#実装
###▪️View
“`php:views/product/search.blade.php

元記事を表示

facebookアカウントを使ったソーシャルログインを実装してみる。

## Index
* [初めに](#初めに)
* [必要条件](#必要条件)
* [構築手順](#構築手順)
* [facebook側の設定](#facebook側の設定)
* [連携アプリ側の設定](#連携アプリ側の設定)
* [動かしてみる](#動かしてみる)

## 初めに
ソーシャルログインが最低限動く環境を作ってみました。
シンプルな造りなので概要は理解しやすいかと思います。

でも、セキュリティを担保できるほどの試験はしてなし、
実際に商用でのサービス提供もしていないので、これをそのまま商用で使うのはちょっと心許ないです。
また、商用でアプリを公開するためにはfacebookにアプリをレビューしてもらう必要があるみたいです。

ちなみに[googleアカウントを使ったソーシャルログイン環境の構築手順](https://qiita.com/yamori4/items/b1763825b64c2b5b3037)もまとめてますので、
興味のある方はそちらもどうぞ。

## 必要条件
* Facebook for Developersを利用できるアカウント(事前に作

元記事を表示

Bladeが使いたかったのでお絵かき掲示板作った

## お絵描き掲示板だぞ

ちょっと前までPOTI-board改二を管理してたさこつです。忙しいしめんどくさいのでやめました。

## BladeとSQLite

せっかくなのでつくりました。[ROIS](https://github.com/sakots/ROIS)

[PaintBBS NEO](https://github.com/funige/neo/)を使うために作ってます。

おい、有識者!! これ脆弱性とかあったらおしえてください!!!!!

## 今後

レンダリング部分を全部Reactとかにしてもいいかなーとかおもいました。

元記事を表示

PHPで第n〇曜日

業務で「第1月曜日」や「第3水曜日」等の日付型を扱いたくなったので、PHPでどう書くのか調べてみました。

# DateTimeの場合
ドキュメントの[相対的な書式](https://www.php.net/manual/ja/datetime.formats.relative.php)に、Datetimeが理解できるフォーマットの一覧があります。
これらを組み合わせることによって自然言語っぽく第n〇曜日を実現できます。

“`php
format(‘Y-m-d’); // 2025-01-06

// 今月の第2土曜日
$dt2 = new DateTime(‘second Saturday of this month’);
echo $dt2->format(‘Y-m-d’); // 2021-07-10

// 来月の第4火曜日
$dt3 = new DateTime(‘forth Tuesday of next

元記事を表示

ksnctf #12 Hypertext Preprocessor

#Hypertext Preprocessor
https://ksnctf.sweetduet.info/problem/12
phpに関する問題.

問題にはURLがあり取り合ず開いてみると以下のような数字が羅列されたサイトが表示された.
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1182752/67278297-357f-6e2c-c7d6-0de9774a895f.png)

サイト更新すると右の6個の数字が変化していた.20:21が2021年,07:12が現在の日(7月12日)を表していていると思われるが,それ以降の数字は現在の時間(17時19分)ではないため時間ではない.ランダムな値っぽい.

左の2012:1823がよくわからないので調べてみる.
CVE-2012-1823という脆弱性があるよう.CVEとはCommon Vulnerabilities and Exposuresの略で脆弱性の情報を集めたデータベーで,そのデータベースの2012:1823というものが今回

元記事を表示

GCP f1-microでPHPを導入しようとしたらメモリ不足でKilledされた話

#簡潔に
f1-microだとメモリ不足のようです、g1-smallにアップグレードしたら導入できました。
#詳しく
f1-microのメモリ0.6GBではPHPインストール時の負荷に耐えられないようです、
g1-smallのメモリ1.7GBであれば何の問題もなくインストールすることができました。

Linux上のOOMKillerという機能がメモリが枯渇しそうになるとプロセスをKillしてくれるようです。

メモリ使用量をモニタリングするサービスを導入していないのでメモリ使用量を確認することはできませんが、メモリ増量で解決したのでこれが原因だと思って間違いないと思います。
CPU使用料から見ても明らかにf1-microではオーバーワークだったことがわかります。
![f1micro-g1small-compare.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531208/48a034b0-e234-2e0f-3ffb-090c70d2fe6d.png)

##料金

参考までに料金を比較すると
f1-

元記事を表示

Symbol ‘$変数’ is declared but not used. include や require でファイルを読み込んだ時

##状況

共通するHTML部分や関数を別ファイルにしてinclude や require でファイルを読み込んだ時(リファクタリング)に、別ファイル内で使っている変数に対して`Symbol ‘$変数’ is declared but not used.`という記述が出てきた。

>Symbol ‘$変数’ is declared but not used.
↓日本語訳
シンボル ‘$変数’が宣言されていますが、使用されていません

###原因

ユーザー定義の関数の中では変数の有効範囲はローカル関数の中となる。関数の中で使用された変数はデフォルトで有効範囲が関数内部に制限される。
PHP では、グローバル変数は、関数の内部で使用する場合、**関数の内部でグローバルとして宣言する必要がある**。

今回の場合、別ファイルの中で関数を定義したりして、変数のスコープが及ばなくなることが原因だと思われる。

###対処法
PHP では、グローバル変数は、関数の内部で使用する場合、関数の内部でグローバルとして宣言する必要がある。

>変数の宣言
  **global $変数名;**

“`p

元記事を表示

【Laravel】Sortableを使用して簡単にソート機能を実装

## はじめに
データ一覧画面でソート機能を付けたいなぁ。
よし、JavaScriptを使ってごそごそして~…ってめちゃくちゃ面倒!!
ってことがあったので、ソート機能が簡単に実装できるパッケージを紹介します。
## 開発環境
OS Windows10
PHP 7.4.7
Laravel 8.45.1
## 事前準備
先ずはcomposerから、今回使用する「kyslik/column-sortable」のパッケージを追加します。
“`$ composer require kyslik/column-sortable“`
##開発
大まかなフローとして、
①ModelにSortableを宣言
②ControllerでDBからデータを取得
③Viewで表示
となります。

###①ModelにSortableを宣言
対象のModelにSortableをuse宣言します。

“`php:Models/Post.php

元記事を表示

PHP 定義済み定数 DIRECTORY_SEPARATOR 個人メモ

# 目的

– 定義済み定数である`DIRECTORY_SEPARATOR`の存在を初めて知ったのでメモ的にまとめておく

# DIRECTORY_SEPARATORは名前通りディレクトリの区切り文字が格納されている定数

– 下記のように記載して実行してみる。

“`php
echo DIRECTORY_SEPARATOR;
“`

– ~~`\`が出力された。~~
– `/`が出力された。
– ~~この定義済み定数はOSによって`¥`を返したり`\`を返したりするらしい。~~
– この定義済み定数はOSによって`/`を返したり`\`を返したりするらしい。
– linux系環境だと`/`を、windows環境だと`\`を返すようだ。

元記事を表示

input type=”checkbox”で複数チェックすると最後の値しか表示されない

##現象
3つのチェックボックスを作り、複数チェックしてデータを送信すると、最後にチェックした値しか表示されない。(1つのみチェックしているときは正しく表示される。)

||例1 |例2 |例3 |例4|
|—|—|—|—|—|
|user1|✅ |✅ | |✅|
|user2|✅ | |✅ |✅|
|user3| |✅ |✅ |✅|
|結果|user2のみ |user3のみ |user3のみ |user3のみ|

##上手くいかなかったコード
“`html:form.html


元記事を表示

プログラミング初心者が書いたMVCモデルについて

はじめに
——-
現在私はPHPとLaravelを学んでいるのですが、そのLaravelの中で重要となってくるのが
「MVCモデル」と呼ばれる考え方です。

拙いですが自分の備忘録として他の方の記事などを参考にしながら
下記に「MVCモデル」の特徴を書いていきたいと思います。

MVCモデルとは
——
Model、View、Controllerの3つの役割に分割してコーディングを行うモデルのことです。
今回はRouterの説明も一緒に書いてみたいと思います。

・Model
→主にDBを操作する役割を持っています。
 具体的にはデータをDBへ保存、DBからデータを取得、DBのデータの更新や削除を行います。
 DBの編集・管理をするときに使うのが「マイグレーション」になるのですが、まだ理解が追いついていないので割愛します。

・View
→ユーザーが実際に見る画面を表示する役割を持っています。
 Controllerから受け取ったデータ(レスポンス)を画面に表示したり、ユーザーからのリクエストをControllerへ送信したりします。

・Controller
→Mode

元記事を表示

PHP8.1でenumが使えるようになる!

# PHP8.1からenumが使えるようになります
PHP8.1は2021年11月25日リリース予定です。
追加される新機能は以下を参考
https://stitcher.io/blog/new-in-php-81
その中で注目の一つはenumが追加されることかなと思います。

# 実際にどんな感じに使えるのか?

## enumの宣言
まずは以下のようにenumを宣言します。

“`php
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}
“`
## 宣言したenumを利用する
以下のようにコンストラクターでenumを引数として利用します。

“`php
class BlogPost
{
public function __construct(
public Status $status,
) {}
}
“`

先ほど作成したBlogPostのインスタンスを作成します。
この際に、作成したenumのStatusを引数として与えます。
`Status::

元記事を表示

【PHP8.1】読めるけど書けないプロパティが作れるようになる

`新潟`←ちょっとこれを読んでみてください。

読めましたね。

ではちょっと画面から目を離して、`niigata`←これを漢字で書いてみてください。

8割くらいの人は書けなかったんじゃないかなと思います。

ということで、`読めるけど書けない漢字`になぞらえて、`読めるけど書けないプロパティ`は[新潟アクセス修飾子](https://www.google.com/search?q=%E6%96%B0%E6%BD%9F%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E4%BF%AE%E9%A3%BE%E5%AD%90)と呼ばれています。

“`php
echo $object->property; // できる
$object->property = 1; // できない
“`

もちろんこの呼称はネタですが、でも実際protectedやprivateを使う理由の98%は『読まれてもいいけど書き込ませたくない』だけじゃないですか。
そのためだけにいちいち値を出し入れするだけの`setter/getter`を作ったり`__set/__get`あたりでな

元記事を表示

PHP serverで「Not Found The requested resource / was not found on this server. 」が出たときの対処法

VSCodeで、PHP serverを使用して
ローカルホストでPHPファイルを確認しようとしたところ、
下記のような画面になりました。

![スクリーンショット 2021-07-12 18.25.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/952495/9b25f47d-e594-37e9-f02f-f492517bce11.png)

「Not Found The requested resource / was not found on this server. 」
と出ています。

コンソールを見てみると、
「Failed to listen on localhost:3000 (reason: Address already in use)」
というエラーが出ていました。

##前回きちんとstop serverせず終了したのが原因

前回何らかのPHPファイルをローカルホストで確認したのを
きちんとプロセス終了せずに終わってしまったのが原因でした。
今立ち上げているPHPを終了

元記事を表示

【PHP】strpos関数で文字列が特定の文字を含んでないか調べるときの注意点

##はじめに
strpos関数使って文字列のチェックを行う際に、想定外の挙動になって少しあせったので自戒の念を込めて記事にします。PHPあるあるな内容だと思います。

##strpos関数について簡単に
strposは文字列内の部分文字列が最初に現れる場所を見つけることができます。

もう少し詳しく説明すると、
文字列の中に特定の文字が含まれている場合はその位置の数値
含まれていない場合はfalse
を返します。

公式マニュアル:[PHP: strpos – Manual ](https://www.php.net/manual/ja/function.strpos.php)
※ちなみに本記事の以降の内容はマニュアル内でしっかり言及されていました。みんな、しっかりマニュアル読もうね。

##注意点
– strposを使って、特定の文字を含んでないかをチェックする場合は厳密比較を使う。

厳密比較とは===を使った比較のことです。

反対に、曖昧比較は==を使った比較のことです。
また、`if (!strpos($string ,$findme))`のような書き方も曖昧比較になります。

元記事を表示

Laravel バッチ処理の実行

#プログラムからのバッチ処理実行

Laravel ではバッチ処理を artisan を使用して実行する事が出来ます。
具体的には**cronに実行コマンドを登録する**、**プログラムから実行する**、という方法があるのでこれらのやり方を記します。
※バッチプログラムの追加から登録、実行まで

##バッチ処理プログラムの追加
まずはバッチ処理を記述するファイル(PHPファイル)を以下のコマンドで作成します。

“`
$ php artisan make:command BatchTest
Console command created successfully.
“`

実行すると ./app/Console/Commands/ 配下に BatchTest,php が作成されます。

“`
ls -la ./app/Console/Commands/
-rw-rw-r– 1 vagrant vagrant 675 7月 12 11:55 BatchTest.php
“`

出来上がったファイルを開いてみます

“`php:BatchTest.php

元記事を表示

PHPで超ミニマムjson-serverもどきを作る

[JSON Server](https://github.com/typicode/json-server)と同等の機能でPHP環境で動く物を探していたけど、結局「使う機能に絞って自分で作っちゃえ」ってなったという記事です。
さくらのレンタルサーバ ライトプラン(PHP7.4)で動作確認しました。

# 対象の読者
– APIでJSONを返すモック環境を手軽に構築したい
– PHPが動くサーバがある
– ComposerやNode.jsを使えない

# JSON Server とは
[JSON Server](https://github.com/typicode/json-server)はAPIのモックです。
モックなので本番利用するものではありません。
公式にも、`(略)who need a quick back-end for prototyping and mocking.` とあります。

https://github.com/typicode/json-server

日本語の記事でざっと特徴を掴みたかったので、こちら↓の記事も参考にしました。

https://www.w

元記事を表示

OTHERカテゴリの最新記事