PHP関連のことを調べてみた2020年08月27日

PHP関連のことを調べてみた2020年08月27日
目次

phpinfoをコマンドラインから見る

“`
php -i
“`

元記事を表示

PHPでログローテーションの機能を実装してみた

# はじめに
必要に迫られ、PHPでログローテーション機能を作ることになりました。
できればミドルやフリーツールでサクっと設定できれば良かったのですが…。

PHP初心者なので小難しいことはせず、①保存期限を超過したバックアップファイルを削除する。②ログファイルのバックアップを取得する。の2つの処理をサクっと書くに留めました。

備忘録として残しておきます。

# ログローテーション
### PHPで実装した結果
**【前提として】**

– ログファイル名は「batch.log」
– バックアップは1日1回
– バックアップファイルはログファイル名の後ろにシステム日付が付与される
– ログ保存日数5日

“`php:log_rotate.php

元記事を表示

命日から五十回忌までの日付を取得

かなりマニアックな内容ですが、命日から中陰(七日ごと四十九日まで)、年忌(一周忌〜五十回忌)までの日付を取得する関数を作りました。

##開発環境
MAMP

##コード

“`

元記事を表示

Laravel CRUD処理を使った投稿アプリを作成する その7 問い合わせフォームの作成

# 目的

– アプリを作成する上で基本となるCRUD処理を有したLaravelアプリをチュートリアル的に作成する方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qii

元記事を表示

[PHP]ベーシック認証

test.phpを閲覧しようとすると、IDとパスワードの入力を求められるような、ベーシック認証を設定しています。

“`.htpasswd
admin:$2y$10$KzSlgR.Ze4qmJS03gAFcJO80hdKuPrZ3XAVkMHa5Wf792M0mVX/nS

//ID:パスワード の形式で書く。パスワードの後は、ENTERで改行する。

“`

“`.htaccess

AuthType Basic
AuthName “IDとパスワードを入力してください”
AuthUserFile /Applications/MAMP/htdocs/xxxxxxx/mainte/.htpasswd
require valid-user

//AuthUserFileでパスワードファイルの在り処を指定
//require valid-userで認証したユーザーのみがページに入れるようにする。require valid-userのあとはENTERで改行する。
“`

AuthNameでIDとパスワードの入

元記事を表示

【PHP】会社のルーターを触らずに、リモートマシンのデバッグを「複数人で」やる【Xdebug×DBGpProxy】

# 目的

複数の開発者が、1つのサーバー上で稼働するPHP Webアプリケーション(nginx + php-fpm)に対してデバッガー(ブレークポイント)を使えるようにすることを目指します。会社なのでルーターをいじれない、という条件付きです。

記事タイトルは
[【PHP】リモートマシンのデバッグを、「複数人で」やる【Xdebug×DBGpProxy】](https://qiita.com/takudo/items/35d2fd3c6e9846715bf4)
のパクリです。

# 図解
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31118/623e692b-87f9-10da-aebd-fa215c048c61.png)

# 前提
・ローカルマシン: Mac
・リモートマシン: Linux
・IDE: PHPStorm (2020.2)
・ブラウザ: Chrome
・サーバーにsshで接続できること(リモートポートフォワーディング用)
・会社など、ルーターのポートフォワーディング

元記事を表示

【PHP】オブジェクトと連想配列の違い

スクール時代に配列、オブジェクトの概念はそれとなく理解していたつもりでしたが、
実務の中で配列、連想配列について考える事が多く、特に【連想配列】についての理解があまりなかったので、自分向けに簡単にまとめて見た。

## オブジェクトと連想配列
これがオブジェクト。

“`PHP:index.php
class object{
public $name = “サトシ”;
public $age = 30;
}
“`
オブジェクトはオブジェクト名を書いて、 { } の中に値を入れます。
オブジェクトの中には変数や関数を書く事が出来ます。また、変数のことをプロパティと呼びます。

そして↓が連想配列ですね。

“`PHP:index.php
$array = [
“name” => “カスミ”,
“age” => 29,
];
“`

keyとvalueが => ダブルアロー演算子(ハッシュロケット)で組み合わさっています。

## オブジェクトと連想配列の使い方
“`PHP:index.php
class object{
public

元記事を表示

PHPでJavaScriptのアラートを表示させる

#プログラミングの勉強日記
2020年8月26日
PHPでAlertを表示させる方法を学んだので、まとめる。

#アラートとは
 Webサイト側からメッセージが表示させる機能のこと。JSで書くことができる。このメッセージはユーザに対しての警告文。アラートを簡単に実装できるのがJSのalertになる。

#JSのalertを表示させる方法
 JSでは以下のように簡単なプログラムでアラートを表示できる。

“`js
alert(‘表示させたい文字列もしくは値’);
“`

 HTMLでは以下のように書くことでalertを表示できる。

“`html:html









“`

#PHPでJSのalertを表示させる方法
 JSはPHPとは異なる言語ではあるが、PHPからJSの操作をすることができる。具体的には、

元記事を表示

laravel 本番環境でcssが読み込まれない時 

“`
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
“`

これ全部ダメだった時

“`
composer dump-autoload
php artisan config:cache
“`

ここら辺やる前に

一回

ブラウザのリロードするとこ右クリック
https://gyazo.com/bc1562153527fb893bc1f2d9f8bedad4

キャッシュ残ってる時は項目が出るからそこからキャッシュ削除を選択してみてください

元記事を表示

LaravelでSFTPの設定を導入して、本番環境やDEV環境でSFTP通信するまでの手順について

#はじめに
CSVファイルをSFTPサーバへ連携する案件があったのでその時の導入手順メモになります。
作業の流れを整理する目的で記事を書いています。
処理環境ではPHPのLaravelフレームワークが入っている環境が用意されていたので、SFTP用の処理や設定を追加する流れになります。

なお、導入に際してはこちらの[記事](https://qiita.com/kiyoami/items/39c77696e16c07a57cad)や[サイト](https://www.ritolab.com/entry/87)を参考にしてます。

#環境について
+ Laravel:5.8
+ PHP:7.2

#導入手順

## 1.SFTPモジュールのインストール
Laravelのhomeディレクトリに移動して、`composer require`を実行してSFTPモジュールをインストールします。

“`sh
composer require league/flysystem-sftp
“`
以下のようにインストール結果が「successfully」と出てれば大丈夫です。

“`shell

U

元記事を表示

Moodle を AWS のロードバランサ(インターネットからは https だが背後では http) で運用する方法

先ずは、以下の準備をする。

証明書(ALB の ACM で発行しても良いし、自分の持っているものでも良い)
efs
ALB で、session stickiness (2時間とした)の設定をする
ところで、session stickiness を数時間とするのはあまり良くないかもしれない。
接続していたマシンが下がった時に、Gateway Timeout になる気がする。
5分に変更した。

AWS の ALB については、この辺を参考にした。
(参考)
https://recipe.kc-cloud.jp/archives/11084

httpd.conf は http で動作させる設定をする
config.php に、$CFG->sslproxy = true; と記述。こうすると、Moodle が https で動作していると思い込む(実際は http で動作させる)。
https://moodle.org/mod/forum/discuss.php?d=351002
備考参照。

Moodle をインストールしたインスタンス (moodledata を efs に、DB

元記事を表示

PHPでパスワード比較に==とか===使っちゃだめって知ってた?

PHPerの皆さん、パスワードなどの入力データと保管情報を比較するときに比較演算子(”==”とか”===”)使ってませんか?
これ実は**使っちゃだめ**なので、気をつけましょう。

## なぜだめなの?

PHPを含む多くの言語では、文字列を比較する際に内部で `strcmp()` を使います。
通常の(厳密なセキュリティを必要としない)ケースでは、比較演算子を使うことはまったく問題ありません。
パスワードなど絶対に推測されてはいけない文字列を比較する場合、**この関数は脆弱**といえます。
`strcmp()` は内部で1バイトずつ比較検証するため、応答時間をもとに先頭から何文字正解だったか推測できます。
このような攻撃を「タイミング攻撃」といいます。

## どうすればいいの?

PHPでは、ハッシュ値を用いて文字列を比較する `hash_equals()` という関数が用意されています。
関数の説明にもきちんと「Timing attack safe string comparison」と書かれています。

https://www.php.net/manual/en/functi

元記事を表示

PHP インストールからコマンドライン実行まで

# はじめに
バッチで動く簡単なプログラムをPHPで書くことになりました。
PHPで調べると、だいたいブラウザで画面表示する内容ばかりなので、コマンドラインで動かす手順を残そうと思いました。
PHPで書いたプログラムを、自分のPCで動作確認する程度の目的です。
めちゃくちゃ簡単です。

# 環境
Windows 10 Home 64ビット

# PHPインストール
このリンクからインストーラダウンロードページに行き、画面上部に表示されている「Downloads」をクリックします。
https://www.php.net/
![Screenshot_2020-08-26 PHP Hypertext Preprocessor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/210577/c7127109-5cb4-3615-cbe7-1dc1e36c2b78.png)

Current Stable PHP x.x.x が最新版のPHPになります。
古いバージョンが必要な場合は、Old Stable PHP

元記事を表示

PHPでリコメンデーションロジックを作る

Laravelで作成したアプリケーションにリコメンデーション機能を作ったときの備忘録
pythonじゃなくてもk近傍法(もどき)はできることにはできたが、pandas,numpyとか使えるPythonの方が触りやすいと思う。floatの精度問題とかもある。

# 前提
・複数の質問結果からアイテムをお勧めする
・質問はYes・No(ie, 0 or 1)
・初期データ入力可能
・実際の質問の回答結果を学習させより実態に沿ったお勧めにする
・お勧めするアイテム数がそこまで多くない(数百程度)

# 設計
1.お勧めに載せるアイテムごとに、質問結果のパターンを初期値として入力
2.回答パターンをベクトル成分([1,0,1,1,~,0])として捉える

“`php

$itemA = [1,0,1,1,1,0,~,1,0]
~
$itemN = [0,0,1,0,1,0,~,1,0]
“`
3.実回答のベクトル成分とお勧め候補アイテムのユークリッド距離を計算し、近い順に取得しリコメンド

“`php:euc_distance.php
foreach($item

元記事を表示

ある文字列から複数の文字列を検索したい~preg_matchを使ってみた

#ある文字列から複数の文字を検索したい

始めは**strstr**を使い一つの文字列だけを検索していたのですが、途中で複数の文字列を検索できるようにしたくなり、考える考える...

悩んだ結果、解決方法を考えてみたのでメモします。

**strpos**や**strstr**を使用していたのですが、どうしても1つの文字列しか検索できず...
複数の文字列を検索したい場合はどうすれば良いのか試行錯誤しました。

**preg_match**を用いてみました。
**preg_match**は正規表現によるマッチングを行います。
対象の文字列に検索したい文字列があった場合(マッチした場合)1を返します。検索文字列がなかった場合は0を返します。

“`php

元記事を表示

PHP try catch finally文で例外処理を記載する

# 目的

– 例外処理の確認方法を下記にまとめる

# 実施環境

– 下記サイトで動作を確認
– [https://paiza.io/ja](https://paiza.io/ja)

# 例

– 下記に例外処理のtry catch finally文の書き方の例を記載する。

“`php
try {
//例外が発生する可能性がある処理
} catch (例外クラス名 例外クラスの戻り値を受け取る変数名) {
//「例外が発生する可能性のある処理」が例外となった時に実行される処理
} finally {
//例外に関係なく実行される処理
}
“`

# 参考文献

– [https://www.php.net/manual/ja/class.exception.php](https://www.php.net/manual/ja/class.exception.php)
– [https://www.php.net/manual/ja/class.throwable.php]

元記事を表示

【PHP】文字化け文字を含むマルチバイト(全角スペース等)対応のtrim処理

# 概要
PHPで全角のトリムを行う必要があった。ただトリムを行う文字列に文字化け文字が含まれていると 他の trimの記事の方法だときちんと動かなかった。

最初
https://qiita.com/fallout/items/a13cebb07015d421fde3
この記事を参考にして、全角トリムを行ってみたが、
‘ 町 いなぎ ’のような文字化け文字が含まれていると、
‘福井 ’が’福井’のように文字化け文字まで削除されてしまった。

# 自分で考えてみたが 美しく作れなかった

結局ループを回して全角と半角スペースを取り除いたが、きれいなコードを書けなかった。CsvUtilityというクラス名もイケてない。

## CsvUtility.php

“`php

class CsvUtility {
/**
* 全角トリム 文字化け対応 (なんという醜いコードであろう)
* @param string $trimString
* @return string
*/
public static function zen

元記事を表示

[データ構造]キューとスタックとリングバッファー

##キュー構造
`キュー構造`とは窓口に人々が並んで待つようなデータ構造のことである。
列の1番後ろにデータを追加して、先頭のデータから順に利用していく。
つまり、キュー構造は、最初に入れたデータを最初に使う事になる。
先入れ先出し(first in, first out)なのでFIFOと呼ばれている。
キューにデータを入れることを`Enqueue`、取り出すことを`Dequeue`と呼ぶ。

##スタック構造
`スタック構造`は、最後に入れたデータを最初に使う。
また、後入れ先出し(last in, first out)なのでLIFOと呼ばれる。
スタックにデータを入れることを`Push`、取り出すことを`Pop`という。
そして、最後に入り最初に使う、スタックの最後尾のことをスタックトップという。

##リングバッファー
`リングバッファー`とは、リング状にデータが並べられたデータ構造のことである。
つまり、データの列の先頭(トップ)と末尾(ボトム)を繋いだ輪っかのようなデータ構造である。
古いデータを最新の内容で上書きして常に一定のデータを蓄えるような時に用いられる。

元記事を表示

Laravelでログイン機能付きサイト作成 with XAMPP(3/4) ユーザー情報変更機能編

## 目標
**`Laravel`でブラウザ側からユーザー情報、テーブルのデータを変更できるようにする**

## 前回の記事
[Laravelでログイン機能付きサイト作成 with XAMPP(2/4) 認証機能の有効化編](https://qiita.com/kaitaku/items/13db4b60b7a4db6050af)

## ユーザー情報変更ページの作成
### 前準備
作りたいページを作成する前に、作業しやすいように環境を整える。

#### 大文字化の解除
現在、`css`によって小文字で入力したコードも大文字に変換して表示されている。
それを解除するには、`home.blade.php`の`