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

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

[WordPress] 投稿をAjaxで読み込む時にプラグインのShortCodeが発動しない時のTips

# はじめに
WordPressテーマ開発をしている中で、

* WordPressの投稿をAjaxで取得
* 何かしらプラグインのショートコードを`do_shortcode()`する

っていうことは、それぞれよくやると思う。でもこの2つがかけ合わさった時に色々と手こずったので知見をメモしておきます。せっかく早起きして優雅に始まった朝がめちゃニッチなデバッグに消えたので、この記事で他の誰かの優雅な朝を守りたい。

ちなみに自分が手こずったのは[AddToAny Share Buttons](https://ja.wordpress.org/plugins/add-to-any/)というプラグインで、なぜかAjax経由だとアイコンが表示されない。最終的にはプライグイン独自の仕様の問題だったのでとにかく解決策を知りたい方は[最終セクション](#addtoanyをajaxで読み込む時は)を見ると良いです。

# WordPressでAjaxを使う時のお作法
そもそもWordPressでAjaxを使う時にはお作法が決まっていたので基本としてメモ。

### Ajaxリクエストを投げる場所
W

元記事を表示

Laravel マイグレーション時にエラーが出て困った話

# 目的

– 初回マイグレーション時にエラーが出力されて解決した話をまとめる

# エラー内容

– エラー`SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ `を筆頭としたエラーが出力された。
– 下記にマイグレーション時のコマンドとエラー内容を記載する。

“`terminal
$ php artisan migrate

Illuminate\Database\QueryException

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES) (SQL: select * from information_schema.tables where table_schema = calculation_drill_app and table_name = migrations and table_type = ‘BASE TABLE’)

at vendor/lar

元記事を表示

WordPressから特定の記事以外を全て削除

# はじめに
Wordpressで特定の記事以外を消したい時のTipsを載せておきます。
記事を2000件持っていて、その中で特定の100件だけ残して、他は全部消したい、みたいな場合を想定します。リライト記事だけ残すような場合に使えると思います。

実行環境 PHP:7.3 / MySQL:5.6 / WordPress:5.4
※DBを変更する際は、元に戻せるように必ずDBやインスタンスのバックアップを取りましょう。

# 削除手順
## 不要記事の削除
1. Workbenchなどのデータベース管理ツールをインストールし、DBへアクセス
2. タイムアウト設定の変更
MySQLWorkbench > Preference > SQLEditorから、
DBMS connection keep-alive interval (in seconds)
DBMS connection read timeout interval (in seconds)
DBMS connection timeout interval (in seconds)
をそれぞれ9999に変更して再起動しま

元記事を表示

PhpSpreadsheetでExcelを読み書きしてExcelとしてダウンロードする

# 概要

[EC-CUBE4の独自プラグイン開発](https://qiita.com/haruna-nagayoshi/items/948b196cf4f5186641e9)で使い方を覚えたライブラリ第二弾。
phpspreadsheetでテンプレートのExcelに文字と画像を出力し、Excelファイルとしてダウンロードする方法について理解したことをまとめました。

ちなみに、私が実装したのはExcel 2007以降のExcelで、拡張子が`.xlsx`のものを指します。以降、Excel 2007のことを`.xlsx`と表現します。(phpspreadsheet内のクラスもそのような命名がされています)

私にとってはphpspreadsheetの使い方そのものよりも、

– アスペクト比を維持したまま画像をリサイズするための計算処理
– ラッパークラスを作ると再利用可能なコードができあがることを実感したこと

が重要な学びだったので、記事として記録することにしました。

# 動作環境

“`
PHP 7.3
Symfony 3.4
EC-CUBE 4.0.3
phpoffice

元記事を表示

PHP7.4にアップデートしてlaravel7系もインストールする

# 概要
PHP7.4とlaravel7をインストールします。
時が経つのは非常に早く、Laravel6系で最新だなんて思っていたら、
7系がリリースされていました。
LTSは6系なので、商用利用などの場合は6系が良いです。
もうすぐ8系が出るかもしれないですが、
その時の要件はPHP7.3以上になりそうとのことで今回はPHP7.4とLaravel7(最新のやつ)を入れます。

参考:
 Laravelアップグレードガイド https://laravel.com/docs/master/upgrade

# PHP7.4にする
Laravel7系でのPHPのバージョンはphp 7.25以上が必要です。
Home-brewは入っている前提で

“`sh
brew search php@7
brew install php@7.4
“`
ログが流れるので静観。
完了したらパスを通します。

“`sh
echo ‘export PATH=”/usr/local/opt/php@7.4/bin:$PATH”‘ >> ~/.bash_profile
echo ‘export PATH=”

元記事を表示

【laravel】ヘルパーメソッドが使えない時の対処法

## 今回はlaravel学習初期でつまづいたエラーの解決法をお伝えします。

今回起きたエラーはこちら。

Image from Gyazo

**エラー文⬇︎**
##### Call to undefined function str_limit()

laravelのヘルパーメソッドである`str_limit`が定義されていません。とのことでした。

laravelのヘルパーメソッド一覧(参照サイト)
メソッドは違うけど上記のようなundefined functionエラーが出ている場合は、以下サイトで検索してみてください。あれば`ヘルパーメソッド`ということです。

[Laravel 5.5 ヘルパ](https://readouble.com/laravel/5.5/ja/helpers.htm

laravel6.xで画像アップロード時にCall to a member function store() on stringエラーが発生したときの対処方法

#執筆背景
laravelを使って画像アップロード機能を実装していたところ、フォームからファイルを添付して送信ボタンを押した際に、

**Call to a member function store() on string**
**413 Request Entity Too Large**

というエラーが発生しました。
これについての対処方法をまとめていきます。
#結論
このエラーは、nginxの最大ファイルアップロードサイズのデフォルト値よりも大きいファイルをアップロードすると起こるエラーです。
(ちなみにデフォルト値は、2MBに設定されています。)

解決方法としては、
**nginxの設定ファイルに記載されている最大ファイルアップロードサイズのデフォルト値を任意に変更する**
ことで解決します。

参考記事 → https://www.keycdn.com/support/413-request-entity-too-large

#作業内容
nginxのファイルの場所は開発環境によって変わりますが、
**今回はHomesteadを利用した開発環境での作業内容を記載するため

簡易的なPHP開発環境

簡単なPHPを使ったサイト(データベースなどは使用していない)の確認を行いたい。
でもウェブサーバ建てるのは面倒すぎる…
という人向け

“`bash
cd
sudo php -S localhost:80
“`
あとは`http://localhost:80`にアクセスすればおk

### 追加情報
`-t`でディレクトリを指定できるようです。

“`bash
sudo php -t -S localhost:80
“`

【初心者向け】PHPで簡単なCRUD機能を実装するための手順

初めまして、やんと申します。
現在Webエンジニアへの転職を目標に、プログラミングを独学で学習しております。また、Twitterで学習内容について日々発信をしています。

[やん@公務員×独学プログラミング](https://twitter.com/yansabro)【Twitterアカウントのリンク】

現在PHPを学習中で、初めてCRUD機能をもつ作品を完成させることができました。自分のアウトプットも兼ねて、PHP初心者向けに解説記事を書いていこうと思います。

また、この記事をご覧になる前に下記の留意点について目を通していただくようお願いします。

**【留意点】**
本記事は、主に筆者がCRUD機能作品を完成させるまでに行ったこと・行った方がよかったことについて記述します。効率的な開発方法を解説するものではございません。プログラミング初心者の立場で解説をしてみるという試みです。
記事の内容に間違いや改善点などございましたら、ぜひコメントでご指摘ください。自分を含め初心者にとってより学びのある機会になると思います。
ご理解ご協力の程よろしくお願い致します。

Laravel CSS反映されない事件

#前提
フレームワークでLaravelを使用。
ローカル環境にてCSSを当てようと修正し、リロードするもCSSが反映されない事件が発生。

##原因
scss(sass)ファイルはコンパイルしてcssに変換する必要がある。

##解決方法
Laravelにはlaravel Mixというビルドツールが最初から入っているので
ターミナルにて下記、コマンドを入力すると解決。

“`ターミナル
$ npm run dev
“`

サブループの中でカスタムフィールドを表示する方法[WordPress]

## はじめに

タイトルの通り、サブループ処理の中でカスタムフィールドを表示する。

## 背景

コーダーの方から「ループの中でカスタムフィールドが取得できないんじゃい、どしたらいいんじゃい」と聞かれたのがきっかけ

## 1. そもそもサブループとは

WordPressには、WordPress自体が自動で実行するメインループと、自分で抽出条件などを指定するサブループがあります。

#### 1-1. メインループ
* WordPress自体が自動で実行するもの
* ワードプレス起動直後に発行される
* リクエストされたURLに基づいて作成される

メインループがあることで、
>クエリを発行することなく、すでに取得された投稿データを利用してページを生成することが可能

参考文献:https://daeuwordpress.com/query/

##### 基本の表示方法

“`php




Laravel 各種キャッシュクリアコマンド

## 基本的なキャッシュクリア

“`
php artisan cache:clear
“`

## configのキャッシュクリア

“`
php artisan config:clear
“`

## ルーティングのキャッシュクリア

“`
php artisan route:clear
“`

## viewのキャッシュクリアキャッシュクリア

“`
php artisan view:clear
“`

## 強力なキャッシュクリアコマンド

“`
composer dump-autoload
“`

## Configのキャッシュファイル削除

config キャッシュクリアコマンドで消えない場合は描きファイルを削除する

“`
cd laravel_project/bootstrap/cache
rm -f config.php
“`

【初心者目線】herokuにフレームワーク無しのPHPアプリをデプロイする方法

フレームワークを使わずに素のPHPだけでherokuにデプロイする関連記事が少なく、かなり苦戦しましたので自分なりにまとめてみました。

#方法

`$ heroku create {名}`

`$ git remote add heroku https://git.heroku.com/{名}.git`

`$ git init`

`$ git commit -m “test”`

`$ git push heroku master`(この際pushの中にindex.phpが無いとエラーになる)

※詳しくは読み進めていく中でディレクトリ構造のキャプチャがあるのでそちらを参考にしてください。

“`mi:push実際のエラー
To https://git.heroku.com/phpkadai.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to ‘https://git.heroku.com/{名}.git’
“`

PHPの基本個所についての復習①(echo)

#はじめに
PHPの基本についてアウトプットします。
#実行
書き方は色々あると思いますが、次のコードをhtml内に書きます。

“`php

“`

今回はRubyの`puts`に当たる`echo`について書きます。

`Hello PHP!`と出力するには、次のように書きます。

“`php

“`
処理の最後に`;`を忘れないのがポイントです。

変数を使う時は、最初に`$`を付けます。

“`php


“`

このままだと読みにくいので、改行します。

“`php


“`

これで、PHPを使った文字の出力が出来るようになりました。

There is no existing directory at “storage/logs” and its not buildable: Permission denied エラーが出たときの対処法

## 環境

– PHP 7.4.4
– Laravel 7.5.1

## エラー

![スクリーンショット 2020-04-12 17.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/4ca8898d-143a-703c-ae4d-f158a72b9627.png)

“`
There is no existing directory at “/work/backend/storage/logs” and its not buildable: Permission denied
in /work/backend/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php (line 171)
in /work/backend/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php -> createDir (line 99)
in /work/bac

ざっくりとPHPで学ぶ!忙しい人のためのデザインパターン入門③Adapterパターン

# 一言で言うと?
異なるインターフェース、クラスの利用問題等を解決してくれる。(AというクラスとBというクラスがあり、それらの両方の機能を利用したいが、便宜上、互いに呼び出せない時にアダプターとなるCクラスを作り、AもBも利用するというイメージ)

# どんなシチュエーションで使うの?
– 前述にあるように、2つ以上のクラスの機能を効率よく利用したい時など。

# パターン
Adapterパターンには「継承」と「委譲」の二つのパターンがある。
本記事では「継承」をメインに解説。

#実装
## 実装の概要(継承をメインに)
– ロボットクラスと掃除機クラスが存在する(VacuumCleanerクラスとRobotクラス)。
– ロボットクラスと掃除機クラスはそれぞれ「AI」と「掃除」インターフェースを実装している。(ArtificialIntelligenceInterfaceとCleanUpInterface)。
– AIインターフェースではAI機能の作動を司るメソッドを定義。
– 掃除インターフェースでは掃除機能の作動を司るメソッドを定義。
– AIインターフェースを実装したロボッ

VSCode で $もダブルクリックで選択したい(PHPとか)

# 概要

PHPの変数はプレフィックスに `$`が付きます。
VSCodeは標準で単語区切りの認識 `$` が含まれてしまっているため、PHPプログラマがVSCodeで変数名にカーソルを合わせてダブルクリックで選択すると、 `$` が選択範囲に含まれず、コピペの際などに `$` を追加で入力したり、選択範囲を一文字増やしたりなど一手間がかかってしまいます。
そこで、単語区切りのルールを設定変更して、 `$` をダブルクリックで選択できるようにします。

# やりかた

`Cmd + Shift + P` から設定画面を開きます `Preference(UI)` とかです。
開いた設定画面から、 `wordSeparators` を探します。そして `$` を消します。

“`
“editor.wordSeparators”: “`~!@#%^&*()-=+[{]}\\|;:’\”,.<>/?”
“`

ただ、上記のやり方だとすべてに適用されてしまって不都合がある人もいるかも知れません。ですので、PHPだけに適用したかったら、jsonで開いて下記のように設定したほうがいいです。

The stream or file “storage/logs/laravel.log” could not be opened: failed to open stream: Permission denied エラーが出たときの対処法

## 環境

– PHP 7.4.4
– Laravel 7.5.1

## エラー

![スクリーンショット 2020-04-12 16.12.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/906d2056-5703-1ac1-5022-cdca509a5524.png)

“`
The stream or file “/work/backend/storage/logs/laravel.log” could not be opened: failed to open stream: Permission denied
in /work/backend/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php (line 110)
in /work/backend/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php -> wr

Laravel Class view does not exist エラーが出たときの対処法

## 環境

– PHP 7.4.4
– Laravel 7.5.1

## エラー

“`
NOTICE: PHP message: PHP Fatal error: Uncaught ReflectionException: Class view does not exist in /work/backend/vendor/laravel/framework/src/Illuminate/Container/Container.php:805
Stack trace:
#0 /work/backend/vendor/laravel/framework/src/Illuminate/Container/Container.php(805): ReflectionClass->__construct(‘view’)
#1 /work/backend/vendor/laravel/framework/src/Illuminate/Container/Container.php(687): Illuminate\Container\Container->build(‘view’)
#2

PHP学習記#4日目

#カプセル化(Encapsulation)
クラス機能のうち、使い手に必要のないものを隠してしまうこと。ブラックボックス化。外部に対しては、操作しても安全な道具だけを公開する。
#アクセス修飾子まとめ
・public
どこからでもアクセスすることができる。
・protected
現在のクラスとサブクラスでのみアクセスできる。
・private
現在のクラスの中でのみアクセスできる。

##アクセサメソッド
・ゲッターメソッド→参照用のメソッド
・セッターメソッド→設定用のメソッド