- 1. Ubuntu 18.04.4 LTS、Apache/2.4.29、php 7.2.24で、HTTP/2に対応する方法
- 2. PHPerKaigi 2020 セッション参加メモ
- 3. Laravelのキューを小さく使い始める
- 4. PHP 三項演算子
- 5. Moodle 3.8 マニュアル – サーチエンジン最適化
- 6. Moodle 3.8 マニュアル – テーマディレクトリ
- 7. Moodle 3.8 マニュアル – DNS
- 8. 【Laravel】マルチログイン(ユーザーと管理者)機能
- 9. textareaでPOSTされたtsvフォーマットのデータを受け取ってパースするメモ
- 10. XAMPPでApache起動出来ずにハマった話
- 11. PHP(Laravel)でSalesForceのREST APIを利用する
- 12. SalesForceのaccess_token取得方法
- 13. selenium php-webdriver update
- 14. ?【CakePHP2】Error: Call to a member function dispatchMethod() on nullは環境設定で修正
- 15. PHP 勉強用メモ
- 16. PHP オブジェクト指向 勉強用
- 17. 勉強用メモ ローカル変数 PHP
- 18. laravelで都道府県プルダウンメニューを表示させる手順
- 19. 星5段階評価プルダウンメニューの作成手順
- 20. 構造化データの読み込みにまつわる問題 〜evalインジェクション〜
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.phpPHPを動かすためには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