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

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

保存版 JavaScript <=> PHP の文字列操作対応リスト

フロントエンドとバックエンドにおいては分業が当たり前のこのご時世ですが、僕はちょうどお互い半々で仕事を頂けているので備忘録も兼ねて対応表を作成しました。

普段自分が担当している分野の反対側を扱わなくてはならなくなったときや、一人でフロント・バック両方開発するとき、もしくは暇つぶしにどうぞ。

※目次・各項目に書いてあるコードは __JavaScript__, __PHP__ の順です。

# 追加・結合

## 結合 “`’hoge’+’fuga’“`, “`’hoge’.’fuga’“`

“`sample.js
‘hoge’+’fuga’;
//’hogefuga’
“`

“`sample.php
‘hoge’.’fuga’;
//’hogefuga’
“`

最も基本的かつよく使う文字列を繋げる処理ですが、この時点で JavaScript と PHP の差を感じます。

普段 JavaScript を使用している開発者には違和感を感じる「.」での連結ですが、これは PHP が Perl に影響を受けて開発されたことによるものと思われます。
[PHP 公式マニュ

元記事を表示

ダブルクオートを使う必要がある場合

ダブルクオートを使う必要がある場合

“`
# htmlタグの属性指定
aaa

# シングルクオートを表示したいとき
$text = “わたしは'” . $name . “‘です”;

# テキストに変数を内包させるばあい
$text = “わたしは$nameです”;
“`

元記事を表示

コードシェア用

“`classes/User.php
conn->query($sql);

if($result>num_rows == 1){
$row=$result->fetch_assoc();

元記事を表示

【月額400円~】安くてカンタンが売りの Amazon Lightsail に Laravel 環境を構築して最安運用する手順

# TL;DR

* AWSでLaravelするのに必要なコストは **400円/月**。
* 月額$3.5のLightsailインスタンス1台に、PHP/LaravelとMySQLを入れる手順です。
* インストールの待ち時間を含めて **20~30分くらい**

# Amazon Lightsail とは?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129854/2f4ff7e9-c2e4-949d-17b8-334298c6a57d.png)

* 最安値AWS。EC2を1台使うより安い。
* レンタルサーバーと同じ価格帯で使える VPS。
* AWS史上最もカンタンにサーバーが立ち上げできる。EC2やRDSの構築をカンタンにしたBeanstalkよりもさらにカンタン。
* あの転送料も完全コミコミプラン。「AWSは**従量課金だから実際使うまで料金がわかんない**よね」がない。\$3.5と言ったら \$3.5以上取らない。※注:上限はあります

EC2やRDSをカンタンに

元記事を表示

Laravel の Route Model Binding で主キーをハッシュ化したものを使う

## はじめに

Laravel でアプリケーションを作っていく際に、何らかの理由で URL に主キーをそのまま表示させたくない場合どうしたらいいか、そこらへんを書いていきます。

例:
`https://example.com/posts/1` ではなく
`https://example.com/posts/Lk6-W7gbKmv ` にしたい場合。

## 環境
Laravel 6.x

## インストールと設定
Laravel のインストール:

“`
composer create-project –prefer-dist laravel/laravel foo
“`

プロジェクトルートに移動:

“`
cd $_
“`

主キーをハッシュ化するのに便利なライブラリをインストール:

“`
composer require vinkla/hashids
“`

Laravel Hashids の設定ファイルを作成:

“`
php artisan vendor:publish
“`

リストが表示されるので `Vinkla\Hashids\HashidsSe

元記事を表示

Laravel の Form Request Validation と Yii の Model を継承したフォームクラスの違いについて

## はじめに
Laravel と Yii どちらともにアクション毎にフォームのバリデーションを分けたいとき、Laravel では Form Request Validation、Yii では Model を継承したフォームクラスを使えるんですが、役割に若干の違いがあるので、そこらへんをまとめたいと思います。

## 環境
Laravel 6.x
Yii 2.x

## Laravel Form Request Validation

モデル:

“`php:app/Models/Post.php
declare(strict_types=1);

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
protected $table = ‘post’;

protected $fillable = [
‘title’,
‘content’,
];

// …
}
“`

Form Req

元記事を表示

Rapberry pi 個人的環境構築まとめ

ラズパイを触ることになったので、初期設定、環境構築方法をまとめておきたいと思う。

#まずは以下の記事を参考にSSH接続ができるまでの初期設定
[Raspberry Pi Zero W 環境構築ことはじめ MacOS編](https://qiita.com/hiesiea/items/67ead05a4c3aa5d47ce7)
[RaspberrypiでSSHができなくて試したこと](https://qiita.com/hayate242/items/0de7a98f6fea0dabf04c)

#ラズパイをアクセスポイント化。
[RaspberryPiでルーターを自作し無線AP化](https://qiita.com/wannabe/items/a66c4549e4a11491f9d5)
ここで、apt-get updateとupgradeをサボったら詰まった。

#ラズパイをファイルサーバー化、Apacheを導入してPHPによるアクセスを可能にする。
[raspberry piをファイルサーバー化](https://qiita.com/ryuichi1208/items/4420d

元記事を表示

WEBのドキュメントをPCへ落とさずにブラウザで読むには

# はじめに
インターネットには様々なドキュメントが存在し、必要に応じて読む必要があります。
しかし、自分のPCにダウンロードした時点で**マルウェアの侵入など問題**が多いのも事実でしょう。

ご紹介する内容は汎用のブラウザ(全ての端末)でインターネット上のドキュメントを
ダウンロードする事無くブラウザ内で安全に表示して読む為の一例です。

この方法で**Facebookのメッセンジャー、Slack、RoundCube、Cybose**等の添付ファイルもWEBで読む
事が出来るようになりました。**Gmail嫌い**には実用的な話なので試行錯誤する価値はあると思います。

#### 1.ダウンロードの問題
– PCに不要なデータが溜まる
– PCにはアプリケーションが必要
– ドキュメントに危険なスクリプトが含まれている可能性

#### 2.この開発に於ける目標
1.ダウンロードを禁止したブラウザ環境でWEBのドキュメントがブラウザ上で閲覧できる事。
2.Google、MS-Cloudとの連携でドキュメントの編集まで可能でそのまま転送できる事。
3.圧縮ファイルの内容をブラウザ上で

元記事を表示

Apache ssl化まとめ(Dockerでも使えます)

https://qiita.com/Diwamoto/items/08a46096743cd89c6d06
の続きです。

#やりたかったこと

・セキュリティの勉強をして、httpsとは何かを学んだ。
・ちょうどDockerで環境作りをしていたので、ついでに自分のローカル環境もssl化するいいタイミングだった。
・ワイルドカードでVirtualHost設定してるしsslもワイルドカード証明書あるっぽいからワイルドカード証明書作ってそれさえあればどのプロジェクトでも自動でssl化できる様にしよう!!

####しかし、世間はそんなに甘くなかったのです。。。

ローカル環境の完全ssl化は長く辛い物語でした。

# つまづきその1

まずやろうと思ったのがDockerfileにてopensslコマンドでbuild時にワイルドカード証明書を作成し、それで運用しようとしたのですが

“`Dockerfile
RUN openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/ssl-cert-sn

元記事を表示

シーザーの犬ぞりゲーム.php

#オレはやるぜ
![images.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/417953/7c57122a-6678-feed-2697-d0fc7266dd63.jpeg)

いわゆる「ズンドコキヨシプログラム」のあれです。
「オレは」「やるぜ」をランダムに出力して「オレはやるぜオレはやるぜ」になったら
「オレはやったぜ!」と表示して終了します。

“`php:yaruze.php

元記事を表示

phpの圧縮について

# phpの圧縮を考える
## 背景
* 自社サービスでcacheとしてredisを使ってるもののredisのサイズがバカにならなくなってきた
* redisのDBサイズが大きくなってくるとBGSAVE時にi/oが出てサイトが遅延するケース(?)
* redisの使い方が雑なのでお手当してサイズ圧縮したい

## 現状のreidsへの保存
“`
protected function _getUserList() {

$userList = array();

$key = __METHOD__;
$cacheRes = Cache::read($key);
if ( $cacheRes ) {
$userList = $cacheRes;
return $userList;
}

$userList = UserDb::selectUserList()
$ret = Cache::save($key, $userList , 60);
return $userList;
}

# 保存内容は利用者に任せているのでバカでかいarrayと

元記事を表示

Objective-PHPを初心者がまとめてみた<フレームワークの概念>

# フレームワークとは
PHPは実装の仕方が実装者によって千差万別であるため、
「一人で全てのプログラムを実装して、その後の修正もその人が行う」
のであればそれでもいいのかもしれないが、
他の人と協力して実装する場合、ある一定のルールがないと管理できない。
そのため、ある程度の基礎的な枠組みを作っておいて、
アプリ開発の際はその枠組みを用いる(コードを書き加えたりする)ことで、
(その基礎的な枠組みを知っている)自分以外の他の人がコードを見ても実装したい内容が共有できる。
つまり、統一されたルールの中で多人数で実装が可能になる。
その基礎的な枠組みをフレームワークと呼ぶ。
フレームワークを用いることで、下記3点のメリットがある。
####⑴アプリ実装の労力の軽減
“`
composer create-project –prefer-dist laravel/laravel {プロジェクトの名前}
“`
とターミナルに入力するだけで、最低限必要なフォルダやファイルが一括で多数実装できるので楽。
####⑵保守性の確保
Web開発では、開発途中に要件の追加が発生することがよくある(ら

元記事を表示

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

hoge hoge2 hoge3 hoge4 hoge5
hogehoge