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

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

Ubuntu 18.04.4 LTS、Apache/2.4.29、php 7.2.24で、HTTP/2に対応する方法

#はじめに
まず最初に理解しておくことは、
UbuntuのApacheデフォルト設定の`”prefork” MPM (Multi-Processing Module)`は、HTTP/2をサポートしていないということです。
場所: `/etc/apache2/mods-enabled/mpm_prefork.load`

したがって、単純にHTTP/2の設定をするだけでなく”prefork” MPMモジュールも別のものに切り替える必要があります。

下記がその全手順です。

# fpm版のphpインストール
デフォルトのphpが、preforkモジュールに依存しているので、fpm版のphpに切り替えます。

“`
sudo apt install php7.2-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.2-fpm
sudo a2dismod php7.2
sudo service apache2 restart
“`

# preforkモジュールからeventモジュールに切り替え
preforkモジュールをe

元記事を表示

PHPerKaigi 2020 セッション参加メモ

PHPerKaigi 2020で聞いたセッションの記録です。

# 日次・場所
* 日次: 2020-02-09 ~ 2020-02-11 (参加したのは2日目)
* 練馬区立区民・産業プラザ Coconeriホール

余談ですが、駅近くに唐苑という、大きい黒酢豚をナイフとフォークで切って食べるランチが900円ちょっとで食べられます。
お肉が柔らかくて美味しいのでおすすめ。

# E2Eテストに向き合う

## スライド

## Testing Pyramid
* 10% E2E Test
* 20% Integration Test
* 70% Unit Test

## A Software Testing By Alister Scott
下に行くほど、テストスイート数の割合が少なくなるのがベスト

* Automated Unit Tests
* Automated Component Tests
* Automated Integration Tests
* Automated A

元記事を表示

Laravelのキューを小さく使い始める

Laravelでキューを使うにはキューワーカーを立てる必要がありますが、キューワーカーのプロセス監視方法や、キューワーカーを使用しているアプリケーションのデプロイ方法を考える必要があり、結構面倒臭いです。
キューワーカーが不要な同期キュードライバもありますが、これだと非同期処理の旨味がありません。

## laravel-async-queue

https://github.com/barryvdh/laravel-async-queue

laravel-async-queueというパッケージが非同期キュードライバを提供しています。
この非同期キュードライバを使うと、ジョブをバックグラウンドプロセスで即時に実行できるようになり、キューワーカーを立てることなく非同期処理の旨味を得ることができます。

## インストール方法

なお、この記事では下記のバージョンのソフトウェアを使用しています。

| ソフトウェア | バージョン |
| — | — |
| PHP | 7.2.12 |
| Laravel | 5.5.44 |
| laravel-async-queue |

元記事を表示

PHP 三項演算子

# 目的

– 三項演算子の概要をまとめる

# 書き方の例

– 下記に三項演算子の例を記載する。

“`php
$変数 = (条件式) ? 真の時変数に格納する値 : 偽の時変数に格納する値;
“`

– 下記に前述の三項演算子をif文で書く例を記載する。

“`php
if (条件式) {
$変数 = 真の時変数に格納する値;
} else {
$変数 = 偽の時変数に格納する値;
}
“`

元記事を表示

Moodle 3.8 マニュアル – サーチエンジン最適化

[原文](https://docs.moodle.org/38/en/Search_engine_optimization)

# サーチエンジン最適化

このページはアップデートが必要です。そうしてそれが終了したらこのテンプレートを削除してください。

サーチエンジン最適化(SEO)は限定的ですがサーチエンジンの可視性と順位を向上させるためにはいくつかのステップがあります。

* サイト管理 > セキュリティ > サイトセキュリティ設定 で「Googleに公開する」を有効にする

* きれいで明白なシンプルなサイト名をつける。例えば、[組織名]E-Learning のように。

* サイトの記述を設定する(メタデータとして多くのテーマにおいて使用されます)

* コースの記述を設定する(フロントページにコースのリンクも設定する。そうでなければ記述はクロールされません。)

SEO にはその他の要因、コンテンツの量、ウェブサイトの通信量や信頼性が作用しています。要するに、多くの関連のある内容と通信量です。

# Moodle の設定

サイトセキュリティ設定において「_Googleに

元記事を表示

Moodle 3.8 マニュアル – テーマディレクトリ

[原文](https://docs.moodle.org/38/en/Theme_directory)

# テーマディレクトリ

標準的な Moodle ディストリビューションでは、すべてのテーマは theme/ ディレクトリに配置されます。

典型的なテーマディレクトリ/フォルダの内容のさらなる情報に関しては[Theme basics](http://docs.moodle.org/dev/Theme_basics#What_is_inside_a_theme_folder.3F)(翻訳準備中)に見つけられます。

# サイトのためにテーマのデフォルトディレクトリを変更する

$CFG->themedir を使うことにより、テーマのストレージの場所は変わるかもしれません。この変数により特定されるディレクトリの中に置かれるテーマはテーマセレクタを使用することにより選択できます。

For example, should you wish to place themes in a subdirectory called ‘my_moodle_themes’, your ‘config.

元記事を表示

Moodle 3.8 マニュアル – DNS

[原文](https://docs.moodle.org/38/en/DNS)

# DNS

これはインターネットがアルファベットのURL(例えば、`www.bbc.co.uk`)を IP アドレス(例えば `241.1.23.7`)に解決するシステムについて言及しています。それは効率的なインターネットの電話帳でありブラウザが必要とされた web ページをホストするマシンに接続できる方法です。

あなたの Moodle サイトが外の世界から接続可能であることが重要ですので、あなたのサーバの DNS エントリが重要です。ISP からの基本的なホスティングのプランを使用しているのなら、とても簡単なことです。

* 登録者からドメイン名を得てください(例えば、`www.123-reg.co.jp`)。これは電話帳に登録することと等価です。
* ネームサーバにあなたの ISP の登録者の設定をしてください。(これはもしあなたの ISP と登録者が同じならば不必要です。)これはあなたの電話帳に電話番号を書き込むことと等価です。

カテゴリ:[管理者](https://qiita.com/int

元記事を表示

【Laravel】マルチログイン(ユーザーと管理者)機能

Laravel6で認証をユーザーと管理者など複数にわける場合のメモ。

# まずは普通にログイン機能を実装

[Laravel 6.0 ログイン機能を実装する – Qiita](https://qiita.com/ucan-lab/items/bd0d6f6449602072cb87)

[Laravel6.0「make:Auth」が無くなった 〜Laravel6.0でのLogin機能の実装方法〜MyMemo – Qiita](https://qiita.com/daisu_yamazaki/items/a914a16ca1640334d7a5)

[認証 6.x Laravel](https://readouble.com/laravel/6.x/ja/authentication.html)

ここは参考になる記事が多くあるので説明は省略。

# 作成したログイン機能に追加

新しく管理者(Admin)の認証機能を追加する。

## 1. モデルクラスを作成

他のモデルクラスと同じようにマイグレーションファイル(DB)とモデルクラス(Admin.php)を作成。

モデルクラス

元記事を表示

textareaでPOSTされたtsvフォーマットのデータを受け取ってパースするメモ

テンポラリファイル作ってうまいことやる。

“`php
$temp = tmpfile();
fwrite($temp, $_POST[‘text’]);
rewind($temp);
$meta = stream_get_meta_data($temp);

$files = new SplFileObject($meta[‘uri’]);
$files->setFlags(
\SplFileObject::READ_CSV |
\SplFileObject::READ_AHEAD |
\SplFileObject::SKIP_EMPTY |
\SplFileObject::DROP_NEW_LINE
);
$files->setCsvControl(“\t”);

foreach($files as $key => $line) {
//ここでなんやかんや
}
“`

元記事を表示

XAMPPでApache起動出来ずにハマった話

※windows10、xamppのバージョン7.4.1で環境を作ってます。

WordPressの環境をローカルで作成しようと思いxamppをダウンロードしてApacheを起動したが動かない・・・。
error.logを確認すると以下エラーが。

`PHP Warning: ‘vcruntime140.dll’ 14.0 is not compatible with this PHP build linked with 14.16 in Unknown on line 0`

翻訳してみると、vcruntime140.dllがPHPと互換性がないと言われているように見える。

#vcruntime140.dllって何?

色々調べてみると、
https://www.php.net/manual/ja/install.windows.requirements.php

PHPを動かすためにはVisualCのランタイムが必要でvcruntime140.dllというのがランタイムにあたるようだが、今入ってるPHPのバージョンと互換性がないよ!と言われているっぽい。

#じゃあどうすれば良い

元記事を表示

PHP(Laravel)でSalesForceのREST APIを利用する

## 概要
LaravelでSalesForceのRESTAPIを利用する方法について調査したので記事として残しておく。
ここではよく使いそうなCRUD処理のサンプルを記載する。
※ Laravel特有の部分はあまりないので、他のフレームワークや生PHPでもいけます。

## 前提
– SalesForceのAPIのバージョンはv47.0とする
– Laravel(5.8)のControllerとGuzzle(6.5)を利用する
– access_token、refresh_tokenは取得済とする
+ [access_tokenの取得方法はこちら](https://qiita.com/nagi125/items/218a625979356608e38c)
+ [refresh_tokenの取得方法はこちら](https://qiita.com/nagi125/items/e0116b009a23acc1e64e)
– 標準オブジェクトの取引先(Account)を利用する

## CRUD処理サンプル
### CREATE
“`php
/**
* S

元記事を表示

SalesForceのaccess_token取得方法

## 概要
SalesForceのAccessToken取得方法をまとめておく。
※refresh_tokenについては[こちらを参照](https://qiita.com/nagi125/items/e0116b009a23acc1e64e)
同時にLaravel + Guzzuleを利用したPHPのサンプルも載せておく。

## 結論
取得方法は複数あるがここでは「ユーザ名パスワードフロー」と「更新トークンフロー」の2種類を記載する。
※ 利用しているAPIのバージョンはv47.0です。

## 共通作業
– 接続アプリケーションの作成をする。([こちらの記事](https://qiita.com/nagi125/items/e0116b009a23acc1e64e)を参照)

## ユーザー名・パスワードフロー
パラメータをつけて下記のURLに「POST」でアクセスする。
https://login.salesforce.com/services/oauth2/token

|パラメータ|値|
|:–|:–|
|grant_type|password|
|client_id|

元記事を表示

selenium php-webdriver update

“`
$composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Package facebook/webdriver is abandoned, you should avoid using it. Use php-webdriver/webdriver instead.
Generating autoload files
“`

version 1.8.0 から名前が facebook/php-webdriver から php-webdriver/webdriverに変わりました
jsonを書き換えます

“`composer.json
“require”: {
– “facebook/webdriver”: “^1.7.1”,
+ “php-webdriver/webdriver”: “^1.8.0”,
}
“`

アップデー

元記事を表示

?【CakePHP2】Error: Call to a member function dispatchMethod() on nullは環境設定で修正

## 環境
PHP 7.2.21
CakePHP 2.10.18

## やりたいこと
下記のエラーを修正

“`sh
Error: Call to a member function dispatchMethod() on null
#0 (Modelのファイルパス)(223): Model->__call(‘makeRoleTargetJ…’, Array)
#1 [internal function]: (対象のModel名)->__construct(Array)
#2 /(CakePHPディレクトリ)/Vendor/cakephp/cakephp/lib/Cake/Utility/ClassRegistry.php(169): ReflectionClass->newInstance(Array)
#3 /(CakePHPディレクトリ)/Vendor/cakephp/cakephp/lib/Cake/Console/Shell.php(316): ClassRegistry::init(‘(対象のModel名)’)
#4 /(CakePHPディレクトリ)/Vendor/

元記事を表示

PHP 勉強用メモ

クラスの中のプロパティやメソッドにアクセスするときには、 $this

元記事を表示

PHP オブジェクト指向 勉強用

勉強用メモです。

クラスがもつ変数をプロパティ
クラスがもつ関数をメソッド

元記事を表示

勉強用メモ ローカル変数 PHP

関数内で定義した変数はその関数内でのみ有効

元記事を表示

laravelで都道府県プルダウンメニューを表示させる手順

laravelで都道府県のプルダウンメニューを導入したのでその手順をメモします

## 都道府県名一覧表をつくる

configディレクトリ下に下記ファイルを作成。

“`php:pref.php
‘未選択’,
‘1’ => ‘北海道’,
‘2’ => ‘青森県’,
‘3’ => ‘岩手県’,
‘4’ => ‘宮城県’,
‘5’ => ‘秋田県’,
‘6’ => ‘山形県’,
‘7’ => ‘福島県’,
‘8’ => ‘茨城県’,
‘9’ => ‘栃木県’,
’10’ => ‘群馬県’,
’11’ => ‘埼玉県’,
’12’ => ‘千葉県’,
’13’ => ‘東京都’,
’14’ => ‘神奈川県’,
’15’ => ‘新潟県’,
’16’ => ‘富山県’,
’17’ => ‘石川県’,
’18’ => ‘福井県’,
’19’ => ‘山梨県’,
’20’ => ‘長野県’,
’21’ => ‘岐阜県’

元記事を表示

星5段階評価プルダウンメニューの作成手順

星5段階評価プルダウンメニューを導入したのでその手順をメモします

# configディレクトリ下にデータをつくる

“`php:score.php
‘☆’,
‘2’ => ‘☆☆’,
‘3’ => ‘☆☆☆’,
‘4’ => ‘☆☆☆☆’,
‘5’ => ‘☆☆☆☆☆’,
);
?>
“`

# ビューでプルダウンを表示する

“`php:create.blade.php

“`

# プルダウンで選択して送信したデータを取得する

## viewの記述(if文を使用する場合)
“`php:detail.blade.php
@if (取得した

元記事を表示

構造化データの読み込みにまつわる問題 〜evalインジェクション〜

XMLやJSONなどの構造を持つデータを保存や送受信できるように変換することをシリアライズと呼ぶ。
シリアライズは配列データを配列データとして保存できたりなど、配列の要素や構造が動的に変化するデータを扱う際などに使用される。
ここではシリアライズに関する脆弱性の一つであるevalインジェクションについて記載する。

#概要
プログラム言語にはevalと呼ばれる関数・機能があり、これは文字列(各言語のコード)を式として評価したのものである。
evalは使い方によって外部から送り込んだスクリプトが実行されることがある。
それをevalインジェクション攻撃と言い、そのような攻撃を受ける脆弱性をevalインジェクション脆弱性と呼ぶ。

###evalの例
**JavaScript**[(MDN)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/eval)
>eval(string)

**PHP**[(php.net)](https://www.php.net/manual/ja/fu

元記事を表示

OTHERカテゴリの最新記事