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

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

MediaWikiのAPIを使ってページを自動作成する

筆者は、MediaWikiを自分のための情報収集と整理に使っています。いわば、個人のナレッジマネジメントですが、そのときに重宝しているのが、MediaWikiのRESTfulなAPIを使用するクライアントアプリケーションです。タイトルとページコンテンツを与えて新規ページを作成するという至って簡単なものですが、その割には役にたっています。記述言語はPHPです。

最近ではAPIを使ったCMS管理が必須になっていますが、APIを使ったクライアントアプリケーションの作成は簡単だよ、という例です。

ソースは[GitHub](https://github.com/cnloni/mwtools)にあげています。MediaWikiシステムをプライベートに利用している方は(あまり多くないとは思いますが)、カスタマイズしてそれぞれの用途で利用してください。

#### 週別のテンプレートとは
筆者が最も利用しているのが、図1ようなテンプレートです。これは2020年29週の分ですが、週毎の月日と曜日、リンクをつけただけの簡単なものです。

“`html:リスト1「2020年29週」
[[週報:202

元記事を表示

Laravelのタスクスケジュールが動かない(24時設定)

昨日まで動いていたのに、今日は動かない・・・
昨日のリリースが悪いのかしら。。でも何も悪いことしていないのに・・・

# スケジュール定義を見直そう
スケジュールタスクは全部“`App\Console\Kernel“`クラスの“`schedule“`メソッドの中に定義します。
この定義でミスしていました。
毎日24時に実行したいからって

“`php
$schedule->command(‘cms:update-article-point’)->dailyAt(’24:00′);
“`

と書くと落ちます。こんなログを吐いて死にます。

“`
In CronExpression.php line 155:
Invalid CRON field value 24 at position 1
“`

このように書きましょう。

“`php
$schedule->command(‘cms:update-article-point’)->dailyAt(’00:00′);
“`

元記事を表示

[PHP] 簡易ログイン機能を実装してみた

### はじめに
phpを使用して、簡易的なログイン認証を実装してみました。(技術力低いのでやばいかもしれないが…)

**基本的な流れ**
1. idとpasswordを入力する。
2. 入力したidとpasswordがデータベースに紐づけされて登録されているかをチェック。
3. 登録されていたらログインし、以外はエラーを表示する。

まぁ簡易的なのでそんなかんじです笑笑

### 該当ソースコード

“`php:ログイン画面(login.php)



ログイン<

元記事を表示

連想配列のデフォルト値を省略すると実行速度は速くなる

#気になったこと

以下のように引数の連想配列に不足しているキーを自動で補ってくれる関数がある。

“`f.php
function f($option = []) {
$option += [
‘text1’ => ‘1’,
‘text2’ => ‘2’,
‘separator’ => ‘/’,
];
return implode($option[‘separator’], [$option[‘text1’], $option[‘text2’]]);
}
“`

関数の呼び出し時に(a)オプション配列にすべてのキーを指定する場合、(b)デフォルト値を省略した場合、どちらの実行速度が速いか?

#時間計測スクリプト

“`benchmark.php
$t1 = microtime(true);
for($i=0;$i<500000;$i++) { f([ 'text1' => ‘abc’,
‘text2’ => ‘def’,
‘separator

元記事を表示

【PHP】標準エラー出力する4つの方法

PHP で標準エラー出力にメッセージを出力する方法(各種)

[Qiita 記事に絞って「php 標準エラー出力」でググって](https://www.google.com/search?q=site:qiita.com+php+%E6%A8%99%E6%BA%96%E3%82%A8%E3%83%A9%E3%83%BC%E5%87%BA%E5%8A%9B&tbs=qdr:y)も、ピンポイントのタイトルの記事がなかったので、自分のググラビリティとして。

## TL; DR

“`php:シンプルで確実な標準エラー出力
fputs(STDERR, ‘my error message’);
“`
“`shell-session:標準出力を潰して標準エラー出力だけ確認してみる
$ # 標準出力へ出力(1>/dev/nullで標準出力を潰している)
$ php -r ‘fputs(STDOUT, “hoge”. PHP_EOL);’ 1>/dev/null
$
$ # 標準エラー出力へ出力
$ php -r ‘fputs(STDERR, “hoge”. PHP_EOL)

元記事を表示

タイムゾーンはちゃんと設定しよう

サービスを開発する際、最初にタイムゾーンをしっかり設定していないと、MySQLのcreated_at や updated_at などをうまく使えないというようなことになります。

MySQLでは、カラムにcreated_at や updated_atなどを加えると、それぞれSQLのinsertやupdateが実行されたときに自動でtimestampを入れてくれたりします。

始めにしっかり設定しておかないと、あとから必要になったときに、自力でそれらの値を取得して挿入するはめになってしまいます。(実体験)

元記事を表示

【PHP入門】CRUD機能

## はじめに
今回は、PHPとMySQLを使ってCRUD機能を実装していきます。

#### バージョン
PHP:7.4.5
phpMyAdmin:5.0.2
MySQL:5.7.30

#### CRUD機能とは?
ほぼ全てのソフトウェアが有する4つの永続的な基本機能の頭文字をそれぞれ並べた用語のこと。
その4つの機能とは、Create(生成)、Read(読み取り)、Update(更新)、Delete(削除)を指す。

## 前準備
まずは、CRUD機能を実装する前にViewを作成していきます。

今回は、記述するコードが多くなりそうなので、MVCモデルを使用します。

ちなみに私は、conf / html / model / view の4つのディレクトリを作っています。

##### viewの中にbbs_view.phpを作成

“`php:bbs_view.php




ひとこと掲示板

元記事を表示

PHPでGoogle Geocoding APIを呼び出す

GCPの[Geocoding API](https://developers.google.com/maps/documentation/geocoding/overview?hl=ja)をPHP(Guzzle)を使って呼び出してみます。

# APIキーを用意する
https://console.cloud.google.com/apis/library/geocoding-backend.googleapis.com
GCPでGeocoding APIを有効化し、APIキーを発行します。

# PHPからAPIを呼び出す

## Guzzleをインストール
HTTPクライアントのGuzzleをインストールします。

“`
composer require guzzlehttp/guzzle
“`

## APIを呼び出す
`$api_key` には発行したAPIキーの文字列を設定します。

“`php:geocode.php

元記事を表示

PHPでOption型を利用してnullチェックや例外ハンドラを消す

ScalaやRustを普段使ってる方には当たり前にあるOption型ですが、残念ながらPHPには組み込みされていません。
しかし、[php-option](https://github.com/schmittjoh/php-option)を利用することで同様の体験を得ることが出来ます。
https://github.com/schmittjoh/php-option

# こんなコード書いてませんか?

## 例外を投げる

例えばRepositoryからEntityを取得する処理でこんなコードを書いてませんか?

“`php:Repository
public function findById(Id $id): Entity
{
$result = $this->queryBuilder->…
if ($result === null) {
throw New NotFoundException(‘message’);
}
return Entity::create($result);
}
“`

データベースからデータを取得して、データがなければ例

元記事を表示

Laravel+AWS-SDK-PHPによるDynamoDBのデータ取得

# 背景
LaravelでDynamoDB使うにあたり、ORMのlaravel-dynamodbなどもあるが、DynamoDBでORM利用するのが少し違和感あった為にSDK使ってやってみた際のメモ(そもそもPHPのWEBフレームワークでやるなという話ではあるが、せっかくSDKが提供されているので一度使ってみようという感じ)

# 環境
・Windows 10
・HomeStead 9.5
・PHP 7.4
・Laravel 6.0

# 1.準備
## AWS-SDK-PHPのインストール

“`cmd
composer require aws/aws-sdk-php
“`

## DynamoDBの環境作成
AWS提供のローカルDynamoDBを利用。Vagrantを使っていたので、Dockerと共存が面倒なことになるのでローカルに直接インストールしました。
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/DynamoDBLocal.html

※GUIツール(結構便利)
https:

元記事を表示

Adapterパターンを使うメリットとPHP実装例

※この投稿は[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030)を読んだ感想と復習を兼ねたまとめです

### Adapterパターンとは

Adapterパターンはデザインパターンのひとつで、既存のクラスを修正することなく、インタフェースを変更するための手法です。

[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E

元記事を表示

PHP 条件演算子(三項演算子)の省略構文「??」

# 目的

– 先輩方が記載したコードを読んでいて初めて知ったものだったのでまとめる

# 三項演算子`??`

– この演算子は別名null合体演算子とも呼ばれる。
– 下記に例を記載する。

“`php
式1 ?? 式2;
“`
– 式1がnullではない場合には式1が実行される。
– 式1がnullの時は式2が実行される。

# 具体例

– 変数$strに文字列を格納する処理を記載する。
– 変数$base_strに文字列が格納されている時は変数$base_strの文字列を変数$strに格納する。
– 変数$base_strがnullの時は文字列「base_str is null」を変数$strに格納する。

“`php
$str = $base_str ?? ‘base_str is null’;
“`

元記事を表示

直感的に使えるPHPコマンドラインオプションパーサーを作った

https://packagist.org/packages/d0riven/php-flags#0.1

## TL;DR;

自分が欲しいPHPコマンドラインオプションパーサーがなかったので作った。
このライブラリはドキュメントを見なくても使えるくらいシンプルかつ型チェックが行えるコマンドラインオプションパーサーである。
PHPライブラリを作ったことで色々と周辺技術や最新のCIなどを学べて良かった。

## 作ろうと思った背景

[AuraCli](http://auraphp.com/framework/2.x/ja/cli/)をプロジェクトで採用しており、個人的にそれに違和感はなかった。
しかし、PHPに慣れていないメンバーからわかり辛いという声が上がった。

理由は `shortやlongの表現, :, ::, \*, などの記号が何を意味しているかがドキュメントみないと分からない` という物だった。
当初は「いや、それくらいドキュメント見るでしょ…」と思ったのだがgoなどのオプションパーサー(e.g. flag, kingpin, go-flags)に比べるとたしかに以下の

元記事を表示

Iteratorパターンを使うメリットとPHP実装例

※この投稿は[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030)を読んだ感想と復習を兼ねたまとめです

Iteratorパターンは、デザインパターンの1つで、集合に含まれる要素を1つずつ取り出したいときに使用されるようです。

次のようなクラス図で説明されていました。

スクリーンショット 2020-08-06 8.32.51.pngLaravel+Vue.jsで作成したSPAサイトでOGP対応

#はじめに
個人開発でLaravel5.5とVue.jsを使用して作成したSPAサイトがあり、長らく放置していたのですが、最近勉強を兼ねて少しリファクタリングをしようかなと思いました。

[ラブライブ専用掲示板](https://lovelivebbs.jp)

上記が作成したサイト(掲示板)になります。
治すべき部分はたくさんあるのですが、まず気になったのがTwitterカードの表示です。
特に、掲示板のスレッドURLをツイートした際に、デフォルトの情報が表示されてしまうのが見た目の部分で致命的でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/254954/a4475d41-aa84-c23b-8d30-9e0baada6e36.png)

## まずやったこと
最初にapiでスレッドの情報を読み込んだ後のタイミングで`querySelector`を使用して動的にmetaタグを変更しました。

“`javascript
//APIでデータ取得後
document.title =

元記事を表示

都内の行きつけの居酒屋新規開拓サービスをリリースしたらダダ滑りしたので反省会・考察します【Laravel】

# 行きつけの居酒屋を新規開拓できるWEBサービスを作ったので振り返ります
初投稿です。
酔いどれ([@yoido_re](https://twitter.com/yoido_re))です。

この記事は先月7月末にプレリリースした個人開発のサービス、[東京歩くマップ](https://alcmap.tokyo/)について、リリースから約1週間が経ったのでリリースまでの道のりから現状について皆さんに宣伝も兼ねてお話します。

東京歩くマップ – TokyoAlc.Map 行きつけの居酒屋を新規開拓しよう!
https://alcmap.tokyo/

![スクリーンショット 2020-08-04 20.41.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73435/a89e5d3e-4e94-3109-34b2-38fd9be36782.png)

## リリースした東京歩くマップとは
タイトルにも掲げている通り、東京歩くマップとは、東京都内に限定した行きつけの居酒屋を新規開拓するために、ユーザ

元記事を表示

ユーザー情報をセッションに格納する方法

#ユーザー情報をセッションに格納する方法

phpを使用したポートフォリオ作成時にログイン画面を実装しました。
ログイン後、ユーザー情報に紐づいた処理を行うため、ユーザー情報をセッションに格納しました。ログイン → ログアウトまでの中で、セッションに格納に必要な記述をカンタンにまとめました。

##そもそもセッションとは
こちらのサイトの言葉がわかりやすいので引用します。Cookieとの違いも記載しており、わかりやすいです。

>セッションとは、コンピュータのサーバー側に一時的にデータを保存する仕組みのことです。
[PHPでセッションを使う方法【初心者向け】](https://techacademy.jp/magazine/4970)

##手順
1. ログインするときにユーザー情報を格納する
2. ログイン成功後、セッションからユーザー情報取得
3. ログアウトしてセッションを削除

ものすごく簡単に書きました。

### 1. ログインするときにユーザー情報を格納する

記載したコードはこちらです。今回私はユーザーIDのみを格納しました。
※まだローカル環境で開発中なので画面遷移

元記事を表示

[Laravel]Composerエラー 「Do not run Composer as root/super user!〜」

Composerを使ってライブラリを使ってインストールをしたとことろ以下のエラーが出ました。

“`
Do not run Composer as root/super user! See https://getcomposer.org/root for details
“`

composerを使ったインストールをrootユーザーでしようとしたため、エラーが出たみたいです。
なぜrootユーザーでインストールは好ましくないかについては以下を参照してください。
https://getcomposer.org/doc/faqs/how-to-install-untrusted-packages-safely.md

root以外のユーザーを作成します。Linuxのコマンドの`useradd`でアカウントを設定します。

“`
// rootユーザーになる
$ sudo su –

// ユーザーを追加
$ useradd -m 名前

// 追加したユーザーに移動
$ su 名前

名前$ composer コマンド
“`

これでroot以外のユーザーになったため、compos

元記事を表示

LaravelでToDoアプリを作ったときの備忘録

定期的にQiitaで記事を投稿(アウトプット)することが大事かなと思い、間違い等もあると思うが、書いていく。

下の記事を参考にToDoアプリを作る際の備忘録を残していく。
下の備忘録は、全てこちらの記事に載っているのでそちらを参考にする。
[HyperTextCandy LaravelによるToDoアプリ作成記事](https://www.hypertextcandy.com/laravel-tutorial-introduction)

## 環境
– Windows10
– Xampp
– MySQL
– PHP7
– Laravel7
– VsCode使用

## 準備
`$ laravel new ToDo`で新しくToDoプロジェクトができあがった。かんたん。
`$ php artisan serve`でロケットが出ることを確認。オッケーちゃんとできてる。

## 色々
– コントローラ作成
– マイグレーション作成
– モデルクラスの作成
– シーダーの作成
– `$ php artisan make:seeder FoldersTableSeeder`でシーダー

元記事を表示

プロフィールの更新履歴を保存する仕組みを作るにはどのようにしたら良いのか。手順をまとめてみた。(自分用)

#はじめに
※ Profile画面を作っていますので、profile(自分用)として色々記載しています。

実際のアプリケーション開発はある機能が1つのテーブルを使うだけで完結することは、ほとんどありません。

複数のテーブルを使ってシステムを実現します。
リレーショナルデータベースにはこのようなテーブル同士の関連を扱う機能が備わっており、
Eloquentで扱うことができます。
編集履歴は「Profileをいつ変更したか」「日付と時刻を記録し、参照することができる」機能のことです。

編集画面でデータを更新するタイミングで histories というテーブルにデータを登録し、
編集画面でその一覧を見られるように実装します。

では、流れに沿って記述していきます。

#1.編集履歴テーブルの作成と関連付け
Migrationファイルの雛形を作成します。

“`
$ php artisan make:migration create_histories_table
“`

Migrationファイルを次のように編集いたします。

“`php

元記事を表示

OTHERカテゴリの最新記事