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

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

TwitterAPI研究

##APIとは

APIとは、ソフトウェアやアプリケーションなどの一部を外部に向けて公開することにより、第三者が開発したソフトウェア機能を共有できるものです。

上記だとまだ難しいと思うので、下記サイトをご覧ください。APIとはなにかを例を交えて、イメージしやすいようにまとめてあり、とてもわかりやすいです。
__※参考__
https://wa3.i-3-i.info/word12428.html

##Twitter APIとは

ツイートやタイムラインの取得、リツイートやいいねといったTwitterサービスを、公式のウェブサイトを経由せずに直接利用できるサービスです。

例えば、ツイートやリツイート、タイムラインの取得などウェブサイトにログインしてから行うと思います。しかし、TwitterAPIを用いることで、ウェブサイトを経由しなくても、ツイートなどを取得することができます。

ここで「Twitterアプリを使っているからウェブサイトは経由しない」という方がほとんどだと思います。しかし、そのアプリこそがAPIの活用例の一つなのです。

##Twitter APIの機能

Twit

元記事を表示

PHPで連続アクセスの制限(同一のIPアドレスから等)、DoS攻撃対策、総当り対策、F5アタック対策

## 概要
* 同一の識別文字列(例:IPアドレス)から10秒間に10回あれば60秒アクセス制限をする。
* 同一の識別文字列(例:IPアドレス)から60秒間に30回あれば300秒アクセス制限をする。
* DoS攻撃対策、総当り対策、F5アタック対策としてコピペするだけで動作する。(はず。私の環境が環境がXAMPPなので?)
* 適切な関数名を募集しています。

## 処理概要

* 同一の識別文字列(例:IPアドレス)毎にデータファイルを作成
* 同一の識別文字列(例:IPアドレス)でアクセスがあるたびに現在のタイムスタンプを履歴に追加
* 履歴から10秒間のアクセス回数と60秒間のアクセス回数を取得
* 60秒間に30回あれば300秒アクセス制限
* 10秒間に10回あれば60秒アクセス制限

## ソースコード

### 使用方法

“`php
if (isset($_SERVER) && array_key_exists(‘REMOTE_ADDR’, $_SERVER) && ” !== $_SERVER[‘REMOTE_ADDR’]) {
access_is_r

元記事を表示

PHP Laravel Artisanコマンドのメモ

##はじめに

Laravelの開発で色々なArtisanコマンドがあるため、よく使用するものを、

ここにメモとして残して、追加で必要なものは更新していこうと思う

##Artisanコマンドとは
* PHPのフレームワークであるLaravelのコマンドのこと
* Artisanコマンドを使用することでModelやControllerを作成することができる

##Artisanでのコマンドリスト
“`:ターミナル
php artisan list
“`
Artisanでのコマンドのリストをターミナルに表示できる

##サーバの起動コマンド
cd コマンドでLaravelのプロジェクトがあるとこまで移動しておくこと

“`:ターミナル
php artisan serve
“`
![87f3108030716942f8db77a22d768b50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1761711/f2ee5f22-3cc9-246f-b6a4-5f72cebf4021.png)

記載

元記事を表示

【PHP】関数のnullable宣言は デフォルト値(= null)ではなくハテナ(?)を使おう

# はじめに
こんにちは。ブログいろいろいじっていたらAMPページが壊れて、いろいろ大変な事態になってしまいました、筆者です :innocent:

さて、今回は**PHP 8.0.0**から非推奨になった機能をご紹介しようと思います。

# これ見たことないですか?
というか超お世話になってますし、よく見るし、よく書いてました :sweat:

以下`test関数`使用時には、引数を渡さないで実行した場合は、デフォルト値の`null`が`$a`に代入されて処理されます。
`null`をデフォルト値とすることで、型が暗黙のうちに`nullable`であることを示しています。

“`php

元記事を表示

Larastan使ってるとControllerのメソッド戻り値未指定で怒られる has no return typehint specified

# これはなに

Larastan使ってlevelをMAXにするとControllerの戻り値が未設定で怒られる

“`terminal
Method App\Http\Controllers\ExampleController::index() has no return typehint specified.
“`

なのでそのエラーの解消法

## ControllerのメソッドでViewを返すときの戻り値

`Illuminate\View\View` を返す

“`php

元記事を表示

【Laravel】AuthenticatesUsersを用いたログインで認証失敗時のイベントをオーバライドして独自のメッセージをレスポンスする。

メモとして残します。

AuthenticatesUsersを用いたログインで認証失敗時のイベント(sendFailedLoginResponse)
をオーバライドするして独自のメッセージを設定してレスポンスする方法をメモ。

#■やり方

今回は下記のようにLockFlgを独自の認証ルールとして追加したとする。

credentialsをオーバーライド↓

“`LoginController.php
protected function credentials(Request $request)
{
$conditions = $request->only($this->username(), ‘password’);
$conditions_custom = array_merge(
$conditions,
[‘LockFlg’ => ‘0’] //ログイン条件追加:LockFlgが0であればログインできる。
);
return $conditions_custom;
}
“`

sendFailedLogi

元記事を表示

phpの環境構築 – Mac + Local by flywheel + VS Code

#まえがき

Local by flywheel(現:Local、以下Localと称します)でphpの環境構築がしたい!

MAMPとLocalの共存は今の実力では不可と判断し、
MAMPのインストールは最終手段として考えていたため、
どうしてもLocalで環境構築がしたいとうんうん唸っていました。

検索ワードのチョイスが悪いのか、LocalがWordPress専用だからか、
phpの環境構築を自身が構築したい条件で検索しても、探し出すことができませんでした。
そのため、気合いと根性でほぼ丸一日かけてphpの環境構築方法を見出しました。
これで船に乗ることができるかな、、と思います。? [わたしのQiita投稿記事] (https://qiita.com/figgy-pudding/items/8e58b99161980e4ea654)
もしかしたら、こんなんあたり前田のクラッカーやないか!かもしれませんが、
そのあたりはどうぞお許しくださいませ。。次はレオリオとクラピカに会うぞ!

#希望わがまま環境
Mac  BigSur 11.4 + Local + VS Code + php

元記事を表示

Laravel公式サイトに記載してあるNginxのconfを超絶丁寧に読み解いていく

# Laravel公式サイトに記載のNginxのconfを読み解く

元のconf内容はこちら。

https://laravel.com/docs/8.x/deployment#nginx

“`conf:conf
# アクセスログとエラーログが標準出力/標準エラー出力されるようにシンボリックリンクを張る
# Docker を利用している場合、コンテナ内で動作しているプロセスのログは
# 標準出力/標準エラー出力に出力させるのがベストプラクティスだと言われている。
#
# Dockerのコンテナログは標準出力/標準エラー出力されたものをログとして記録する
# コンテナログに全て記録することで、ログの確認が楽。ログローテートの設定が楽になる。
access_log /dev/stdout main;
error_log /dev/stderr warn;

server {
# listen リッスンするポート番号を設定。
# 80番ポートをリッスンする。デフォルト80なのでこれはなくても問題ない。
# docker-compose.ymlに記述するNgin

元記事を表示

ここ5年間でPHPを主体とした開発環境の流行を調べてみた

ここ5年間でPHPを主体とした開発環境で
[【Google trends】](https://trends.google.co.jp/trends/?geo=JP)から日本・世界でどんなのがトレンドにあるのか気になったので調べて見ました。

2021年7月14日(水) 現在

毎年更新予定

#【インフラ・クラウド】
AWS/GCP/Heroku/Azure

##日本
![インフラ-japan.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669259/1121b75c-7051-6c20-726f-9da39f31bd57.png)

##世界
![インフラ-world.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669259/ede66804-1c8b-983b-f5b4-edada5151cff.png)

#【仮想環境】
docker/vagrant/vmware

##日本
![仮想環境-japan.

元記事を表示

[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

元記事を表示

OTHERカテゴリの最新記事