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

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

LaravelのRedisで存在しないキーを取得しようとするとnullが返ってくるお話

`false` が返ってきたり `null` が返ってきたりする楽しい世界です。

# 前提
## 動作環境
– Laradock
– Laravel 6.12
– Redis 5.0.3
– phpredis 5.1.1

## DBの中身
Redis の中には `key1` のみが入っているとします。

“`
127.0.0.1:6379> SET key1 value1
OK
127.0.0.1:6379> KEYS *
1) “key1”
“`

# 要約
## Redis
Redis で存在しないキーを指定すると、 `nil` が返ってきます。

“`
127.0.0.1:6379> GET key1
“value1”
127.0.0.1:6379> GET key2
(nil)
“`

## PhpRedis
[PhpRedis](https://github.com/phpredis/phpredis) では、boolean 型の `false` が返ってきます。

“`php
$redis = new Redis();
$redis->connec

元記事を表示

【PHP+MySQL】データベースに格納した画像データを表示する方法(base64エンコード)

####1.DBに格納した画像を表示したい。

特定のフォルダに入っている画像の表示ではなく、DBに格納した画像(バイナリデータ)
を表示する方法を知りたい。
そんな場合に使える方法を調べてみた。

一般的にある下記方法を実行すると、真っ黒い画面しか出てこない。

“`php

“`
解決方法は4へ。

####2.恐竜の画像を格納するテーブルの作成

画像はmediumblob型として保存

“`
create table tbl_dinoimg (
id integer,
img mediumblob,
ext varchar(10),
primary key(id)
);
“`

####3.実際のデータが格納されているテーブル

![dino_image1_pre.jpg](https://qiita

元記事を表示

Laravel – 『ドメイン駆動設計入門』を読んで Laravel を使って実装してみた

## 要約 / inb4 tl;dr

– 成瀬允宣さん([Twitter](https://twitter.com/nrslib) , [nrslib](https://nrslib.com/) )の 『[ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本](https://amzn.to/2VFuaNm)』 を読んでサンプルコードを Laravel で実装してみた。
– DDD 入門として、とても良い書籍だったのでオススメ。
– 実装の前提条件やポイントをまとめた。
– ※注:この記事は、あくまでサンプルコードの書き起こしと整理のみです。DDD 本来の設計作業についての記載はほとんどありません。
– コードはこちら
– [anfangd/laravel-ddd-sample-for-beginners – GitHub](https://github.com/anfangd/laravel-ddd-sample-for-beginners)

## はじめに

2020年2月9-11日に開催された PHPerKaigi2020 に参加してきました。

[![

元記事を表示

LaravelのRequestクラス(入力の取得)

Requestクラスの入力値の取得に関するメソッドのメモです。
基本的には公式リファレンスの内容を書いているだけですので、詳しくはそちらをご覧ください。
https://readouble.com/laravel/5.8/ja/requests.html

###all()
すべての入力値を連想配列で取得できる。クエリストリング、アップロードファイルも取得する。

“`php

$input = $request->all();
“`

###input()
添付ファイルを除く、すべての入力値を連想配列で取得。

フォーム上のフィールド名を引数にとり、限定して取得できる。

“`php

$name = $request->input(‘name’)
“`

###query()
入力をクエリストリングで取得。input()と同じく引数も渡せる。

“`php

$name = $request->query(‘name’);
“`

###動的プロパティによる取得

“`php

$name = $request->name;
“`
アップロードファイルも取得可能。

元記事を表示

Docker-composeで以前に作られたPHP環境をbuildしようとしたらエラーがでたのでメモ

#起きたエラー

普通に`docker-compose build`して
ずらーーーーーーっと処理してくれてうまくいたかなあと思ったら
こんなエラーがでました。

“`terminal.
echo ‘sendmail_path = “/usr/sbin/ssmtp -t”‘
php -r ‘copy(‘”‘”‘https://getcomposer.org/installer'”‘”‘, ‘”‘”‘composer-setup.php'”‘”‘);’
php -r ‘if (hash_file(‘”‘”‘sha384′”‘”‘, ‘”‘”‘composer-setup.php'”‘”‘) === ‘”‘”’48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5′”‘”‘) { echo ‘”‘”‘Installer verified'”‘”‘; } else { echo ‘”‘”‘Installer corrupt'”‘”‘; unlink(‘”

元記事を表示

今からエンジニアを目指すにはRubyよりPHPがおすすめ

#はじめに
私自身WEBエンジニアを目指してRuby/Ruby on Railsを勉強していました。しかし今からWEBアプリ開発エンジニアを目指すのであれば、PHPの方がおすすめです。今回はなぜRubyよりPHPの方がおすすめなのか理由を書きたいと思います。

#そもそもRuby/PHPとは?
Ruby
Ruby(ルビー)は、まつもとゆきひろ(通称: Matz)により開発されたオブジェクト指向スクリプト言語。開発者のまつもとゆきひろは、「Rubyの言語仕様策定において最も重視しているのはストレスなくプログラミングを楽しむことである (enjoy programming)」と述べている。
ただ個人的な話かもしれないがRubyを学ぶ場合、Ruby on Rails(実アプリケーションの開発の雛形を予め備えた仕組み=フレームワーク)を学ぶ必要があり、そのフレームワークが初心者には流れが理解しづらいと思う。あくまで楽しめるのは「プログラミング経験のある開発者/エンジニア」であり、初学者は楽しめる領域まで勉強する必要がある。

PHP
名称の PHP は再帰的頭字語として、 “PHP: Hype

元記事を表示

FuelPHPを使ってみる

公式ドキュメント:
http://fuelphp.jp/

# PHPバージョン
1.8.0ではPHP7.2までサポート、1.8.2ではPHP7.3まで

https://bmf-tech.com/posts/FuelPHP1.8.0%E2%86%921.8.2%E3%80%81PHP5.6%E2%86%92PHP7.3%E3%81%B8%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%83%E3%83%97%E3%81%97%E3%81%9F

公式:https://fuelphp.com/blogs/2019/06/fuel-releases-1-8-2
1.8.2のchangelog:https://github.com/fuel/core/wiki/Changelog-v1.8.2

# docker環境の構築

下記を利用させていただきました。
https://github.com/nemui-fujiu/docker_fuelphp

## 修正箇所
PHPのDockerfile内

元記事を表示

Laravel 6系でAmazon SESからメールを送信するときの設定方法

# はじめに
Laravelにて、Amazon SES経由でメールを送信するための設定をまとめました

# 環境
– PHP 7.3
– Laravel Framework 6.13.1

# 前提
Amazon SESの設定、IAMの設定は完了しているものとします

# 設定の流れ
1. AWS sdkをインストールします
2. .envファイルにIMAのアクセスキーID、シークレットアクセスキー、リージョンの設定を追記します
3. キャッシュをクリアします

# 設定してみた
## 1. AWS sdkをインストールします
“`bash
$ composer require aws/aws-sdk-php
“`

## 2. .envファイルにIMAのアクセスキーID、シークレットアクセスキー、リージョンの設定を追記します
“`.env
MAIL_DRIVER=ses
MAIL_FROM_ADDRESS=hoge@example.com

AWS_ACCESS_KEY_ID=【IAMのアクセスキーID】
AWS_SECRET_ACCESS_KEY=【IAMのシークレットアク

元記事を表示

Paiza スキルチェック過去問題(PHP編) 日別訪問者数の最大平均区間 ~ランク B 相当~ 解いてみた。

はじめに

Paizaにて日別訪問者数の最大平均区間 (paizaランク B 相当)を解いてみました。

本番問題の解答・解説はNGですが、こちらに関しては、公開していいそうなのでまとめておきます。

(回答をPaizaでは再度閲覧できないため、備忘録的目的もあります。)

また、事前知識として標準入力の基本を知っておく必要がありますが、今回は割愛します。以下が参考になるかと思います。

https://paiza.jp/works/mondai/skillcheck_archive/max_range?language_uid=php

日別訪問者数の最大平均区間 (paizaランク B 相当)

以下が問題のリンクです。詳細はこちらでご確認ください。

wordpressをdockerで作ったときにテーマがアップロード出来なかったらする事

wordpressの環境を作って無料テーマを入れるとエラーが発生したので一番簡単な解決方法をメモ

## 何が起きたか
dockerでwordpressの環境を作成

dockerでのwordpress環境作成についてはこちらの記事が非常にわかりやすいので参考にしてください!
[Docker Compose でWordPress環境を作ってみる](http://bashalog.c-brains.jp/19/08/15-120000.php)

その後画面上で無料使える[Luxeritas] (https://thk.kanzae.net/wp/)というテーマをいれたところ

スクリーンショット 2020-03-06 9.42.21.png

![image.png](https://qiita-image-st

元記事を表示

Twitterの内容をDiscordにPHPで投稿する

# Twitterの内容をDiscordにPHPで投稿する

### 事前準備

– Twitterの認証周りは[twitteroauth](https://github.com/abraham/twitteroauth
)を使用しています。
composerかレンタルサーバー等であればフォルダごと置いてあげればOK

– Discordの[Webhook Url](https://support.discordapp.com/hc/ja/articles/228383668-%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB-Webhooks%E3%81%B8%E3%81%AE%E5%BA%8F%E7%AB%A0
)を取得しておく

– Twitter Developperのアプリ登録をしてtoken等を取得しておく
[【2019年】TwitterのAPIに登録し、アクセスキー・トークンを取得する具体的な方法
](https://miyastyle.net/twitter-api)

“`php

元記事を表示

独学でオンラインWebアプリメモ帳サービスを開発した記録

会員登録不要、無料で使用・保存できるオンラインWEBアプリメモ帳サービスを開発した記録です。
素人の私でもWEBサービスを作成できるので、参考にいただければ幸いです。
## ■サイト
メモ帳(メモ・ロモ)|会員登録不要で無料で利用可能のオンラインWEBアプリメモ帳サービス
http://memo.lomo.jp/
## ■トップ画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585506/44672c9c-4486-e060-4d08-089301cbcbad.png)
## ■入力画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585506/4ea8fd22-6951-9009-932d-02b2c0bf3706.png)
## ■特徴
・会員登録不要、無料で使用・保存できる。
・http://memo.lomo.jp/ +[複雑なID」を入力して自分専用のメモ帳として利用できる

元記事を表示

プログラミングを初めて2カ月半で作ったwebアプリ

#記事の概要
私が作成したポートフォリオの解説です。
作った背景から、目的、採用した技術、機能、工夫した点、問題点をまとめた。

#背景
プログラミング知識はなかったが、やる気と語学力が評価され、2019年の8月から11月までの4か月間フィリピンのオフショア開発企業でインターンとして受け入れてもらった。
その時に業務に入る前の研修課題としてphpを使ったwebアプリケーションの作成が命じられ、私はよく使っているtwitterのクローンサイトを作成した。
研修中はローカル環境のみで開発していたのだが、帰国後、自らのポートフォリオの一環として使うためにAWSを使い、本番環境にデプロイした。

#目的

  • 開発を通してWEBアプリケーションの動作の仕組みを理解する
  • 要件定義から設計、開発、テストまですべて自分で行うことによってシステムの開発工程を理解する
  • スケジュール表を事前に作り、スケジュール通りに開発を行えるようなマネジメント能力を養う
  • わからない点は、積極的にフィリピン人スタッフに質問することで、フィリピン人スタッフ
元記事を表示

同時ログイン後の強制ログアウト表示を出す

前回の[CakePHPでの同時ログイン禁止](https://qiita.com/hoogee/items/4967be92b687a68991fd)の続き。
過去のセッションをすべてDBから消して強制ログアウトした後の挙動と、
「他でログインしたからこのセッションはログアウトした」という表示を出す方法について。

## DBに無いSession idが来た時の挙動
Sessionsテーブルからデータを消して強制ログアウトさせる方法の場合、ブラウザからはDB側データが消された事は分からないので、cookieが残っていれば普通に過去のセッションIDを送ってくる。
この時のサーバーサイドの挙動は以下の通り。

* 何らかのURLにユーザーからアクセスされる
* セッション開始(session_start())され、openハンドラとreadハンドラが一回呼ばれる
* この呼び出しはCakePHPというより[PHP自体の機能](https://www.php.net/manual/ja/function.session-start.php)
* カスタムSessionHandlerを

元記事を表示

Problem 1 – The requested PHP extension ext-intl * is missing from your system.のエラー

# 環境
Laravel5.8
MAMP環境
Mac
php7.3

## 問題
プロジェクト下のターミナルで

“`
composer install
“`
を行った際に

“`
Your requirements could not be resolved to an installable set of packages.

Problem 1
– The requested PHP extension ext-intl * is missing from your system. Install or enable PHP’s intl extension.
“`
というエラーに遭遇した。

単純にPHP’s intl extensionというのを使えるようにしてくださいというエラーだと思い、
installしようとしたが悉くエラーが出てしまった。

## 解決法
phpのバージョンを7.3 → 7.4に引き上げたらcomposer installできるようになりました。

バージョンアップ↓↓
https://qiita.com/tana08/items/

元記事を表示

アウトプットPart2

# 3月5日勉強でやったこと
##1.PHPでHello Worldを出力した

![スクリーンショット (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/596056/8d1bec65-f69b-aa6c-19d8-75b7239813b4.png)

出力などはわかっていたのだが、ApacheとPHPを関連付けるのが難しかった。
無事に出力できてよかった。

##2.Gitを知ろう
Gitはコードの変更履歴が残るため、ファイルがかさばらないすごい技術です。
どうしてもプログラムにしてもパワーポイントにしても、名前を別に変えることによりファイルが増えていきどれがどれだかわからない状態になってしまうことが多いのでこの技術はすごくありがたいなと思いました。
しかも仲間たちとファイルが共有できるし、その人の変更履歴を選べるので使い勝手がいいなと思いました。

##3.よく使うファイル
今日は、プログラムを組む上で必ず使うであろうファイルを調べました:rolling_eyes:
**・JSON**
  

元記事を表示

SJISとSJIS-winの違い

##はじめに
エクセルで開く前提のcsvファイルを作る際、調査したので備忘録として残します

##結論
sjisとSJIS-winで迷ったら、使える文字の多い、SJIS-winにしとけば問題なさそうです

– SJIS
– Shift_JIS = CP932
– アスキーやマイクロソフトなどが中心になって作った文字コード
– SJIS-win
– Windows-31J = MS932
– SJISに特殊文字を追加した文字コード
– 丸数字 (①②③…⑳)
– ローマ数字 (ⅠⅡⅢ…Ⅹ、ⅰⅱⅲ…ⅹ)
– カッコ付きの株 (㈱)
– はしご高[はしごたか] (髙)
– たつ崎[たつさき、たちさき] (﨑)

##補足
– ℓ(リットル)などの記号は、unicode文字なので、SJIS-winでも文字化けする
– UTF-8(BOM付き)でも、文字化けせずにエクセルに表示できる模様(もちろん上記のℓや特殊文字も)
– BOM付きかどうかが、特定のエディタじゃないと判別できないということで、テストのことも考え見送り

###参

元記事を表示

php artisan migrateで外部キー追加ができない

#問題
– commentsテーブルとpostsテーブルの2つを作ろうとしたがうまく行かない。

“`
php artisan migrate

Migrating: 2020_03_05_085907_create_comments_table

Illuminate\Database\QueryException

SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `comments` add constraint `comments_post_id_foreign` foreign key (`post_id`) references `posts` (`id`))
“`

#原因
– migrationsテーブルの中にmigrate実行履歴が入っていた。
– php artisan migrateをすると、migrationsテーブルの中に実行履歴が残るようだ。
– 別の原因でphp artisan migrate:rollback

元記事を表示

Zend Serverのoci8

# Zend Serverのoci8
Oracleインタフェース案件で、`Zend Server for IBM i`のoci8モジュールを使用しているが、この度Oracle側の更新で嵌ったので、備忘として。

## 開発内容
– Oracle : 11g → 12c へ更新
– 該当PHPプログラムを12cの新DBに対応させる

## 環境
### 本番環境
– OS : IBM i V7R1M0
– Zend Server for IBM i : 5.5
– OCI8 : 2.0.8
– Oracle Run-time Client Library Version : 10.2.0.5.0
– Oracle Compile-time Instant Client Version :10.2
– Oracle : 12.1

### 開発環境
– OS : Windows 10
– Zend Server for Windows : 9.1
– OCI8 : 2.1.8
– Oracle Run-time Client Library Version : 12.1.0.2.0

元記事を表示

【CakePHP】CounterCacheでユーザーのフォロー数とフォロワー数をカウントする

# CounterCacheとは

例えば、記事に紐づくコメント数や、いいね数など`hasMany`で紐づくデータの数を記事のリストと同時に表示したいはずです。

そのようなときは`SELECT COUNT(*)`で取得する方法が考えられます。
しかし、記事データを取得する際に毎回`SELECT COUNT(*)`クエリが発行されるのははっきりいって地獄ですよね:confounded:
しかも、いいね数順にソートしたいときにもいいね数にインデックスを貼ることができないのでさらにパフォーマンスが悪化することが考えられますね…

そのような場合、**記事テーブルにコメント数いいね数カラムをもたせる(キャッシュさせる)**という方法がよく取られます。
あえて正規化を崩すような設計ですが、わざわざ結合や集計をすることなく取得することができ、さらにインデックスを貼ることもできるのでパフォーマンスの向上が見込まれます:laughing:

### 記事テーブルにカウント数をもたせる際のデメリット
パフォーマンスは向上しましたが、**正規化を崩している**ため、当然そのためのデメリットが存在しま

元記事を表示

OTHERカテゴリの最新記事