PHP関連のことを調べてみた2019年12月06日

PHP関連のことを調べてみた2019年12月06日
目次

CakePHPインストール時に「the requested PHP extension intl is missing from your system.」が発生

composerを使ってcakephp3をインストールしようとしたら、表題の様なエラーが発生したため、対処方法をメモ。

# 原因
「phpの拡張の「intl」がインストールされていないよ」的な感じ。

# 対処方法
下記のコマンドを実行して必要な拡張機能をインストール

“`
$ sudo yum –enablerepo=remi,remi-php7.2 update
$ sudo yum –enablerepo=remi,remi-php7.2 install php72-php-intl
“`

上記のコマンドを実行後、改めてCakePHPをインストール

# CakePHPインストール

“`
$ composer create-project –prefer-dist cakephp/app samplecake
“`

# 結果

やっとCakePHPのインストールが成功しました。

Laravelのインストールが正常にできても、CakePHPのインストール時には上記のようなエラーが発生する時があるようです。

元記事を表示

Laravel基本知識&操作

久しぶりにLaravel(5系)を触っているので、忘れないように基本操作メモ

# MVCフォルダ構成
– コントローラ
– `app/Http/Controllers`
– モデル
– `app`
– テンプレート
– `resources/views`

# バッチ
## 格納場所
app\Console\Commands

## コマンド
– コマンド名をバッチファイル内の `$signature` に定義しておく
– `app\Console\Kernel.php` の `$commands` に追加
– バッチ実行
– php artisan コマンド名

# バリデーション
## 参考
https://readouble.com/laravel/5.4/ja/validation.html

## コントローラ/モデル側
“`php
$data = $_POST[‘id’]; // チェックしたいデータ
$rule = [‘id’ => required|integer]; // チェックしたいキーとそのルール
$messages =[ // ルールに引っ

元記事を表示

XAMPPを複数バージョン入れたい時の、バージョン切り替え(Windows)

ローカル環境でXAMPPを使って開発をしていますが、保守案件で古いバージョンのphpを使っていて、それに合わせたXAMPPを入れています

dockerを使って案件ごとに環境作るほうが良いんでしょうけど、現状そこまで困っていないので、もうしばらくXAMPPでいこうと思っています

今までやっていたXAMPP切り替えと、より良いと思ったXAMPP切り替え方法を書きます
結論を先に書くと、インストール時にリネームしとけば、あとからリネームしなくてもOKってだけです・・・w

####旧手順
1、php7のXAMPPがインストール済(Aとする)
2、php5のXAMPPをインストールしたい(Bとする)
3、Cドライブ直下にBを入れる際、既に入っているAのXAMPPフォルダの名前と重複してインストールできない
4、Bを別のところに一度保存して違う名前にリネーム。C直下に移動
5、使いたい方のXAMPPフォルダの名前を「XAMPP」、使わない方の名前を別のものにする
6、XAMPP Control Panelは同じものを使う(同時に起動はできない)

####新手順
1、php7のXAMPPがイ

元記事を表示

swiftmailerで特定ドメイン以外送らないようにする

SwiftMailerでのメール送信を利用していると、環境によっては特定ドメインだけ送るとか送らないとかそういったことをやりたいことがありました。
例えば、ステージング環境でメール送信がされるときは自社ドメイン以外はキャンセルするとかですね。

## 対処法

プラグインを自作しましょう。

“`php
getMessage()->getTo() as $email => $name) {
if () { // 判定を入れる
$evt->cancelBubble();
}
}
}

public function sendPerformed(

元記事を表示

PHP7.4の新機能、FFIでGoを使ってみた

# PHP7.4がリリースされた
今回のアップデートも目まぐるしい機能が多く追加されました
機能の紹介は既にあるたくさんの記事にお任せするとして、個人的に気になっていた新機能 FFIを試してみます

# FFIとは
`Foreign Function Interface` の略でPHPで別の言語を動かせる機能です
Cなどで実装した共有ライブラリを読み込んで、利用することができます
メリットとしては実行速度が速くなることが大きいかと思われます

# FFIでGoを利用する
本題です
Goを利用するにはGoで共有ライブラリを実装する必要があります

## 何故Goを利用するのか
Cより簡単だから

## Goで共有ライブラリを作るには
– packageをmainにする
– main関数が必要
– exportする関数に `// export [function name]` のコメントを書く
– ビルド時は `-buildmode=c-shared` を付ける

今回はフィボナッチ数を計算するプログラムを用意しました
再帰を使っていて数が大きくなるほど計算に時間がかかるサンプルです

`

元記事を表示

$previous 引数を取らない例外クラスに強引に例外をチェーンする裏ワザ

# 問題

Laravel の [`AuthenticationException`] は,引数に例外をチェーンするための `$previous` を取れない!

“`php
public function __construct($message = ‘Unauthenticated.’, array $guards = [], $redirectTo = null)
{
parent::__construct($message);
$this->guards = $guards;
$this->redirectTo = $redirectTo;
}
“`

例えば… 認証用の外部の API に Guzzle でリクエストを飛ばして, 401 エラーだったら [`AuthenticationException`] を投げる,というときにデバッグしやすいように [`GuzzleException`] の情報もチェーンして残したい!というニーズはあると思います。

“`php:Guzzle の API 認証の例
try {
$

元記事を表示

[Laravel]画像アップロード機能作ってみた

簡単なフォトアルバムアプリを作成した際の画像アップロード機能に関する部分だけをまとめました。

##フォームの作成
“`php:create.blade.php

@extends(“layouts.app”)

@section(“content”)

Create Album

{!!Form::open([“action” => “AlbumsController@store” , “method” => “POST”, “enctype” => “multipart/form-data”])!!}
{{ csrf_field() }}
{{Form::text(“name”,””,[“placeholder” => “Album Name”])}}
{{Form::textarea(“description”,””,[“placeholder” => “Album Description”])}}
{{Form::file(“cover_image”)}}
{{Form::submit(“submit”)}}
{!!Fo

元記事を表示

PHPの型宣言とReflectionでif文消してみた

こんにちはみなさん

以前に[PHPでelseを書きたくない時に使える回避手段](https://qiita.com/niisan-tokyo/items/1f0511a9290a8ca840b9)っていう記事を書いたことがあります。
個人的にはelseは極力消したいですが、ifはまあ、あってもいいかなって思います。
true or false で判別とかしますし。

ただ、際限なくifが増えていくとき、やたらと長いスパゲッティが出現し、我々の胃腸を痛めつけてくるのです。

今回は、際限のないifを、Laravelのイベントディスカバリの仕組みを参考にして消し飛ばそうという企画になります。

#三行で

– 際限なく増えるif文が嫌い
– 役割に従い、クラスを分割
– 自動紐付けでifを消す

# 課題
true or false のif文であれば、大したことないです。

“`php
if ($test) {
// some process
}
“`

しかし、複数の値を取りうるパラメータに対する分岐が出てくると、複雑度が増します。
単純な例として、`$status`の値に

元記事を表示

改行文字をタグに変換する方法

# 前提知識

### 改行コードには二種類あります。
 LF(ラインフィールド)  ・・・特殊文字列では、”\n”で表します。
 CR(キャリッジリターン) ・・・特殊文字列では、”\r”で表します。

使われる改行コードは、OSによって異なっており、

“`
unix → LF
mac → CR
windows → CR+LF
“`

を使用しています。

この、CR,LFという文字は、あくまで人間がわかりやすいように改行コードに名前をつけたもので、実際の改行コードは、16進数の非負数です。
ウェブで使われるS-JIS,UTF-8,UTF-16はASCIIを拡張して作られているので、改行コードはすべて同じで

“`
LF = 0x0A
CR = 0x0D
“`

と決められています。

# 改行文字をタグに変換する方法
大抵の場合、このメソッドを使えば大丈夫です。

“`
nl2br($string)
“`

 nl2brは改行コードの前に改行タグを埋め込むメソッドなので、改行コードを一切残したくない場合はstr_replaceを使います。

元記事を表示

Laravelで画像サイズを変更して保存する方法がめちゃめちゃ簡単だった話

はじめまして!qiita初投稿です?

最近Laravelで開発することが増えてきて、その中でも便利だなーと思った「画像サイズの圧縮」について書きます。

随時間違っている部分などは訂正していくと思います。ご指摘もいただけると嬉しいです?

# 開発環境

PHP 7.3.11
Laravel Framework 6.5.1
Composer version 1.9.1

## Laravelで画像処理をする。
今回自分は「interventionImage」というパッケージを利用して、画像サイズを小さくして保存を実装しました。

interventionImageはphpの画像処理ライブラリGD LibraryとImagickをサポートしています。

自分はGD Libraryを使用して実装しました。

GD Libraryのインストール方法は環境によっても変わってくると思うので、お使いの環境に合わせてインストールしてください。

## 実装までの流れ

interventionImageの公式はこちら
http://image.intervention.io/getting_

元記事を表示

今後のShizuoka.phpについて

これは、[静岡 Advent Calendar 2019](https://qiita.com/advent-calendar/2019/shizuoka)の5日目の記事となります。

静岡でPHPの勉強会なかったので、今年から[Shizuoka.php](https://shizuokaphp.connpass.com/)をはじめました。
JavaScript, Python, Go, Haskell, Rubyの勉強会は開催されているのにPHPがない・・・。
そんな危機感をもってから5年ぐらい経って、やっと今年#1を開催できました?

## 定期的に続けて行きたい
3 ~ 4ヶ月に一度開催できればいいのかなと。
頻度そんなに多くはできませんが、定期的に開催していこうと思っています。
だから来てね!

## ロゴできたよ!
refs: https://twitter.com/planpot/status/1201411166162931712?s=20

@planpot先生にロゴを作ってもらいました?
爆速で作っててマジで感動しました!!!!

## 静岡で勉強会を主催する事に

元記事を表示

WordPress 学習メモ 第1回

急遽WordPressを触らないといけない事になりキャッチアップのフローを、ノート代わりにまとめていきます。
主に自分の学習の流れを振り返りで残す形なので色々、省いてます。
Webエンジニアの諸先輩方からアドバイスやご指摘を頂けたらありがたいです!

#学習を始める前に
今回の目的は環境構築を行う事です。

既に存在する本番環境と同じ物をローカル環境に構築するのが、最初のスタートでした。
そもそもどうやって環境構築しようかなと思ってた際に、参考にさせて頂いたサイトです。
これがめちゃくちゃ簡単に環境を構築できたので驚きました。

[超簡単にローカル環境が構築できるLocalbyFlywheelの使い方](https://bazubu.com/local-by-flywheel-33920.html)

#本番サイトと同環境を構築する方法!

さて、環境構築が完了し、本番と状態にする際の手順を紹介します。
[たった3ステップでサイトの引っ越しが完了するプラグイン「All-in-One WP Migration」が簡単すぎ!](https://www.vektor-inc.co.jp/po

元記事を表示

PHPで高速・省メモリ・確実に日本語CSVを扱う方法

# 結論

– `composer require fw3/streams`として[fw3/streams](https://packagist.org/packages/fw3/streams)を使えば、日本語CSV取り扱いにおける労苦から解放されるよ。
– ラッパーメソッドもいいけど、[\fgetcsv](https://www.php.net/manual/ja/function.fgetcsv.php)関数、[\fputcsv](https://www.php.net/manual/ja/function.fputcsv.php)関数、[\SplFileObject](https://www.php.net/manual/ja/class.splfileobject.php)を使ってもシンプルに実現できるかもしれないよ。しかもより高速に動作する。
– 取り急ぎ”PHPで高速・省メモリ・確実に日本語CSVを扱いたい”場合は[使い方](#使い方)へどうぞ。

# 必要なもの

PHP 7.2.0以降のPHP + ext-mbstring + [fw3/streams](https:

元記事を表示

PHPにてエラーが起き、画面が真っ白になった時の対処(エラー表示の仕方)

PHPを使ってカレンダー機能を実装したいので

枠組みを作り、あとは中だけ。

requireにて外部ファイルと組み合わせてみると、さっきまで表示されていた枠組みまでもが消えてしまった。

きっと中のコードがエラーを起こしたことが原因だなと思ったので

まずはエラーが起きてしまっている場所を特定する必要があるので「PHP エラー 表示」で検索。

PHPにてエラーの場所を特定するには

“`php

“`

を**コードの一番上に書けばphp.iniでエラー表示設定することなくエラー場所を表示できる**らしい。

ちなみに、出てきたエラー表示は

“`php
Parse error: syntax error, unexpected ‘mktime’ (T_STRING), expecting ‘)’ in /Applications/MAMP/htdocs/calender_index.php on line 13
“`

と表示されたので13行目をチェック。

なんと、「,」が抜けていたことが原因

元記事を表示

【Wordpress】投稿ページ(single.php)において、複数ページ(複数テンプレート)に出し分ける方法

##実現したかったこと
###ひとつの投稿において、情報によってページを切り替えられるようにしたい
投稿が一つのお店のページになっていて、さらにタブでメニューやクーポンをぶら下げるような作りに。
要は食べログやぐるなびのイメージです。
各ページの出しわけは、URLにパラメーターを追加することで判定します。

投稿(美味しい餃子 渋谷店)のトップURL
https://hogehoge.com/cat/美味しい餃子渋谷店/

投稿(美味しい餃子 渋谷店)のメニューURL
https://hogehoge.com/cat/美味しい餃子渋谷店/?info=menu

投稿(美味しい餃子 渋谷店)のアクセスURL
https://hogehoge.com/cat/美味しい餃子渋谷店/?info=access

##やること
###1. テンプレの用意
トップ用のテンプレとは別に、menu用、access用のテンプレを用意します。
single.php
single-menu.php
single-access.php

###2. function.phpにフィルターフックを追加
singl

元記事を表示

wordpress 公開サイト移行のちょっとした手順

# はじめに
案件でwprdpress構築を任せていただき、クライアントオッケーがでて、いよいよ公開!のタイミングになりました。
スムーズにクライアント希望時間に公開できるようにいろいろと下準備をしましたので、メモ代わりに書きます。
(実際には、まだ公開はしていないのでミスが発覚したら、随時書き換えます。)

# 経緯
とあるサイトにて、40ページ近くあるコンテンツを最初はhtmlで組んでほしいとの依頼で制作をしたものの、やはり自分たちで更新をしたいからCMS(wordpress)で作り直してほしいとのことで再度制作。

# 環境
新規でドメイン・サーバー(xさん)を契約し、htmlファイルを置いていました。
サブドメインにwordpressをインストールし、basic認証をかけながら構築を進めました。
なので、実質wordpressでの新規のサイト構築といったかんじです。
cssやjsは手を加えなくて済んだんで、助かりました〜。

# WP構成
## サブフォルダ
wordpressのインストール先をテスト・公開ともに、フォルダを一つかましています。
`home/public_htm

元記事を表示

[jQuery + php] 簡易ソートアプリ作成してみた(デザイン込)

簡易的なアイテムソートできるアプリを実装してみましたので
記録しておきます。

# 成果物
ファーストビュー
スクリーンショット 2019-12-05 20.13.07.png

ソートビュー
スクリーンショット 2019-12-05 20.13.20.png

# コア機能
○フィルターソート機能(jQuery)
|- カテゴリーボタンを押したらカテゴリーのアイテムのみ表示

○一部php化(v5.6)
|- 簡易アプリなのでデータ

元記事を表示

Herokuで自分のサイトを公開する方法  〜DBとの接続、GitHubからdeployまで〜

自分で作ったサイトを簡単に公開できる、Herokuの導入方法について紹介します。

##Herokuとは??
Heroku(ヘロク)は大まかに説明すると、PHPやPythonなどのプログラミング言語を用いて開発したWebアプリ、WebサービスなどをWeb上で簡単に公開できるというサービスです。今回はPHPで作ったサイトを公開することをメインに説明していきます。

##事前準備
まずは、進めていくに当たってこの準備が必要になります。
まだの方のために隣にリンク貼っときます!

– Herokuのアカウント作成     https://jp.heroku.com/
– GitHubのアカウント作成     https://github.com/
– Sourcetreeのインストール    https://www.sourcetreeapp.com/
– homebrewのインストール    https://brew.sh/index_ja

##heroku CLI(旧Heroku toolbelt)のインストール
[こちら](https://devcenter.heroku.com/

元記事を表示

【Laravel 6.x】マイグレーションでMySQLデータベースのテーブルを作成・編集する

Laravelではデータベースのテーブルを作成・編集する方法としてマイグレーションという仕組みが用意されている。

### 前提

– Laravel 6.6.1
– PHP7.3
– MySQL 5.6

#マイグレーションの流れ

マイグレーションの流れは大まかに言えば、次の3ステップ。

1. マイグレーションファイルを作成する
2. マイグレーションファイルを編集する
3. マイグレーションを実行する

## 1.マイグレーションファイルを作成する

マイグレーションファイルを作成するには、`php artisan make:migration` コマンドを使う。テーブルを新規作成する場合とテーブルを編集する場合でオプションが異なる。

### 1-1.テーブルを新規作成する場合

“`terminal:コマンド
$ php artisan make:migration 名前 –create=テーブル名
“`
このコマンドを実行すると `タイムスタンプ_名前.php` のファイル名で、`database/migrations` にファイルが作成される。

例えば、

元記事を表示

Laravel view composerでロジックを一箇所にまとめよう!

# この記事について
## あらすじ
自社サービス開発の中で共通でuser情報を使い回している箇所があり、その部分が煩雑な書き方になっていたので、処理をどこか一つにまとめたいと思っていました。

# やりたい事
– 共通でuser情報を使い回しているを共通化する。
– ヘッダーのbladeファイル以外でサイドバーなどの箇所でもuser情報を使いたい。

# やってみた事
– Laravel view composerを使って、処理を共通化する。

# view composerとは?
ビューコンポーザはビューがレンダーされる時に呼び出される、コールバックかクラスメソッドのことです。

ビューがレンダーされるたびに結合したい情報があるなら、ビューコンポーザがロジックを一箇所にまとめるのに役立ちます。

## 処理イメージ図
スクリーンショット 2019-12-05 17.40.11.png

  • OTHERカテゴリの最新記事