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

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

php7.2からeach()関数は非推奨になった

この関数は、配列のkeyとvalueのペアを返す関数ですが、
foreachよりもループが遅く、PHPそのものの変更に伴って実装上の問題を引き起こしたことから非推奨になったそうです。

通常はlist関数と併用することが多いですが、普通にforeachを使えば十分なのであまり困ることはないかと思います。

“`php
// 関数サンプル

$foo = [“test1”, “test2”, “test3”, “test4”];
$bar = each($foo);
var_dump($bar);
“`

“`
出力結果
ーーーーー
array(4) {
[1]=>
string(5) “test1”
[“value”]=>
string(5) “test1”
[0]=>
int(0)
[“key”]=>
int(0)
}
“`

なお、PhpStorm(本環境は2019.2)上では下記のように非推奨関数として打ち消し線が表示されています。

![スクリーンショット 2019-10-31 11.23.58.png](https://qiita-im

元記事を表示

サーバーの PHP バージョンは 5.3.29 ですが WordPress 5.2.4 は 5.6.20 以上のみでご利用になれます。への対策

「AmazonWebServices基礎からのネットワーク&サーバー構築 改訂版」でハンズオンに挑戦中です。

良著ですがAmazonのレビューにもあるように、出版から時間が経っているので、そのままやるとハマります。

## 環境
– MacOS 10.14.6
– WordPress 5.2.4

## エラー内容

『8-3 WebサーバーにWordPressをインストールする』で、WordPress:latest(5.2.4)をインストール後、Apacheを再起動するとトップページにエラー。

`「サーバーの PHP バージョンは 5.3.29 ですが WordPress 5.2.4 は 5.6.20 以上のみでご利用になれます。」`

もしくは

`「お使いのサーバーの PHP では WordPress に必要な MySQL 拡張を利用できないようです。」`

## 解決法

WebサーバーのPHPと関連モジュールのバージョンを7.3にアップデートすると解決しました。

## 手順

※AWSでWebサーバーが構築されている状態を前提とします。

まず、現在のPHPのバージョン

元記事を表示

CakePHP2でformタグ直書きでCSRF対策

#はじめに
CakePHP2でFormヘルパーを使わずにformタグを直書きしたい場合、
CSRFトークンのタグだけを出力するメソッドが
フレームワーク側で用意されていないためCSRF対策で困ることになります。

今回はCSRFトークンのタグを出力する方法を書きます。

#環境
PHP 7.3
CakePHP 2.10
Smarty3

#実装方法
###1.ヘルパーを作成
View/Helperディレクトリに以下のクラスを作成します。
(クラス名などは適当に)

“`php:View/Helper/MyFormHelper.php
App::uses(‘FormHelper’, ‘View/Helper’);

class MyFormHelper extends FormHelper {
public function csrfField(){
return $this->_csrfField();
}
}

“`

デフォルトのFormHelperにて、
_csrfFieldメソッドがCSRFトークンのinputタグを出力しているのですが、
protectedで定義

元記事を表示

wkhtmltopdf+snappyでヘッダー(フッター)をすべてのページに表示させる方法

phpでpdfを作成するときに、ヘッダーをすべてのページに入れる必要があった。
wkhtmltopdf&snappyのオプションを使ってできるとのことだったので実装してみた。

##結論
下記のoptionを指定する。

文字を入れる場合
・header-right
・header-left
・header-center

htmlを入れる場合
・header-html
・footer-html
をオプションで指定する。

##サンプル
“`php
// htmlファイルを読み込む ※htmlファイルを読み込むことも可
$html = ‘

エックスサーバーで運用するLaravelからメール送信の後、バウンスメールを確認する

# PHPでバウンスチェックなんて出来る訳ない??
困るんです。受信ボックスで1件1件確認して、不着のメールを確認して、除外するなんてやってられない。

PHPであれ、Laravelであれ、メール送信した後に、リターンメールでエラーでメールが戻ってきたら、確認する方法はありますか??

→無い!

そんな事が沢山のQ&Aで書かれてますが、エックスサーバーに限っては、メールのディレクトリを知っていればできるでしょう。

Laravelをエックスサーバーで使っている方、いるんじゃないですしょうか。

# エックスサーバーのメールはどうなっている?
/home/あなたのエックスサーバーID/ドメイン
フォルダをFTPなりで見てみてください。
/mailというフォルダあります。

サーバパネルで、メールアドレスを作成すると、mailフォルダの中に作成したメールアドレスのフォルダが構成されます。
/mail/ドメイン名/メールアドレス/

何かそのアドレスにメールを送ってみてください。
/mail/ドメイン名/メールアドレス/cur にメールのファイルが入ります。
中身はテキストデータです。

Tinderで右スワイプを自動化!

#Tinderで右スワイプを自動化!

こんにちは!けーすけです!

第一回はTinderの右スワイプ自動化です!
男性の皆さん。おそらく全力無心で右スワイプをしていることでしょう。
その時間を有効に活用できたらいいなーって思いませんか?
**プログラミングでできちゃうんです。**
今回はそんな夢のような機能を実装していきます!
引用元:天才プログラマーKboyさん(https://twitter.com/kboy_silvergym)

##実装していきましょう

めちゃくちゃ大変そう。。と思ってしまったでしょう。
###書くのこの5行だけです。
とりあえずこの5行貼り付けたら動きます。笑

“`javascript:tinderAutoSwipe.js
setInterval (
function () {
const elem = document.getElementsByClassName(“rescGamepad__button”);
elem[3].click();
}, 1000)
“`
###コード解説
setInterval(a, b)

WindowsでCakePHP開発していたらbin/cakeが動かない!?

# bin/cakeコマンドが動かない!?

PHP開発するならやはりUNIXベースのmacOSをおすすめしますが、
windowで開発する人もやはりいるでしょう。

僕もwindowsのvisual studio codeで開発することがあります。

例えばvisual studio codeのターミナルで以下のコマンドを打ったとしましょう。

“`
bin/cake bake model
“`

データベースからbakeできるテーブル名の一覧を取得できるコマンドです。

通常は

“`
Mails
Items
Users
“`

みたいにテーブル名称が返ってきます。

だけどwindowsでやると、、

“`
‘bin’ は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
“`

となるのです。

一瞬、ビビるのですが、なんてことはありません。

**bin/cake**を**bin\cake**にしてあげればいいだけです。
(スラッシュとバックスラッシュの違い)

“`
bin\cake bake model

LaravelでFactoryパターンとFacadeパターンを実践

1ヶ月ほど前に、「Java言語で学ぶデザインパターン」という本を読みました。設計におけるデザインパターンの典型例が23個紹介されている本で、FactoryクラスやBuilderクラスの意図を理解するのにとても役立ちました。
そしてさっそく実務で使う機会があったので、復習も兼ねて簡単にまとめておきます。

## 要件例

ECサイト開発などでは、決済機能が必要になることが多いです。そして複数の支払い方法(代引き、領収書払い)に対応する場合、支払い方法ごとの処理を実装しなければなりません。
今回の例として、下記の3種類の支払い方法がある決済処理を考えてみます。

・代引き
・クレジットカード
・領収書払い

## 実装イメージ

フロントから支払い方法のパラメーターが渡ってくると仮定して、愚直にコントローラーにガリガリ書いていくとこんな感じになります。

“`php:CartController.php

public function Payment(Request $request)
{
if ($request->get(‘pay_way’) === config(‘pay_w

【WordPress】 投稿画面の項目を必須にしたり注釈のテキストを入れたりする。

##なにそれ?
WordPressの投稿画面のカスタマイズ。
– タイトルの入力ボックスの上に注釈を入れる
– カスタムタクソノミーを必須にする
– アイキャッチ画像の下に注釈を入れる

カスタムタクソノミーで検索しても出てこないからめっちゃ苦戦した。
カテゴリで検索しても良いと聞いて検索してみたらすんなり出てきたよ。

##タイトルの入力ボックスの上に注釈を入れる

“`php:function.php
// タイトル注釈
function 関数名($post){
if( $post->post_type == “カスタム投稿タイプ名” ){
echo ‘

※12文字まで

‘;
}
}
add_action( ‘edit_form_top’, 関数名 );
“`
**※一応書いておくと関数名とカスタム投稿タイプは英語。
文字と文字の間に記号が使いたい場合は_を使う。-は使わない**

###参考サイト
[[WordPress] カスタム投稿の投稿画面に注意文や説明文を加えるカスタマイズ | 株式会社カンマン](http

和暦

“`php:getWarekiAttribute.php
‘令和’,
19890108 => ‘平成’, 19261225 => ‘昭和’, 19120730 => ‘大正’, 18680125 => ‘明治’,
// 江戸
18650501 => ‘慶応’, 18640327 => ‘元治’, 18610329 => ‘文久’, 18600408 => ‘万延’,

PHPでCSVの読み書き

# メモ
これまでPHPでCSVを読み書きすることが何度かあったので、
なんとなくライブラリ化して置いといたもののメモです。

fgetcsv(でしたっけ?)は便利ですが、これだけだとその後に配列まわしてガチャガチャしないといけないのがめんどくさいです。
ので、オブジェクトに変換するところと、1レコードずつ処理する場合forとか書かないようにとラップしたものです。

# パッケージ
[mya-zaki/csvert](https://packagist.org/packages/mya-zaki/csvert)

# 使い方
## オブジェクトに変換
– 読み込むCSVの構造をRecordクラスを継承して定義。
– RecordクラスはArrayAccess, JsonSerializableをimplementsしている

“`

[PHP] CentOS 8にPHPとOCI8をインストールするメモ

# はじめに

CentOS 8にPHPとPHPからOracle接続するための拡張をインストールします。

# 手順

## Oracle Instant Client をインストール

https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html から RPM をダウンロードします。

BASIC パッケージと SDK パッケージです。

“`console
sudo rpm -Uvh oracle-instantclient19.3-basic-19.3.0.0.0-1.x86_64.rpm
sudo rpm -Uvh oracle-instantclient19.3-devel-19.3.0.0.0-1.x86_64.rpm
“`

クライアントバージョンをどれにするかは、Oracleのサポートドキュメントを参照してください。

https://www.oracle.com/database/technologies/faq-instant-client.html

CakePHP3でdebug()関数が効かない時

# debug()関数が効かない!?

メモ用。

変数やオブジェクトの中身を確認したい時、debug()関数が便利です。

“`
AppTests->find()->where([‘AppTests.id’ => $testId]);

debug($assets);
“`

上記のように記述することで、$assets変数の中を確認することができます。
ブラウザ上などで確認が可能。

## なぜか中身が見えない時

debug関数を使っても、中身が確認できない場合は、DEBUGモードがOFFになっている可能性があります。

### 「config>app.php」を確認
“`
true,
“`

上記のようにデバッグモードがtrueになっていたら問題ありません。

ただし、本番環境ではここをOFFにしてください。

php7.1から「$this」の矛盾の修正がされている!?

phpでは`$this`は特別な意味を持ちますが、
php7.1から変数名として使ったり、値の代入ができないようにきちんとチェックをすように修正されているとの記述を公式のDocumentを見ていて知りました。

むしろ、当たり前のように使っていたからphp7.0まではチェックしていなかったことを知りませんでした…

以下、公式の引用

> PHP において $this は特別な変数という扱いですが、 これが他の場所で変数名として使われていたり再代入されていたりしないことを、 きちんとチェックできていませんでした。 これを修正してきちんとチェックするようになったので、 $this をユーザー定義の変数名として使ったり他の値を再代入したり、 グローバル変数にしたりすることはできなくなりました。

https://www.php.net/manual/ja/migration71.other-changes.php

LaravelでAmazon MWS APIを使用し注文情報を取得する

## 事前準備
Amazon MWSのアカウント:申請してから1ヶ月くらいかかります。

## ファイルをダウンロードしてきます
Composerは使用できないので、以下より注文用のファイルをダウンロードします。
https://developer.amazonservices.jp/phpclients

## Laravelに追加
今回は `appp/Libraries`というディレクトリを追加し、
そこに上記でダウンロードした `MarketplaceWebServiceOrders` をフォルダごと追加します。

## composer.json に設定を追加
以下のようにします。

“`composer.json
“autoload”: {
“classmap”: [
“app/Libraries/Amazon/MarketplaceWebServiceOrders/Client.php”
],
// その他設定
}
“`
そして `composer dump-autoload` を実行

PHP5.6以降は以下でひっかかるので条件追加

“`php

【忙しい人向け】カップ麺より早く作るDockerでLaravel開発環境構築

わずか3行。コピペするだけ。

“`shell-session
git clone git@github.com:ucan-lab/docker-laravel.git
cd docker-laravel
make create-project
“`

http://127.0.0.1:10080

## Build for Windows

https://github.com/ucan-lab/docker-laravel/wiki/Build-for-Windows

## GitHub

https://github.com/ucan-lab/docker-laravel

## 参考

– [Laravelの開発環境をDockerを使って構築する](https://qiita.com/ucan-lab/items/17c806973e69792ada99)
– [【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン](https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4)

【Laravel】Routingの書き方のおすすめは?

## この記事の意図

LaravelのRoutingはなかなか自由に書くことができます。なので一旦どう書くといいんだ?
的なことが僕には怒っています(いえ、起こっています)なので個人的におすすめを披露。

## RoutingのBestを探すメリット

– 探しやすい
– 可読性があがることで管理しやすくなる
– セキュリティー面で確認しやすい

## RoutingのBestを探すデメリット
– たぶんないのでレッツBest
– つかれるのかも

## 結論
いろんなパターンを書くのが面倒なのでいきなり結論。
結論についてだけ解説します。

まず、著者の著書を紹介するサイトだと想定してください。
なので著者は著書を大量に持っています。

“`PHP:web.php

LaravelのwhereHasでの条件指定でクエリスコープが使える

## はじめに
Controller内での条件指定が複雑になり読みにくくなってしまったので、勢いで試してみたらできたのでそのメモです
(検証環境はver6.4)

## やってみた
前提として[公式のドキュメントあるある](https://readouble.com/laravel/6.0/ja/eloquent-relationships.html)のブログシステムで関連した多くのPostモデルを持つUserモデルでやってみる
(下記みたいなやつ)

“`php:\App\User.php
/**
* ユーザーの全ポストの取得
*/
public function posts()
{
return $this->hasMany(‘App\Post’);
}
“`

### よくあるパターン

“`php:下書きの記事(post.status=0)があるユーザーであるか
\App\User::find(1)->whereHas(‘post’, function (Builder $query) {
$query->where(‘status’, 0);
})-

【Laravel】MySQL5.6→JSON形式のデータ→曖昧検索

##前提条件

テーブル:favorite_fruit

|id |data |
|—|—|
|1 |{“fruit”:[“apple”, “banana”, “orange”]} |
|2 |{“fruit”:[“plum”, “pear”]} |

検索ワード

“`
$keywords = [‘banana’, ‘melon’];
“`

MySQL5.6

##Laravel
“`
$fruit = DB::table(‘favorite_fruit’)
->where(function ($sub) use ($keywords) {
foreach ($keywords as $keyword) {
$sub->orwhere(‘favorite_fruit.data’, ‘like’, ‘%”fruit”:[%’. ‘”‘. $keyword. ‘”‘. ‘%]%’);
}
});
“`

##最後に
MySQL5.7からはJSONが普通に使える

dockerでPHPの開発環境を作ってみた!

#目的
今後、仕事で生かすためにdockerで様々な開発環境を作ってみる。
その一環として、PHPの開発環境を作成する。

#作成する環境
・php:7.2
・apache
・mysql:5.7
・phpmyadmin

#手順
①docker-compose.ymlを作成
 ※コンテナの指示書
②php.iniを作成
 ※phpの設定ファイル。マウントする。
③コンテナ実行
 docker-compose up -d
④index.phpを作成
⑤webサーバにアクセス
 http://localhost:8080/
⑥phpmyadminにアクセス
 http://localhost:4040/
⑦コンテナを破棄する
 docker-compose down

#各作業抜粋

##①docker-compose.ymlを作成

“`docker-compose.yml
version: ‘3’

services:
php:
image: php:7.2-apache #apache込みphpイメージ
volumes:

hoge hoge2 hoge3 hoge4 hoge5
hogehoge