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

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

Macに最初から入っているPHPではintlモジュールが有効化されていないくて少し詰まった話

# TL;DR
– Macのローカル環境でPHPUnit走らせるぜー
– PHP Fatal error: You must enable the intl extension と怒られた
– intlモジュールはPHP5.3.0以降のPHPに同梱されているので有効化すればok
– https://www.php.net/manual/ja/intl.installation.php
– MacデフォルトのPHPではintlモジュールは有効化されていない
– “` php -m|grep intl “` で確認した
– HomebrewのPHPはintlモジュールが有効化されている状態でインストールされるとのこと。今回はこちらを使用することにした
– “` brew search php “` で確認。php@7.4があるのでそちらをインストールする
– 余談。Homebrew版PHPのバージョン切り替えは “` brew link php@7.x “`でできます

# Homebrew版PHPのインストール

##

元記事を表示

CakePHP4 の開発環境をDockerを使って構築する

## はじめに

CakePHPの勉強を始めて1日目の初学者です。
CakePHP的におかしいところがあればご指摘いただけると嬉しいです。

## やること

Docker Composeを使って、php-fpm(アプリケーションサーバ)、nginx(ウェブサーバ)、MySQL(データベースサーバー)のDockerコンテナを構築してCakePHP4の環境を作成します。

今回はCakePHP4のウェルカム画面が表示されるまでをゴールとします。

## CakePHPとは

https://cakephp.org/jp

PHPのフレームワーク。

## Macの環境

“`
$ git –version
git version 2.27.0
$ docker -v
Docker version 19.03.8, build afacb8b
$ docker-compose -v
docker-compose version 1.25.5, build 8a1c60f6
“`

## 実際のソースコード

– [https://github.com/ucan-lab/docker-

元記事を表示

Virionを使ってプラグインを開発してみる

※この記事ではVirionを使ったプラグイン開発について解説しています。
Virion自体を作成する方法については解説していません。
ある程度の英語力と基礎知識がある方は、こちらを見た方が早いかもしれません。
[参考リンク](#参考リンク)

# そもそもVirionとは?
主にPMMPプラグインで使用されるライブラリのフレームワークです。
PHPで使われるcomposerのPMMP版に近いです。
ライブラリをVirion(和訳するとウイルスのような意味)として考えます。
「プラグインにウイルス(ライブラリ)を注入する」といった感じです。

# Virionを使用するメリット
従来はプラグインでライブラリ(例えばFormAPI)などを使用したいときに、利用者側で別途ライブラリプラグインを導入する必要がありました。
Virionをプラグインのpharに注入することで、そのような事をする必要がなくなります。
内部的に名前空間をシェーディングしますが、一般的なプラグインを作る上で気にすることはほとんどありません。
もちろん外部ライブラリを使用したプラグインを作る知識は必要ですが、Virion

元記事を表示

PHP ksort()の結果がおかしいことがある

`ksort()`は連想配列をキーでソートする関数ですが、並び順の規則がどうこうという以前の順序の乱れが起こることがあるようです。

条件がいまひとつはっきり分かりませんが、なんとなく

– 連想配列の各キーが半角1文字
– ‘0’をキーとする要素がある
– ある程度の要素数

辺りが関係ありそうな感じでしょうか。

**テストスクリプト**

~~~php:test.php

元記事を表示

mt_rand()をパスワード生成に利用しないようにって言ったよね?

# はじまり
あるところでmt_rand()を利用してパスワードを生成しているスクリプトを見つけたので、なぜmt_rand()を利用してはいけないのか具体的に検証してみた。

# mt_rand()を利用した脆弱なパスワード生成コード

ここではMoodleに存在していた、[CVE-2015-5267](https://jvndb.jvn.jp/ja/contents/2015/JVNDB-2015-006932.html)として報告された[脆弱なパスワード(トークン)生成コード](https://github.com/moodle/moodle/blob/MOODLE_25_STABLE/lib/moodlelib.php#L9397-L9407)を使って、問題を検証する。記号が含まれていないとかどうでもいい。

“`php
function random_string ($length=15) {
$pool = ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ’;
$pool .= ‘abcdefghijklmnopqrstuvwxyz’;
$p

元記事を表示

HTMLのformで値を渡す

# HTMLのformで値を渡す

PHPでHTMLのformタグを使って値を渡す方法。
入力側で入れた数値をもとに三角形の面積を出す簡単なプログラムを作り、
それをもとに備忘録とします。
可読性を上げるためヘッダーとフッターは分割して部分テンプレート化し、
require文で呼び出してます。

まず入力側。

“`php:container_input.php

底辺


高さ



“`

入力した底辺と高さの値を、Webサーバを介して出力側のcontainer_output.phpに
リクエス

元記事を表示

index.php





Café Progate

元記事を表示

menu.php

name = $name;
$this->price = $price;
$this->image = $image;
}

public function hello() {
echo ‘私は’.$this->name.’です’;
}

// getTaxIncludedPriceメソッドを定義してください
public function getTaxIncludedPrice(){
return floor($this->price*1.08);
}

}
?>
//税込み価格を表示する

元記事を表示

CentOS6.7にPHP5.4とMySQL5.5を入れると「libmysqlclient」が競合エラーになる件

CentOS6.7にPHP5.4とMySQL5.5を入れると以下のようなエラーが発生する。

“`
Transaction Check Error:
file /usr/lib64/mysql/libmysqlclient.so.18.0.0 from install of mysql-community-libs-5.5.62-2.el6.x86_64 conflicts with file from package compat-mysql55-5.5.55-1.el6.remi.x86_64

Error Summary
“`
これは、
 `php-mysql`
を先に入れて、後から
 `mysql-server`
を入れても

 `mysql-server`
を先に入れて、後から
 `php-mysql`
を入れても同じ。

“`
$ yum install php-mysql
“`

“`
$ yum install mysql-server
“`
この2つのインストールで競合エラーが発生する。

#解決方法

##PHPのインストール
先にPHP5.4を

元記事を表示

円卓処理のプログラミング

現在phpの学習を行なっており、なかなか解けなかったプログラムがあったのでアウトプットをこの場を借りて行う。

問題は、以下の通りである。
東京の下町に長テーブルで有名な老舗うなぎ屋がありました。

そのうなぎ屋にはとても大きい長テーブルがあり、テーブルの周りにn個の座席が配置されています。
座席には、時計回りに1, 2, …, nと番号が振られています。
座席はテーブルの周りに配置されているので、座席番号nの座席と1の座席は隣接しています。(下記図を参照の事)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/612642/51deaa77-c87f-3c8c-e21e-28813313edbd.png)

今、m個のグループの人達が座席に順番に座りに来ます。i番目(1≦i≦m)のグループの人数をa_i人とします。
彼らは、長テーブルに並んだ座席の内、ある連続するa_i個の座席に一斉に座ろうとします。

ただしお客さんは江戸っ子なので、それら座席のうち、いずれか一つでも既に先客に座られてい

元記事を表示

Windows環境でComposerインストール時にエラーが出た場合の対処法

#Windows環境でComposerインストール時にエラーが出た場合の対処法

##症状:
インストール後
composer -v を実行するとエラーが発生する。

エラー文:
[Symfony\Component\Console\Exception\RuntimeException] The “-e” option does not exist.

##対処法
CompserのInstall時に注意されている通り
一度再起動して、なにもアプリが起動していない状態でインストーラーを起動する。

原因はPHPStormを起動したままインストールしていたためと思われる。
注意書き通りにやればよかった。

元記事を表示

PHP拡張パッケージがWEBアクセスの時に利用できない

## 追加したPHPパッケージが何故か利用できない。。
AmazonLinux2のExtras Libraryを使ってApacheとPHPをパッケージインストール(yum install XXXX)した環境で何故か後から追加した拡張パッケージがWEB経由で利用できないという問題が起こりました。
CLIからPHPを実行したら普通に追加したモジュールは読み込まれているのに
WEB経由ではphpinfo()でも読み込まれていないそうな。。
Apacheの再起動してないんじゃないか。と思ったが再起動はしているとのこと

しばらく、/etc/httpd/conf.modules.dやらXXXX.soやらphp.confやらphp.ini
/usr/lib64/php/..やらなんやら確認してみるがどれもおかしいところはない。。

## php-fpm使ってた

nginxを触っている方であれば、直ぐに思いつくのではと思うのですが
普段から何も考えずパッケージインストールした環境に慣れてしまうと
気づかないもんです。。
AmazonLinux2のExtras Libraryを使って構築された環境で

元記事を表示

[備忘メモ] PHP を 5 系から 7系にアップデートする in Amazon Linux

Amazon Linux で PHP のバージョンアップをしたのでメモ。

## この手順で行けるはず

“`bash
# 5系を消して、7系をいれる
$ sudo yum -y remove php-*
$ sudo yum -y remove httpd-tools
$ sudo yum clean all
$ sudo yum -y install php73
$ sudo yum -y install php73-cli php73-common php73-fpm php73-mbstring php73-mysqlnd php73-pdo php73-gd

# 5.6 の設定を 7.3 に写す
$ diff /etc/php-fpm-7.3.d/www.conf /etc/php-fpm-5.6.d/www.conf.rpmsave
$ less /etc/php-fpm-5.6.d/www.conf.rpmsave
$ vi /etc/php-fpm-7.3.d/www.conf

# 再起動
$ sudo service php-fpm restart
$ sudo

元記事を表示

CodeIgniterでメールによるパスワード再設定機能を実装する

現時点では自分用の備忘録です。
ちょっと定時過ぎてるしさっさと帰りたいんでソースコード丸々掲載します。

現時点では、親クラスのメソッドに依存している記述が多く、
他の方が見てもなんやこれ状態だと思いますので、
そのうち、ちゃんとまとめたいと思ってます(思ってるだけ)

### 要件

* メアドとパスワードで管理画面にログインする(ログイン機能の記述は割愛します)
* パスワードを忘れた場合、専用フォームにメアドを入力することで、再設定リンクつきのメールを送信
* 再設定リンクの有効期限はメール送信から1時間以内
* 再設定ページで、新しいパスワードを入力することで、パスワードを更新、管理画面にログインする

### DB

“`sql

CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`label` varchar(255) NOT N

元記事を表示

接続元IPv4アドレスがAWS CloudFrontかを検証する方法

## はじめに

[Amazon CloudFront](https://aws.amazon.com/jp/cloudfront/)を使ってアクセスした際は接続元IPアドレスが「[X-Forwarded-For](https://ja.wikipedia.org/wiki/X-Forwarded-For)」ヘッダに格納されます。
このヘッダには複数IPアドレスが列挙されることがあり、先頭からひとつずつ検証する必要があります。
このクラスは「CloudFront IPアドレスに一致するか」を[AWS IPアドレスの範囲](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-ip-ranges.html)に基づいて検証しています。

HTTP接続用に[Guzzle](http://docs.guzzlephp.org/en/stable/)を使っていますので、必要に応じて[インストール](http://docs.guzzlephp.org/en/stable/overview.html#installation)してください。

元記事を表示

docker環境のLaravelでnpm run hotを動かしホットリロード

# Docker x Laravel x Vueを使ってHMRをやってみる

## webpack.mix.jsを編集

– プロキシはビルドインサーバのデフォルトポート8000を指定。
– ホストは0.0.0.0を指定。ホスト機からDockerコンテナにアクセスできるようにするため。

“`js:webpack.mix.js
const mix = require(‘laravel-mix’);
・・・・・・
・・・・・・
//// ここから ////
mix.webpackConfig({
devServer: {
host: ‘0.0.0.0’,
proxy: {
‘*’: ‘http://localhost:8000’
}
}
});
//// ここまで ////
・・・・・・
・・・・・・
“`

## docker-compose.ymlを編集

ホストとコンテナのポートは8080を指定。webpack-dev-serverのデフォルトポート。
ホットリロードを利用するときはこちらのポートからアクセスする。

“`yaml:

元記事を表示

Laravel 7 コマンドの実行結果に実行時間、最大使用メモリ、処理件数を出力する

どのコマンドがいつ実行されて、どのくらい実行時間がかかったのか。
実行時の処理件数や最大使用メモリを知りたかったので、試しにやってみました。

## 環境

– PHP: 7.4.x
– Laravel: 7.x

## 作成するファイルについて

– app/Console/Command.php
– app/Console/CommandResult.php
– app/Console/CommandTimer.php
– app/Console/Commands/HelloWorldCommand.php

上記の4つのファイルを作成します。

## app/Console/Command.php

[Illuminate\Console\Command](https://laravel.com/api/7.x/Illuminate/Console/Command.html) クラスを継承して `App\Console\Command` クラスを作成します。

やってることはコマンド実行前にコマンドの計測を開始して、コマンド実行後に計測結果を出力するようにしてます。

“`ph

元記事を表示

Laravelで認証付きAPIの実装をUnitテスト

– Windows 10
– PHP 7.4.5
– Laravel Framework 7.9.2

LaravelでのAPIサーバー開発において、認証つきサービスの試験をUnitテストで実装します。
JWT認証の構築や、Unitテストの準備などについては、それぞれ下記の記事をご参照ください。

– [LaravelでのJWT認証](https://qiita.com/nozaki-sankosc/items/7ed320d6549f5f92b9b9)
– [Laravelの認証でwebとapiの両方を使う](https://qiita.com/nozaki-sankosc/items/88d12602a2d6f051fd8a)
– [LaravelでのUnitテストざっくり入門](https://qiita.com/nozaki-sankosc/items/4f20a4a30e6b730ec211)
– APIサーバー:https://develop.sankosc.co.jp/apitest/

このサーバーをベースにして、認証中にアクセスできるAPI`http://localh

元記事を表示

LINE Notifyを使ってMENSAの試験に申し込む

#LINE Notifyを使ってMENSAの試験に申し込む
そのまんまです。
##概要
合格するよりも、申し込む方が難しい、と言われるMENSAの試験。(→HUNTER×HUNTER?)
現代風にプログラミングで解決する方法が、幾つかあるけど、
今回は、Line NotifyとPHPとcrontabを使う方法を紹介します。
ただし、コロナの影響で試験自体が無いので、下記の方法が実践的に使えるかは不明です。
ご了承をお願いします。

##全体の流れ
(1)PHPで該当ページをウェブスクレイピング
(2)更新されたら、Line Notifyで通知
(3)crontabで(1)と(2)を定期的に実行

##(1)PHPで該当ページをウェブスクレイピング
PHPで該当ページ https://mensa.jp/exam/ をスクレイピングします。
色々と方法があるんだろうけど、大まかな方法として、
①デスクトップなどに、ウェブスクレイピングしたページを保存しておく
②保存したページと新しくスクレイピングしたページを比較する
③保存したページとスクレイピングしたページが
→一致したらそのままにする

元記事を表示

【ABC169(C問題)】PHPで浮動小数点数の丸め誤差を回避する

##はじめに
友人の影響で競技プログラミングに参加しています。
全然解けないのですが、問題が素晴らしいので、自分のような初心者にとっても勉強になることが多いなと感じています。
最近全然C問題が解けず・・・(白目)、169回目のC問題の復習をしたので載せます。

##問題
[問題はこちら](https://atcoder.jp/contests/abc169/tasks/abc169_c)
大体の内容:A(整数)*B(少数)の小数点以下を切り捨てて表示する

簡単簡単!と↓で出してWA(不正解)でした

“`php

“`

### 0.1 や 0.7 は二進数の二進数の浮動小数点数として正確に表現できない
[PHPマニュアルサイト 浮動小数点数](https://www.php.net/manu

元記事を表示

OTHERカテゴリの最新記事