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

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

Laravelのバージョンを確認するコマンド

“`
php artisan -V
“`

もしくは

“`
php artisan –version
“`

元記事を表示

dockerでブラウザシンクを導入して令和のWordPress環境に

![gengou_happyou_reiwa_kakageru.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/373315/d5b8bb80-3c35-f2d0-1f9b-cbd452b12477.png)

## 概要
2017年ぐらいまではほぼWPに食わせてもらっていたというぐらいにWP案件をやりまくっていたものの、そこからPWAなどを触るようになりブラウザシンクやローカル構築に甘やかされまくった結果、WPの仕事が辛くて仕方なくなる

## クリアライン

・ブラウザシンクを入れてローカルのthemeを変更したらブラウザシンクでブラウザをオートリロードさせて開発スピードをアップしたい

## 問題解決に向けて
docker-comopseを導入する
docker-compose.yml

“`
version: “3”

services:
db:
image: mysql:5.7
volumes:
– ./db_data:/var

元記事を表示

PHP基礎構文 ヒアドキュメントとNowdocの構文と違いについて

# TL;DR
– 基礎構文の1つでもある**ヒアドキュメント**と**Nowdoc**の構文に関して
– 基本的に**ヒアドキュメント**で事足りる印象
– **適切さ**でいうと、変数展開を利用しないのであれば、**Nowdoc**を利用すべきなのかもしれない

# ヒアドキュメントとは
文字列を変数に代入、または出力するために利用する機能
機能の特徴柄、主に長い文字列の代入・出力のために利用する事が一般的な利用方法

# ヒアドキュメント構文
“`php
$text = ‘hello’;
echo <<< EOL input text. {$text} EOL; /* * 出力結果 * * input text. * hello */ ``` # Nowdoc構文 ```php $text = 'hello'; echo <<< 'EOL' input text. {$text} EOL; /* * 出力結果 * * input text. * {$text} */ ``` # 構文の違い ## 1. エンドトークンにクォートがついてるかどうか -

元記事を表示

「Chrome 80」でのクッキー(Cookie)の心構え:SameSite=None; Secure

# 概要

2020年2月にリリースされる予定の Chrome バージョン80でサードパーティクッキー(3rd Party Cookie)の扱いが大きく変わり、端的にいうと制限が厳しくなります。

> Cookie を管理しているデベロッパーの皆さんはすぐに準備状況を評価することが重要です。

と本家、Google 様も注意喚起をしております。

これまでブラウザを利用した計測ツールでは**3rd Party Cookie**w利用した手法が一般的でした。
アフィリエイト(トラッキング)やレコメンド広告表示などがその類です。
しかし、Chrome 80 の影響で、この 3rd Party Cookie の扱いが大きく変わります。
**何も対応しないと 今までの Cookie の埋め込み方法では計測等が失敗してしまう可能性があります。**

# Chrome 80 でどうなる?

特定の属性を付与しない限り 3rd Party Cookie にアクセスできなくなります。

>Chrome80 以降、SameSite 値が宣言されていない Cookie は SameSite=Lax として

元記事を表示

AWSでランディングページを立ち上げた話【1.導入編】

コンバージョン率(お問合せ・成約)を上げるため、**ランディングページ**を作ったときの話をする。

当方、ホームページ屋では無いが、専門業者に頼むと金も時間も掛かるので自分でやることになった。
ランディングページではイメージ画像を多用するが、素材は会社が契約する Adobe Stock から購入する。

# ランディングページとは
WEB業界用語である。本サイト(ホームページ)とは異なる自己完結型のページのことを言い、**LP**と略される。
ページが縦長で、縦スクロールで読み進めるのが特徴。営業のセールストークを1枚に書き連ねた感じ。
ページ移動があると訪問者が離脱しやすいので、他ページへのリンクは極力つけないのが一般的。

# サーバ手配
WordPressが動けば良いので、エックスサーバーやさくらサーバなどの国産レンタルサーバ(共用タイプ)で良いのかもしれないが、ここでは自由度と拡張性を重視し、AWSで構築する。
とはいえ、**Amazon EC2** では流石にオーバースペックなので、月額 **$3.50** の固定料金から始められる **Amazon Lightsail**

元記事を表示

広告ブロックをするクライアントに広告を表示させる

こんにちは!

早速ですが、みなさん!
広告ブロックされてますか?

私は利用しています!笑

しかし、あまり公ではありませんが、実際には広告ブロックを回避し、クライアントに表示する方法はあります!

## 検証環境

### PC

– macOS Catalina:`10.15.2`
– Google Chrome Canary:`81.0.4023.0`
– AdBlock(Chrome Extension):`4.1.0`

### モバイル

– iOS:`13.3`
– Safari
– 280blocker:`4.1.1`

## 仕組み

広告ブロックを行うサードパーティ製のアプリケーションによって細かい仕組みは異なります。

あくまで、今回例に上げる

– Chrome拡張機能のAdBlock
– iOS Safariのコンテンツブロッカーである280blocker

を対象としています。

そもそも、広告ブロックを行うにはブロックをする広告を定義した情報が必要です。
その一つとして日本では、[豆腐フィルタ](http://tofukko.r.ribbon.to/ab

元記事を表示

PHP変数のスコープ

#PHP変数のスコープ

##はじめに
PHP7のtry catch構文を書いていると変数のスコープについて、理解できていないと思ったので理解を深めるためにまとめました。また他にPHPの変数のスコープの内容の記事がたくさんありましたが、自分のために残しておくために記述しておきます。

##try catch構文の変数のスコープで疑問
わからなかったのが以下の記述です。テストAとテストBで違う点は最後の行でechoしている`$test`をtry catchの前で宣言しているかしていないかです。
try catchの前に宣言していない、testA.phpは正常に動くのか。`$test`はtryブロックの中で宣言されているためブロックの外側ではアクセスすることができないのではないかと思いました。
答えは動きます。理由は後述します。

“`php:testA.php

元記事を表示

SQLやコマンド実行を書いたときのうっかりを警告するための文字列チェック PHPStan Extension を作った

作った。
https://github.com/nishphp/phpstan-safestring-rule

この前[htmlspecialcharsをチェックする拡張](https://qiita.com/nishimura/items/eb6f4c9040f1b9ddbfed)を作っていて、`PDO->query()`でも同じようなことがしたくなった。
なのでHTMLに限定せずに汎用的にチェックできるようにした。

例えば、

“`php:ProductSearchForm.php
*/
public $categoryIds;

/** @var ?string */
public $queryString;
}
“`

こんな

元記事を表示

【Laravel】LaravelDB.com がVersion2にアップデート 2020年1月11日(ER図→CRUD自動生成ツール)

#LaravelDB.comが2020年01月11日 Ver2にバージョンアップしました!
[https://laraveldb.com](https://laraveldb.com/)
LaravelDB_com.jpg

#主なアップデート

###Validation 追加→ テーブル設計に合わせて生成
例でざっくりテーブルをER図で書いてみました。
以下”t_gsusers”テーブルを中心に見ていきます。

生成されたコントローラーのcrea

元記事を表示

Laravel6 CSV ダウンロードを streamDownload でやるサンプル

streamDownload を使って CSV をダウンロードするサンプルです。Controller の処理だけ書いておきます。
(簡単なサンプルなので、諸々抜けています。)

“`php:controller
public function csvDownload()
{
return response()->streamDownload(function () {
$handle = fopen(‘php://output’, ‘w’);
$list = [[1,’hoge’], [2,’piyo’], [3, ‘fuga’]];
foreach ($list as $row) {
fputcsv($handle, $row);
}
fclose($handle);
}, ‘sample.csv’);
}
“`

公式ドキュメント => https://laravel.com/docs/6.x/responses#file-downloads

以下のような

元記事を表示

フリーメールドメイン一覧

# 背景

会社で**「フリーメールからの登録をブロックしたい!」**という要望があり,手前味噌でフリーメールドメイン一覧を集めることにした。本当は電話番号認証とかでやりたいんだけど,ひとまずの妥協案として。

– https://gist.github.com/tbrianjones/5992856

「free mail domain list」とかでググると上記の Gist がヒットする。が,記事執筆時点で3782件と意外と少ない。ところがフォークはたくさんされている。…であれば,フォークを再帰的に辿ってマージすればいいのでは?

と考えて, Laravel でコマンドを作ってみた。

# 成果物

https://gist.github.com/mpyw/6b59ffbe517da9cccbf40db9aa30d09b

# 実装

`blacklisted_free_mails` というテーブル,およびそれに対応するモデルを作っている。オートインクリメントを無駄に消費しないためにバルクインサートは敢えて使用していない。

“`php

元記事を表示

【Laravel】同一テーブル内のリレーション(フォロー機能)

###同一テーブル内でのリレーションとなる場合
例)twitter的なアプリでユーザ間のフォロー関係を表現したいとき

三人のユーザ(フィル、カイ、ラミー)のフォロー関係が下のようになっている
![フォロー関係.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502145/ace11b40-91b2-f263-664b-bacff8fb1741.png)
**usersテーブル**

|id|name|
|:—-:|:—|
|1|フィル|
|2|カイ|
|3|ラミー|

関連を持たせるのはユーザ同士、つまり同一テーブル内のデータ同士。
もちろん、ユーザーは複数人のユーザをフォローするため多対多のリレーションになる。
→中間テーブルとしてfollowersテーブルにユーザ間の関係をまとめる。

**followersテーブル**

|following_id(フォローする側)|followed_id(フォローされる側)|
|:-:|:-:|
|1|2|
|1|3|
|2|1|
|3|2|
follo

元記事を表示

PHPで他URLのファイルを転送してダウンロードさせる

やっていることはトンネル。

“`php
function forwardBin($url) {

// ウェブブラウザが独自にMIMEタイプを判断する処理を抑止する
header(‘X-Content-Type-Options: nosniff’);

// ダウンロードするべきファイル情報を先に取得して、その内容をそのまま設定
$filename = basename($url);
$headers = get_headers($url, 1);
header(‘Content-Type: ‘).$headers[‘Content-Type’];
header(‘Content-Length: ‘.$headers[‘Content-Length’]);
header(“Content-Disposition: attachment; filename=${filename}”);

// readfile()の前に出力バッファリングを無効化する
while (ob_get_level()) {

元記事を表示

一時間に一回だけAPIを実行するPHPのオブジェクトファイル

##一時間に一回だけAPIを実行するPHPのオブジェクトファイル

あるユーザーが公開しているプログラミングを参考にして
オブジェクト化してみた。

尚、動作環境はPHP5.6以上になります、と言いつつ
動作テストは行っていないので、もしかしたらエラーで動かないかも?
動作内容はJSONファイルの更新時間( hour )と
サーバの 時間 ( hour ) を比べ差異があれば
APIを呼び出し結果をJSONファイルとして上書き保存します。
そのため、一時間に一回だけ更新処理が走ります。
(※CRONで設定していれば)

結果がJSONで返ってこない場合などは可変して頂いて構いません。
もともと自分の案でもないので…。

PHPファイルのダウンロードはこちらから
https://zip358.com/tool/timeKeeper/timeKeeper.zip

ソースコードはこちらになります(* ̄(エ) ̄*)

“`php

元記事を表示

LaravelにあるEloquentのfindとfirstOrFailにハマったけど、解決した話

# はじめに
以下のような使い方をしてしまい、想定した結果にならずハマりました

“`php
// $idには1が入っている
$user = User::find($id)->firstOrFail();
“`

知ってしまった今、なんてこと無い話になりますが、未来の自分に向けて備忘録を残しておきます

# Laravelのバージョン
“`
$ php artisan -V
Laravel Framework 5.8.29
“`

# 前提
– 以下のモデルは作成済み
– App/User.php

# 結論
“`php
// $idには1が入っている
$user = User::find($id)->firstOrFail();
“`
上記のような使い方をすると、以下のように2回SQLが実行されていました

“`sql
select * from users where id = 1;
select * from users limit 1;
“`

そのため、変数には2回目のSQLの実行結果が入っており、想定した動作になっていませんでした

# 対策
以下の書き

元記事を表示

LaravelをPHPUnitとPostman でテストする手法まとめ(Passport にも対応)

Laravel で開発されているプロダクトにおいてテストコードを書く方法を、 PHPUnit および Postman を主体にしてまとめます。

# テスト作成の背景

弊社([株式会社 NoSchool](https://noschool.asia/))では、Web フロントエンドに Nuxt を利用しており、また、iOS ネイティブアプリも開発しているため、Laravel を原則 API ベースで開発することが多いです。

API のテストを作成することは、バグのリスクを低減したり、アプリエンジニアとの仕様の共有のために必須となります。2020 年 1 月現在 NoSchool では `PHPUnit` および `Postman` を利用していますので、ドキュメントを兼ねてまとめました。

# この記事を読むとわかること

– PHPUnit を使って API 単位でのテストを書く方法
– PHPUnit を使って Class 単位での単体テストを書く方法
– Postman を使って API のレスポンスをテストする方法
– それぞれの比較と、実運用する際に共存す

元記事を表示

phpでテキストファイル内を検索し、表示する

検索はこんな簡単にできるんです!

“`php:php

元記事を表示

WordPressでPHPデビューする際にお勧めの勉強法

#前提
・HTML & CSS 習得済み
・PHP知らない

##出来るようになること
・phpファイルを扱えて自分でテーマが作れる

#手順
1.
progateのPHPコースをクリアする

2.
WordPressのphp本を読む
『WordPressユーザーのためのPHP入門 はじめから、ていねいに。』

3.
自分でテーマを作る教本を参考に作ってみる

##理由
特に伝えたいことは、手順1のprogateのPHPコースが優秀だと言うこと。
手順2の本もかなり優良だが、progateの方が資料のわかりやすさ、実際に手を動かせる点で理解度が抜群に高い。
とりあえずこのあたりから慣れて行ったあとで、テーマ作成に入った方がいいと思う。

元記事を表示

さくらレンタルサーバーでWordPressのDBバックアップを支援するPHPコード(駆け出しのWEB担当者用)

![2020-01-10_1226.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/66081/4ca0b5e0-4dc5-0318-6678-6095a73b370f.png)

さくらレンタルサーバーでWordPressバックアップを
支援するPHPコードです。

【[正規解説URL:blog](https://zip358.com/2020/01/10/%e3%81%95%e3%81%8f%e3%82%89%e3%83%ac%e3%83%b3%e3%82%bf%e3%83%ab%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%a7wordpress%e3%81%aedb%e3%83%90%e3%83%83%e3%82%af%e3%82%a2%e3%83%83%e3%83%97%e3%82%92%e6%94%af.html)】

駆け出しのWEB担当者用のプログラムです、動作環境はPHP5.6以上で
お願いします。バックアップする際にWARNINGが発生してしまうに

元記事を表示

脆弱性診断で指摘されがちな項目と対策方法をまとめる(CentOS+Apache+php)

#前提

AWSでEC2インスタンスを立ち上げた後に、セキュリティ系の対策をしない状態で脆弱性診断をするという機会があったので、その場合に指摘される項目と対策をまとめました。
セキュリティ対策初心者なのでご指摘あればコメントをお願いします。

#想定される環境
– CentOS 7系
– Apache 2.4
– php 7.2

#指摘事項

##TRACEメソッドが有効になっている
/etc/httpd/cond/httpd/confに以下を追記する

“`:/etc/httpd/cond/httpd/conf
TraceEnable off
“`

##SSL/TLSに脆弱性が存在するプロトコルが使われている
/etc/httpd/conf.d/ssl.confに記載されているSSLProtocolにTLSv1.2を設定する

“`:/etc/httpd/conf.d/ssl.conf
#SSLProtocol all -SSLv3 //コメントアウト
SSLProtocol -all +TLSv1.2 //TLSv1.2のみを許可
“`

あまりに古いOSやブラウザの場

元記事を表示

OTHERカテゴリの最新記事