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

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

PHP 自動販売機ロジック

Every Qiita #13
のんびり独学初学者の毎日投稿チャレンジ 13日目
今回は・・・
自動販売機ロジックを考えたときの備忘録です。

###処理内容
お釣りを貨幣毎に何枚必要かを計算し出力します。不足の場合不足金を出力します。

“`php5
$purchase = 10000; // 支払い金額
$product = 9000; // 購入金額
function calculation($purchase, $product){
$money = [10000,5000,1000,500,100,50,10,5,1];
$change = $purchase-$product;
$result = [];
if ($change < 0) { return $change *= -1; } foreach ($money as $value) { if($change <= 0){ $result[$value] = 0; }else{ $page = floor($change/$value);

元記事を表示

【Laravel】DBから取得したCollection型の空判定

# はじめに

PHP、Laravel初学者である私だが、他の方のコードをレビューする機会があった。
そこで、Collection型と配列で空のチェックが異なることを知ったため、ここに記載する。

# 結論

Collection型と配列の空を判定する方法は以下の通り。

### ■ Collectionの空チェック

“`PHP
$collection = collect([]);
$collection->isEmpty(); // true
“`

### ■ 配列の空チェック

“`PHP
$array = [];
empty($array); // true
“`

# 詳細

Collection型は、LaravelにあるObject型の一種であり、配列のラッパーである。例えば、DBから値を複数取得した結果(クエリビルダ等を用いた際)の型がCollectionである。また、Collection型にはメソッドが存在しており、今回は、Collectionが持っているメソッドを用いて空かどうかを判定している。

### ■ 備考

因みに、今回は`isEmpty()

元記事を表示

php validation class

“`php

value = $value;
$this->error = ”;
}

}

/**
*
*/
class ValidFluent
{

public $isValid = TRUE;
public $isGroupValid = TRUE;
public $validObjs; //array of validFluentObj
private $currentObj; //pointer to current validFluentObj , set by ->name()
//default error messages
private static $error_requir

元記事を表示

PHPで処理の進捗状況を表示し、処理終了時に自動でダウンロードする処理のサンプル

## 概要

時間のかかる処理(ファイル出力やバッチ処理など)の処理状況を随時送信し使用者のストレスを軽減する。また、デバッグが簡単。

## 処理概要

1. PHPでHTMLの<head>をブラウザに送信
1. ブラウザでHTMLの<head>に記述されたスクロール処理を永久ループ開始
1. PHPの処理状況をブラウザに随時送信
1. ブラウザ側で<body>内の行が増え自動的に最新状況へスクロール
1. PHPの出力が終了するとブラウザでDOMContentLoadedが呼ばれる
1. DOMContentLoaded内にてスクロール処理の停止(フラグ)
1. DOMContentLoaded内にてダウンロード用の<a>タグをクリック
1. ファイルのダウンロードリクエストを行う
1. ブラウザのファイル保存ダイアログが表示される

## サンプルプログラムのキャプチャ

元記事を表示

PHPunitを使用しテストを行う際のエラー

##課題
phpunitを使いテストを行う際に下記のエラーが発生。

/usr/bin/php declares an invalid value for PHP_VERSION.
This breaks fundamental functionality such as version_compare().
Please use a different PHP interpreter.

##考えたこと

エラー文にて

“`
invalid value for PHP_VERSION.
“`

PHPのバージョンが無効な値
→phpのバージョンが原因ではないかと推測。

phpのバージョンを確認

“`
php -v

WARNING: PHP is not recommended
PHP is included in macOS for compatibility with legacy software.
Future versions of macOS will not include PHP.
PHP 7.3.24-(to be removed i

元記事を表示

PHP ローカルスコープ内で変数名を使い回すのはなるべくやめようと先輩から教わった

# 目的

– 先輩から教わったことをメモ的にまとめる

# ご注意

– 本ソースは他のエンジニアの方が書いてくださったものです。
– ソースの設計思想はいくつか存在し、正解はいくつもあります。
– 本記事は筆者個人の意見であり、登場人物である先輩の考えも実際とは異なる可能性があります。
– 例として記載するソースは元のものからかなり修正をしております。

# 情報

– 下記の様なソースが記載されていた。

“`php
public function foo()
{
$adminUserInfos = $this->userService->getAllAdminUserInfo();
foreach($adminUserInfos as $adminUserInfo) {
$user_id = $adminUserInfo->id;
$user_name = $adminUserInfo->name;
$this->mailService->sendM

元記事を表示

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なので?)
* 適切な関数名を募集しています。

## 動作を確認できるサイト

[やみ姐さん?の家](https://yamine1san.ddns.net/)
F5アタックすると確認できます。

## 処理概要

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

## ソースコード

### 使用方法

“`php
if (isset($_SERVER) && array_key_exists(‘RE

元記事を表示

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を利用できるアカウント(事前に作

元記事を表示

OTHERカテゴリの最新記事