- 1. XAMPP なしで、Windows の Visual Studio Code を使って PHP デバッグしてみる
- 2. Laravelでスコープ
- 3. WordPressのカスタマイザーで設定できるオプションタイプとサンプルコードまとめ
- 4. Laravel ベースレイアウトを使って表示するページのheaderやfooterのデザインを統一しよう
- 5. 【Laravel】配列取り出し方パターン
- 6. Laravel 検索機能サンプル
- 7. PHPのisset()と等価な条件式を書いてisset()への理解を深めたい
- 8. モデルメソッドの使い方
- 9. ユリウス日の算出方法
- 10. PHPで階乗を計算する関数
- 11. phpListのインストールからテスト送信まで
- 12. JavaScriptのthisとPHPのthis
- 13. PHP(Laravel)でレコードのinsert, update, delete
- 14. 【PHP】SQLクエリの実行
- 15. 【PHP】連想配列に代入した値を使って文字を置換する
- 16. PHP 年と月からその月の長さ(最終日)を取得する うるう年判定込
- 17. SimpleSAMLPHPでIdPのログインページをカスタマイズする方法
- 18. WordPressでカスタマイザーにオプションを追加する一番簡単な方法
- 19. PHP 配列に連想配列を入れたものをforeach文で出力する
- 20. Heroku MySQLのデータベースから持ってきた日本語が文字化けする
XAMPP なしで、Windows の Visual Studio Code を使って PHP デバッグしてみる
XAMPPを入れれば簡単に実現できますが、タイトルとおり「Webサーバなしで」あえてローカル PHP だけインストールして Visual Studio Code(以下 VSCode)で PHP を実行&デバッグしてみます。※XAMPPが嫌いな訳ではない
お約束の微妙にはまる点があったので自分メモ用に残しておきます。
# 動作環境
– Windows 8/10
– Visual Studio Code 1.43.1 ※インストール済みであること
– [PHP 7.4.4](https://windows.php.net/download#php-7.4) (VC15 x64 Thread Safe / php-7.4.4-Win32-vc15-x64.zip)## PHP のインストール
https://windows.php.net/download#php-7.4 から Thread Safe 版をダウンロードして任意のディレクトリに展開しておく。(ここでは C:\php7 にインストールしてみてます)Windowsの環境変数に `C:\php7` を追加して黒い画面で
Laravelでスコープ
##定義方法
scope名は必ず最初にscopeを名前の初めに付ける必要がある.
・scopeUserName
・scopeBookSerialNo
上記のようにスコープ名をつける。“`php
public function scope+名前($query, 引数)
{
# 処理内容
return 絞り込んだビルダ(検索条件)
}
“`##ローカルスコープ
“`Person.php
# scopeの定義
public function scopeNameEqual($query, $str)
{
return $query->where(‘name’, $str);
}
“`“`PersonController.php
public function search(Request $request){
$input_val = $request->input;
$item = Person::NameEqual($input_val)->first();
$params = [‘input’ =>
WordPressのカスタマイザーで設定できるオプションタイプとサンプルコードまとめ
カスタマイザーで使えるオプションのタイプ一覧とサンプルコードまとめ。
## カスタマイザーの基本構造
カスタマイザーはfunctions.phpに書く。セクション、設定、コントロール(フォーム)の3つを定義する必要がある。
セクションはグループなので1つでもOK。設定とコントロールは対になってるのでオプションごとに両方とも必要。
“`php
function mytheme_customize_register( $wp_customize ) {
// セクション(グループ)を作成
$wp_customize->add_section( ‘your_section_id’ , array(
‘title’ => __( ‘Theme Color’, ‘theme_name’ ),
‘priority’ => 21,
) );
// データベースに新しい設定項目を登録
$wp_customize->add_setting( ‘your_setting_id’ , array(
‘default’ => ‘Dark’,
‘
Laravel ベースレイアウトを使って表示するページのheaderやfooterのデザインを統一しよう
# 目的
– ベースレイアウトの定義と継承を行いデザインの統一化やコーディングの簡略化の方法を学んだので忘れない様にまとめる
– 主に下記の本に記載されていたことを筆者なりに解釈してまとめる(筆者の文章が稚拙なため、深く勉強したい方は書籍を購入した方が良いかも知れない)
– [PHPフレームワークLaravel入門 第2版](https://www.amazon.co.jp/dp/4798060992/ref=sspa_dk_detail_0?psc=1&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUExUTc5NThMOVcyWktBJmVuY3J5cHRlZElkPUEwNDAxMzQ1RERTNjJFM1YzMVZEJmVuY3J5cHRlZEFkSWQ9QTNIVjdNMEVMTFNYOEomd2lkZ2V0TmFtZT1zcF9kZXRhaWwmYWN0aW9uPWNsaWNrUmVkaXJlY3QmZG9Ob3RMb2dDbGljaz10cnVl)# ベースレイアウトとは?
– 文字通りビューファイルのベースとなるレイアウトである。
– アプ
【Laravel】配列取り出し方パターン
##単純配列
“`PHP:単純配列
$memo[] = array();
$memo = [100,200,300,400,500];
$data = $memo[2];echo $data;
//300
“`“`PHP:連想配列
$memo[] = array();
$memo = [
‘counry’ => ‘Japan’,
‘capital’ => ‘Tokyo’,
‘population’ => 120000000
];
$data = $memo[‘capital’];echo $data;
//Tokyo
“`“`PHP:連想配列(value値が複数)
$memo[] = array();
$memo = [
‘country’ => [‘Japan’, ‘China’, ‘Korea’],
‘capital’ => [‘Tokyo’, ‘Beigin’, ‘Sore’]
];
$data = $memo[‘capital’][1];echo $data;
//Beigin
“`“`PHP:多次元配列
$mem
Laravel 検索機能サンプル
searchアクションで検索結果があれば表示するサンプル
“`routes.php
Route::get(‘/person/{id}’, ‘PersonController@find’);
Route::post(‘/person/{id}’, ‘PersonController@search’);
“`“`controller.php
public function find(Request $request){
return view(‘person.find’, [‘input’ => ”, ‘id’ => $request->id]);
}public function search(Request $request){
$input_val = $request->input;
$item = Person::find($input_val);
return view(‘person.find’, [‘input’ => $input_val, ‘id’ => $request->id, ‘item’ => $
PHPのisset()と等価な条件式を書いてisset()への理解を深めたい
# 問い
`$hoge` を変数とする。 `$hoge` は定義されていて、かつ配列型であるとする。
このとき、 `isset($hoge[‘fuga’][‘piyo’])` と等価な条件式を書け。
ここで「2つの条件式が等価である」とは、「条件を満たすどのような `$hoge` に対しても2つの条件式の真偽が一致する」ことを意味することとする。
また、条件式を書くにあたっては論理演算子と以下の関数のみを用いることとする。
– `array_key_exists()`
– `is_array`
– `is_null`# 答えの例
“`php
array_key_exists(‘fuga’, $hoge)
&& !is_null($hoge[‘fuga’])
&& is_array($hoge[‘fuga’])
&& array_key_exists(‘piyo’, $hoge[‘fuga’])
&& !is_null($hoge[‘fuga’][‘piyo’])
“`# 証明
省略
モデルメソッドの使い方
メソッドを定義してuseして使うだけ
“`php
# 使い方(Personモデルでの例)
use App\Person; #コントローラでuse$person = Person::all(); #インスタンス取得
$Person->モデルメソッド(); #メソッドを使用
“`####viewで表示する例:
“`Person.php
# メソッド定義
public function getData()
{
return $this->id . ‘:’ . $this->name . ‘(‘ . $this->age . ‘)’;
}
“`“`PersonController.php
use App\Person;
use Illuminate\Http\Request;class PersonController extends Controller
{
public function index(){
$people = Person::all();
return view(‘person.index’, [‘
ユリウス日の算出方法
ユリウス日の算出方法を調べていたら、出典によって数式がマチマチでどれが正しいのか困ってしまったのでとりあえず整理。
また、比較も行ってみたが、各算出方法で結果に差があることと傾向は分かったものの、どれが正しいのか、あるいは何か一つの方法を正しいと断ずることはそもそも出来るのかは不明なまま。# ユリウス日の算出方法
[wikipedia / ユリウス通日#Julian Day Number (JDN)](https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E9%80%9A%E6%97%A5#Julian_Day_Number_(JDN)) によると、
> 換算式は、Fliegel and Van Flandern[13]、Hatcher[14]、Meeus[15]によって考案されている。ただしこれらに整理を施した換算式が使われることも多い[16]。
とのことであり、式にはいくつかの形がある模様。
以下に、wikipediaでの式と、他文献等の式を列挙する。それぞれ式の形がかなり違っているけ
PHPで階乗を計算する関数
備忘録。PHPで階乗を計算するプログラム。
再帰関数を使わずに実装。
“`
echo factorial_of($num);function factorial_of($num){
$num2 = $num-1;
while($num2>0){
$num *= $num2;if($num2>=1){
$num2–;
}
}return $num;
}“`
再帰関数で実装。“`
echo factorial_of($num);function factorial_of($num){
if($num>0) {
return $num *= factorial_of($num-1);
}return 1;
}
“`
phpListのインストールからテスト送信まで
# はじめに
前提として
* PHP、Apache、MySQLはインストール済(データベース作成済)
* PHPに関して、IMAPモジュールがインストールされていること
* メール送信可能なMTAサーバー(Sendmail、Postfixなど、外部サーバーでも可) が必要(ここの設定は今回書いていません)# phplistインストール
phpListをインストールしていきます。
zipファイルをダウンロード“`
wget –content-disposition https://sourceforge.net/projects/phplist/files/phplist/3.5.1/phplist-3.5.1.zip/download
“`
`/var/www/phplist` に展開(phplistディレクトリは新規に作成)“`
$ unzip phplist-3.5.1.zip -d /var/www/phplist
“`# phpListのconfigファイル設定変更
/var/www/phplist/public_html/lists/confi
JavaScriptのthisとPHPのthis
## どんな記事?
JavaScriptとPHPのthisを**比べながら**理解しよう。
## 背景
thisがよく分からん!
↓
JavaScriptの`this`は**他の言語と少々異なる動作**をするらしい
↓
よろしい、ならば比較だ## PHPのthis
PHPの**疑似変数**である`$this`は、メソッドがオブジェクトコンテキストからコール場合に利用することができる。
`$this`は呼び出し元オブジェクトへの参照である。カレントオブジェクトからそのクラス内の関数や変数にアクセスする場合に`$this`を使える。
(コンテキストは直訳だと**文脈**という意味。
プログラミング用語的には、**背景となる情報**という言い回しが妥当かな?)(カレントオブジェクトとは、インスタンスメソッドが起動されたオブジェクトのこと)
“`php
PHP(Laravel)でレコードのinsert, update, delete
##insert
“`
DB::table(‘テーブル名’)->insert(配列データ);
“`##update
“`
DB::table(‘テーブル名’)->where(‘更新対象を検索’)->update(配列データ);
“`“`配列データサンプル
$params = [
‘id’ => $request->id,
‘name’ => $request->name,
‘email’ => $request->email,
‘age’ => $request->age
];
“`##delete
“`
#使い方
DB::table(‘テーブル名’)->where(検索条件)->delete();
“`“`php
#削除ルーティング
Route::post(‘/hoge/delete’, ‘HogeController@delete’);
“`“`HogeController.php
public function delete(Request $request){
【PHP】SQLクエリの実行
実行環境
PHP 7.4
Postgre 12.2##queryメソッド
SQLステートメント(SQLで作成した命令文)を実行し、成功した場合は PDOStatement オブジェクト、失敗した場合はfalseを返します。
“`php
$db = new PDO(“pgsql:host=localhost; dbname=postgres;”,”user”,”password”);$sql = “INSERT INTO test_tbl (id,name) VALUES (1,’yamada’)”;
$action = $db->query($sql);
“`SELECTした結果を使いたい場合などはqueryメソッドを使用します。
##execメソッド
SQLステートメントによって更新や削除された行数を返します。
1行も作用しなかった場合は0を返します。“`php
$db = new PDO(“pgsql:host=localhost; dbname=postgres;”,”user”,”password”);
$sql = “INSERT IN
【PHP】連想配列に代入した値を使って文字を置換する
入力した文字列の中から任意の文字を置換したくて、for文使ったりforeach使ってみたりして数時間うんうん悩んでたけど、`strtr()`関数に配列突っ込んだら解決したっていうメモ。
##なんやそれ?
>str_replace — 検索文字列に一致したすべての文字列を置換するとのこと。
参考: [PHP: strtr – Manual ](https://www.php.net/manual/ja/function.strtr.php)“`php:引数
strtr($検索する文字列, $対象文字列, $置換する文字列);
“`
引数に連想配列を渡すこともできる。
`$key`が対象文字列、`$value`が置換する文字列になる。“`php:引数に連想配列を渡す
$s = ‘AI’;
$ary = [‘A’ => 1];echo strtr($s, $ary);
//実行結果
1I
“`##実装
“`php
4,
‘E’ =>
PHP 年と月からその月の長さ(最終日)を取得する うるう年判定込
“`php
function checkFinalDay($year,$month){
$finalDay = [
“1” => 31,
“2” => 28,
“3” => 31,
“4” => 30,
“5” => 31,
“6” => 30,
“7” => 31,
“8” => 31,
“9” => 30,
“10” => 31,
“11” => 30,
“12” => 31,
];if( $year%4 == 0 && $year%100 != 0 || $year%400 == 0 {
$finalDay[“2”] = 29;
}
return $finalDay[$month];
}
“`
SimpleSAMLPHPでIdPのログインページをカスタマイズする方法
#やりたいこと
SimpleSAMLPHPを使ってIdpを構築してSSOをやっているのですが
いざ、構築し終わったらデフォルトのログインページのままこれではだめなので変えようとしたところ死ぬほど苦戦したのでメモ
#実現方法
デフォルトのログイン画面は`modules/core/templates/loginuserpass.tpl.php`になります
こいつをオーバライドしてやる必要があるわけです。
SimpleSAMLPHPにはテーマ機能があって、すべての画面をカスタマイズできます。
しかしその情報が公式ドキュメントのみなので面倒です[公式](https://simplesamlphp.org/docs/1.18/simplesamlphp-theming#section_1_1)の通りにディレクトリを作成します
“`
cd modules
mkdir mymodule
cd mymodule
touch default-enable
cd modules/mymodule
mkdir -p themes/fancytheme
“`configの設定を変え
WordPressでカスタマイザーにオプションを追加する一番簡単な方法
カスタマイザーを使うことでロゴやヘッダー画像のアップロード、テーマカラーの設定などWordpressテーマの様々なオプション設定ができるようになる。
## カスタマイザーを作成する方法
functios.phpに以下のコードを追記する。“`php
function mytheme_customize_register( $wp_customize ) {
// セクション(グループ)を作成
$wp_customize->add_section( ‘theme_color’ , array(
‘title’ => __( ‘Theme Color’, ‘text_domain’ ),
‘priority’ => 21,
) );
// データベースに新しい設定項目を登録
$wp_customize->add_setting( ‘color_base’ , array(
‘default’ => ‘#fff’,
‘transport’ => ‘refresh’,
‘sanitize_callback’ => ‘sanitiz
PHP 配列に連想配列を入れたものをforeach文で出力する
# 目的
– 下記の記事で配列に連想配列を入れることをまとめた、その応用として配列の中身をforeach文で出力する方法をまとめる
– [PHP 配列に連想配列を入れる](https://qiita.com/miriwo/items/83e03aa66ea7aa86da35)# 実施環境
– MacOS上のローカル環境にテスト用スクリプトファイルを作成してVisual Studio Codeのデバッグを用いて結果を確認した。
– 下記にVisual Studio CodeでPHPのデバッグ環境を構築する際の手順をまとめた記事へのリンクを記載する。
– [https://qiita.com/miriwo/items/e0a41308e042e34ebf78](https://qiita.com/miriwo/items/6edd6e1817def4fc11d5)
– 下記に実施環境の詳細な情報を記載する。| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook
Heroku MySQLのデータベースから持ってきた日本語が文字化けする
## 3行で
– ClearDBのアドオンでMySQLを使う
– [Heroku公式のやり方でMySQLからデータを持ってくる](https://devcenter.heroku.com/articles/cleardb#using-cleardb-with-php)
– 文字コードを指定する## 環境
PHP, Heroku, ClearDB, Mac
## 文字化け
HerokuとMySQLを同期するやり方は割愛。
[Heroku公式のやり方で](https://devcenter.heroku.com/articles/cleardb#using-cleardb-with-php)を参考にMySQLからデータを持ってくる。“`php