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

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

Laravelのmiddleware authを理解したい(6.x)

以前書いた、[Laravelのmiddleware authを理解したい (5.5)](https://qiita.com/darum/items/d53924177a7285a5c152)から、約2年経過しましたが、LTSも新バージョンが出ているので、差分を理解するという意味も含めて6.xについて調べてみることにしました。

例によって、[Laravelのmiddleware authを理解したい](https://qiita.com/washio12/items/59f5cde23b4205973c6b) と同じ構成です(感謝です!)

# 環境
Laravel 6.18.6 ([laravel/framework](https://github.com/laravel/framework) のSHA: 4ef5f9612c2694c915f53f0cec3e4081e9bfc778)

# 調査


※ `make:auth` artisanコマンドがなくなりました!

[マニュアル](https://readouble.com/laravel/6.x/ja/authent

元記事を表示

CakePHPのvirtualFieldSeparatorを変更する

## はじめに
– **これはバッドノウハウです**
– 諸々の事情で**どうしてもこれしか方法がない!**という場合の最終手段です
– CakePHP3.x以降では仮想プロパティに置き換えられたため、この方法は使えません
※参考 [afterFind イベントやバーチャルフィールドはありません](https://book.cakephp.org/3/ja/appendices/orm-migration.html#afterfind)

## TL;DR
– virtualFieldSeparatorが含まれるテーブルカラム名があると結果セットが想定通りにならない
– virtualFieldSeparatorを変更することで想定通りの結果セットを得られる
– 正しい対応方法はテーブルカラム名を修正できるならする、カラム参照しているコードも修正する(なのでバッドノウハウ)

## 結論
“`php
$db = $this->getDataSource();
$db->virtualFieldSeparator = “___”;
$res = $db->query(”
SEL

元記事を表示

座標を使ってPDFを出力するTCPDFの使い方

# 概要

[EC-CUBE4のプラグインを開発する際](https://qiita.com/haruna-nagayoshi/items/948b196cf4f5186641e9)、帳票をPDFで出力する機能を作り、TCPDFというライブラリで座標を使って描画する方法を学んだのでまとめました。

明日突然記憶喪失になったのになんらかの理由によりPDF出力機能を実装しなければならない状況に陥ったとしても、この記事を読めば線、表、画像の描画といったひととおりの実装はできる、というレベルを目指して丁寧に書きました。
**使い方だけを知りたい人は「基本」「応用」の項を読んでください。**
※EC-CUBE4で既に導入されているライブラリのため、composerで新たに追加する方法は本記事では説明しません。

TCPDFはHTMLで描画することも一応可能ですが、座標を使って描画することに慣れたほうが楽だと今は考えています。

# 動作環境

“`
EC-CUBE 4.0.3
Symfony 3.4
PHP 7.3
TCPDF 6.2.26
“`

# TCPDFについて

「PDF PHP

元記事を表示

フォトクリエイトのチーフエンジニアを退任しました

## はじめに
先日、ツイート[^tweet]しましたが、2020年3月末で、フォトクリエイトさんとの業務委託契約を終了しました。
自動的に、チーフエンジニアも退任ということになりました。

過去に、チーフエンジニアになりましたという記事[^chief_engineer]を書いた以上、チーフエンジニアでなくなりましたという記事も必要だろうということで、振り返りしてみようと思います。

## やってきたこと
フォトクリエイトでやってきたことについては、アドベントカレンダーなどに記事を投稿しているので、興味ある方はご覧になってください。

– [Symfony2のプロジェクトにひたすら機能テストを書いた話](https://qiita.com/imunew/items/9fc2cdb184d7ffd4682c)
– [リモートワークの業務委託だけどチーフエンジニアになりましたという話(Photocreate Advent Calendar 1日目 )](https://qiita.com/imunew/items/257c943cb92661629b96)
– [ららびゅう座談会を開催しま

元記事を表示

include_pathについて整理

# include_pathとは
– require()、include()、fopen()、file_get_contents()などのPHPのファイルを読み込む関数がファイルを検索するディレクトリのこと。
– php.iniに設定しておくことでフルパスや相対パスで指定しなくても読み込める。
– 「環境変数PATHに通す」のと似たような感じ

# 相対パスを指定した時の優先度
– ※include(),require()関数しか調べてません
– パスを指定しない場合
– まずinclude_pathから探す
– 無ければスクリプトと同ディレクトリから探す
– 相対パスあるいは絶対パスを指定した場合
– まずスクリプトと同ディレクトリから探す
– 無ければinclude_path

# コマンドラインでinclude_pathの設定を確認したいとき

“`php
php -r ‘echo get_include_path() . “\n”;’
“`

# 参考
http://engineer-memo.goodhead.work/pages/212

元記事を表示

cakephp チュートリアル Blogでつまづいた話

#はじめに
会社に入社して会社行ものために、php(cakephp)を学ぶ研修で、cakePHPのチュートリアル(主にBlog)をしたときに、つまずいた点を記事として残そうかと思います。

*ブログチュートリアル
https://book.cakephp.org/3/ja/tutorials-and-examples/blog/blog.html

#つまずいた所
*admin権限ではないユーザーがログインした場合のアクション権限

=>ユーザーが投稿した記事のみ編集・削除できる機能実装(ほんとに最後…)

ここにすごくcakephp初心者の自分は苦労しました…

#認可(誰が何にアクセスするのを許可するか)

##ログインしてるのか・してないかでアクセスを分ける
まずユーザーの種類にadmin(管理者)とauther(著者)の2種類あります。

そこの使い分けはまず、全体に認証をかけたいようなときはAppControllerappcontrollerでAuthコンポーネントの設定します。

*ちなみに、コントローラの拡張をコンポーネント!モデルはビヘイバー!Viewはヘルパ

元記事を表示

Docker で立てた WordPress を検証した後からブラウザで特定ポートへのアクセスができなくなる

# 問題

– ローカルで WordPress を Docker で構築した
– 使ったイメージは [ここ](https://hub.docker.com/_/wordpress/) のDocker Official
– ページに記載されている通り `-p 8080:80` のポート割り当てで起動
– この時点で初回の検証をする場合は特に問題は起きなかった
– 改めて起動して `http://localhost:8080` にアクセスすると、 `http://localhost` にリダイレクトされてアクセスできない
– WordPressコンテナを落として次の日、WordPress 以外のアプリケーション開発で `http://localhost:8080` にアクセスすると `http://localhost` の表示となり、`8080` にアクセスできていないように見える
– ただし、`/` 以外 ( `http://localhost:8080/login` など ) にアクセスはできる
– curl などでは普通に `http://localhost:

元記事を表示

PHP学習記 #4日目

#sprintf関数
指定したフォーマットで文字列を生成する。

#オブジェクト指向プログラミング

##プロパティとは
クラスの中で定義された変数のことである。メンバ変数とも呼ばれる。プロパティとして変数を定義する場合、アクセス修飾子を頭につける必要がある。

##コンストラクタ
インスタンス化のタイミングで実行される特別なメソッドである。何らかの戻り値を返す必要がない。

##デストラクタとは
コンストラクタとは逆に、オブジェクトが破棄されるタイミングで実行される。何らかの戻り値を返す必要がない。

##静的メソッド
静的メソッドとは、インスタンスを生成しなくてもクラスから直接に呼び出せることメソッドのことである。静的メソッドを呼び出すのには、「::」演算子を利用する。

##クラス定数とは
classブロックの中で定義された定数のことである。

元記事を表示

2020年版 VSCodeの良さげな拡張機能紹介

日々VSCodeをより気持ちよく使用するために拡張機能の探求は欠かせません。
今回は私の独断と偏見で良さげな拡張機能を紹介します。

# 見た目編

## Peacock
https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199056/c36a6ecc-4c1b-f390-2de0-f9eda473805d.png)

VSCodeのウィンドウをおしゃれにできます。
私は複数の環境(プロジェクトやプログラミング言語)を使い分けるので、ウィンドウごと色を変えることで気持ちも一緒に切り替えています。

![ウィンドウ](https://github.com/johnpapa/vscode-peacock/raw/master/resources/hero.png)
公式より拝借

## Ubuntu VSCodeTheme
https://mar

元記事を表示

PHPのビルトインサーバ

# どういうときに使うか

ブラウザでPHPからの出力(HTMLなど)を確認したいとき

# どのようにするか

– 以下をターミナルから打つことで簡易的なウェブサーバを立てることができる。

“`php
php -S localhost:8080
“`
– このコマンドの後に出てくる”Listening on”以降がURLとなる。
– 何も指定しなければドキュメントルートはカレントディレクトリとなる。
– -tオプションを使えば明示的にドキュメントルートを指定できる。

“`php
php -S localhost:8080 -t /var/www/test
“`
# 参考
https://qiita.com/drafts/7c8d8fad5815f98fc143/edit
https://xn--web-oi9du9bc8tgu2a.com/php-web-server/

元記事を表示

不正アクセスを防ぐためのパーミッション設定 | EC-CUBEユーザーグループ合同勉強会

# 今回は文字が多いので Qiita スライドモードでお送りします

—-

## 自己紹介

– 名前: 大河内健太郎(@nanasess) 年齢: 43才
– 出身: 愛知県西尾市一色町
– 在住: 大阪市(四天王寺の近く)
– 前職:寿司屋の板前
– 資格: 調理師・ふぐ処理師
– EC-CUBE コミッター・公式エバンジェリスト
– 最近のマイブーム: [#おうち寿司](https://twitter.com/nanasess/status/1247567924635680770)

—-

# [EC-CUBE セキュリティチェックリスト](https://qiita.com/nanasess/items/91209dacdd505c80e2f6) のパーミッション設定を、もう少し深堀りします

—-

## EC-CUBEにおける不正アクセスの原因の多く

– 見えちゃいけないファイルが見えていた
– 他の CMS や CGI の脆弱性攻撃
– OSコマンドインジェクション
– SQLインジェクション

*当社調べ*

—-

## 見えちゃいけないファイル

元記事を表示

PHP組み込みのDateTimeクラスの定数を使えば日時フォーマットを頑張って書かなくて良い

PHPの場合はDateTimeクラスに定数が定義されているので、それを使うとdateフォーマット表現が簡単でした。
Laravel の Request Validation にも使えます。

ref: https://www.php.net/manual/ja/class.datetime.php

例えば
`2020-04-08T00:00:00+09:00`
みたいなフォーマットを表現したいとき、
`DateTime::RFC3339` で表現できます。
この定数の中には `Y-m-d\TH:i:sP`が入っています。

ここで最後のPが何を意味するかという情報はPHPのdate関数の項目にまとまっています。
ref: https://www.php.net/manual/ja/function.date.php

一部抜粋。

| O | グリニッジ標準時 (GMT) との時差。時間と分の間にコロンは入りません。 | 例: +0200 |
|:–|:–|:–|
| P | グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 (PHP 5.1.3 で追

元記事を表示

array_spliceで多次元配列に配列を追加する

array_spliceで多次元配列の中に配列を追加したい

“`
親配列
$hoge = [
[‘id’ => 1, ‘name’ => ‘はげ’],
[‘id’ => 2, ‘name’ => ‘ひげ’]
];

追加配列
$add = [‘id’ => 3, ‘name’ => ‘ほげ’];
“`
直で追加配列を指定してみる。

“`
array_splice($hoge, 1, 0, $add);

結果:
[
[‘id’ => 1, ‘name’ => ‘はげ’],
‘id’ => 3,
‘name’ => ‘ほげ’,
[‘id’ => 2, ‘name’ => ‘ひげ’]
]
“`
ぶっ壊れた(・ω・`

なので一度配列で入れ子にしてあげる。

“`
array_splice($hoge, 1, 0, [$add]);

結果:
[
[‘id’ => 1, ‘name’ => ‘はげ’],
[‘id’ => 3, ‘name’ => ‘ほげ’],
[‘id’ => 2, ‘name’ => ‘

元記事を表示

PHP 検索・置換系の引数の順番まとめ

\$needleと\$haystackどっちが先だったっけ?
といつも~~記憶喪失~~悩まされるのでメモ

| 関数 | 第1引数 | 第2引数 | 第3引数 | 第4引数 | 第5引数 |
|:–|:–|:–|:–|:–|:–|
| strpos | $haystack | $needle | $offset | | |
| substr_count | $haystack | $needle | $offset | $length | |
| str_replace | $search | $replace | $subject | $count | |
| preg_match | $pattern

Laravel触って1年経ったので過去の戒め(ソースコード)を改善してみた

# Laravelのリファクタ記事にしようと思ったが、ただただ間違ったコードを直すだけの記事でした。

久々に過去練習用として作成したサイトのソースコードを覗いたら無駄な処理書いてたり、
Laravelの機能活かせれてなかったり~~そもそもPHP使えてなかったり~~と散々だったので、
いい反面教師コードだと思って改善記事(改善というか修正レベル)書いてみました。

目に付いた部分しか改善しないので、一貫性はありませんし、
他の方が絶対やらないような事も多々ありますが、~~戒めとして~~どうか生温かい目で見守ってください。

## 環境

Laravel5.7
PHP7.1

## 注意

改善とはいえ、これがベストとは思ってません。
あくまで出来る時間で簡単な改善(修正)を行っただけです。
その辺り、ご容赦くださいm(._.)m

関係ないところは一部省略します。
例外処理等も省略します。

## フォームリクエストの謎の使い方

FormRequest便利ですよね。
Controllerにバリデーションを書かずに済むので良く使っています。
(他にもControllerで受け取る前の前

?【CakePHP2】js.mapファイルが存在しないエラーの解消法

## 環境
PHP 7.2.21
CakePHP 2.10.18

## やりたいこと
pnotifyを追加したところ、下記の様なJsControllerが無いエラーが多数吐かれていたが動作に問題はなかった
が、このまま放置は良くないので出ないように修正したい

“`error.log
2020-03-04 10:10:58 Error: [MissingControllerException] Controller class JsController could not be found.
Exception Attributes: array (
‘class’ => ‘JsController’,
‘plugin’ => NULL,
)
Request URL: /js/vendor/jquery-pnotify/pnotify.js.map
Stack Trace:
#0 /***/***/***/webroot/index.php(100): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse

fzf.vimでtagsを検索しながら色付きのpreviewを表示する

PHPでせめて定義元ぐらいは辿りたいんだけど、Language Serverが使えない、[phpcd](https://github.com/lvht/phpcd.vim)も使えない、けれど絶対Vim使うってときに、ctagsを使うことにした。他のプラグインとかで何とかなるかもしれないけど、何とかなるって情報が見つけられなかった。

仕方なくctagsでタグを作って[fzf.vim](https://github.com/junegunn/fzf.vim)でpreviewを表示させながら選びたい。

## どういうことか

こういうファイルがあって、test2()を辿りたい。

“`php:caller.php

Laravel の Policy ってどんな場合に使うの?

`特定のリソースに対するユーザーアクションを認可`する仕組みだそうです。
例えば、ブログの記事削除は本人にしかできないようにすることが可能になる仕組みのことです。

Policyを使わないで書くと以下のようになり、

“`php
public function delete(Article $article)
{
if (request()->article()->isNot($article->user)) {
return response([], 403);
}

$article->delete();
}
“`

`ArticlePolicy`を作成すると、

“`php:ArticlePlicy.php
public function delete(User $user, Article $article)
{
return $user->id == $article->user_id;
}
“`

以下のように書ける。

“`php
public function delete(Article $article)
{

PHPでフォームから投稿したテキスト文を表示する際に行ったこと

DBから情報を抜き出して掲示板に内容を出力しようとしたらこんなエラーが発生しました。
スクリーンショット 2020-04-08 18.45.15.png

なんだこれはと思い調べてみると配列関連のエラーだそうで(正直詳しくわかってない)
PHPのために購入したテキスト通りに進めているはずなのにエラーばっかり出るから不親切なテキストですね。

##どうやって解決したのか
そもそもの書き方の問題でした
エラーが起きていた時のコードをうっかりスクショしておくの忘れてしまっていました。申し訳ございません。

“`
//$postにDBに格納されている情報を格納
$post = $db->query(‘SELECT * FROM users JOIN posts ON posts.user_id = users.id’);

本当に初心者向けPHPの環境構築

本当に初心者向けのPHPの環境構築を解説していきたいと思います。

– 1, macOSならMAMPを、WindowsならXAMPPを入れる。
– 2, 起動してApacheをStartする。

以上です。

PHPとかを手動に入れてもいいですが、めんどくさくないですか?
つまづきませんか?それだったら一回、上のようなソフトで環境構築しちゃったほうが良いと思います。