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

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

PHPでは未定義の定数は文字列として処理される

# 要約
– PHP では **未定義の定数** は **文字列** として処理続行する
– Warning を無視するべからず
– ついに PHP 8 からは動かなくなる
– みんな PHPStan を使おう!

# 問題
突然ですが、PHP でこう書いたとき、どのように動くでしょうか?

“`php
echo date(Ymd);
“`

これを書いた人は、おそらく `date(“Ymd”)` と書きたかったのでしょう。

うん、 **気持ちは** 解る。

一見すると、ダブルクォーテーションが前後にないので、エラー終了しそうです。

ところが、実際には **警告は出力されるが処理続行します。**

“`
PHP Warning: Use of undefined constant Ymd – assumed ‘Ymd’ (this will throw an Error in a future version of PHP) in test.php on line 3
20191231
“`

# 理由
## 未定義の定数?
処理結果を見てみると、 `Use of u

元記事を表示

JavaScriptでfor文(foreach)内でのgetElementsByClassNameの使用法

##はじめに
趣味で作っているツイッタークローンにおいて、ツイート一覧にマスオーバーさせると背景色が変化するjsの処理を書きたかった。

##JSをあてるPHPファイル

3行目のtweetcardが対象のclass名です。
注)実際は生のphpファイルではなくテンプレートエンジンのbladeを使用しています。

“`home.php
@if ($posts)
@foreach($posts as $post)

{{ $post->name }}
{{ $post->created_at }}

{{ $post->content }}

“`
##間違った書きかた
“`samle.js
const tweetcard = document.getElementsByClas

composerのライブラリ達にいつもあてたいパッチがあるならワンシェルにしておこう

LaravelでRFCに軽く違反してるメアドにメール送ろうとしたら、Swift_RfcComplianceExceptionが発生して送れなかったんですよ。
原因は下記だったんですが、vendor配下って普通git管理しないじゃないですか。
https://stackoverflow.com/questions/1490042/swift-mailer-error-swift-rfccomplianceexception-on-an-email-that-actually-work
だから、リリースする時は`composer install`したらパッチをあててやんなきゃいけなくて面倒ですよね。
そういう時は、patchファイルを用意して、patchコマンドを実行ってのもいいですが、なんかサクッと実行したいので、1つのshにするのがおすすめ!

“`bash:$PROJECT_ROOT/vendor.patch.sh
#!/bin/bash
patch app/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/

PHPにおける配列のarray()と[]の違い

# 概要
PHP5.4以降で`array()`の短縮構文として`[]`を使えるようになったがどちらがいいのか、またその理由や両者の違いを説明します
### ググり方
`[]`は日本語では`角括弧`、英語では`square brackets`といいます

# 違い
**可読性**

可読性は正義です。他の言語(JSなど)では配列の宣言として`[]`を使っています。なので`array()`ではなく`[]`の方が他の言語をメインとして使っている人も理解しやすいです。
また、`array()`だとこれは関数なのか、言語構成要素なのかなど実装に不要なことを考えることがありますが、`[]`だとそれがなく、コーディングの際の認知負荷も下がります。

**速度**
速度が早くなるのかと期待していたのですがこちらの記事によると速度には違いがないそうです
https://blog.leko.jp/post/benchmark-with-syntax-and-language-structure/

# 結論
`[]`を使いましょう
### PHP5.4以前なのだが???
PHP7.1ですらEOL(2020

PHP7.4の性能比較 一億回のループとDB500万件からの検索

#PHP7.4の性能比較を行ってみました。

現在契約しているレンタルサーバーのグレードをアップしようかなと思い、
ついでと言っては何ですが、どの程度性能が上がるかを確認するために、
PHPそれぞれのバージョンで性能を比較してみました。

比較対象としたバージョンは以下の通りです。
■5.6.40
■7.0.33
■7.1.31
■7.2.21
■7.3.9
■7.4.1

処理としてはPHPでは1億回の単純な足し算をfor文でぶん回す事と
DBはMarriaDBですが、インデックスが貼られていないテーブルから500万行より
適当な文字列の検索を行ってみました。

実行結果としてはこのような感じになりました。

|バージョン|php処理時間|MySQL処理時間|
|:–|–:|:–:|
|5.6.40|10.96秒|3.21秒|
|7.0.33|04.90秒|3.06秒|
|7.1.31|04.56秒|3.06秒|
|7.2.21|03.17秒|2.72秒|
|7.3.9|02.50秒|3.15秒|
|7.4.1|02.10秒|3.11秒|

この結果より導き出される事は以下三

PHP 画像のアップロード

#画像をアップロードし表示させる
【大まかな流れ】
◆フォームから画像を選択
◆画像ファイルかのチェック
◆DBではなくサーバーのimageディレクトリに画像を保存
◆DBにはファイル名保存
◆DBのファイル名を元に画像表示

##ファイル構造
“`
test
|-images (画像ファイル保存ディレクトリ)
|-image.php(画像表示ファイル)
|-upload.php(画像アップロード処理)
“`

##画像ファイル送信フォーム

“`upload.php

画像アップロード


アップロード画像


PHPで開発してて出会ったエラー達[随時更新]

出会ったエラーの数だけ人は成長していくと誰かが言っていた。自分用のメモとして、出会ったエラーを書き残してく。

##implode(): Invalid arguments passed in ~
`implode`とか使う時、たまに出くわします。
単純に引数に`array`でないものを渡してしまっている。

“`php:error.php

//$band[]が正解
$band = ‘John’;
$band = ‘Paul’;
$band = ‘George’;
$band = ‘Ringo’;

//配列を渡していない。
$result = implode(“\t”, $band);
“`

PHPのデバッグ方法を分かりやすく解説

PHPのデバック方法を分かりやすく解説していきます。
「var_dump」で画面に出力する方法ではなく、エラー内容や処理の流れをログファイルに出力する方法になります。
ログファイルに出力する事で、実装した処理が正常に動作しているか確認できたり、不具合の原因を特定できたりします。

##準備

まずは下記のファイルを用意します。

・sample.php・・・・・・デバッグをしたいファイル
・functions.php・・・・・php.iniの設定やデバッグ関数を記述するファイル

デバッグをしたいファイルの上部でfunctions.php を読み込んでおきます。

“`php:sample.php

// functions.php を読み込み
require(‘functions.php’);

“`

##ログの出力設定
functions.phpにログの設定を記述します。
ini_setとはPHPの設定をいじることができる関数です。

出力するエラーレベルに関しては公式ドキュメントを参考にして下さい。
https://www.php.net/manual/ja/funct

Laravelで簡単なメモアプリを作る(2)~データの取得と保存~

# はじめに
[Laravel](http://laravel.jp/)とは、Webに特化したPHPフレームワーク。セキュリティ対策(CSRF対策など)もこれでできます。MVCアーキテクチャを採用しています。今回は、データベースの接続とデータの取得と保存をしていきたいと思います。

前回:https://qiita.com/Alesion30/items/95222f62904ef46f6f45

# 今回の目標物
スクリーンショット 2019-12-31 11.25.14.png

スクリーンショット 2019-12-31 11.25.26.png【2020年1月】令和だし本格的にVSCodeのRemote Containerで、爆速の”開発コンテナ”始めよう

# VSCode の Remote Conainer で”開発環境+プロジェクト全部入りのコンテナ”から開発をスタートダッシュをキメませんかッ!?

開発でVS Code の Remote Conainer使っていますか?単に既存のコンテナに入るだけなら Remote SSH でも構いませんが、”ローカル開発環境の一部”として、いやむしろ**ローカルの開発環境=Remote Container**として、ビンビンにRemote Container使っていきましょう。令和だし!~~(すでに2年だけどね・・・?)~~

特にMacを使っていると最初からPythonやらPHPやらRubyやらが入ってしまっているので**開発環境がある**のですが、これらは割とmacOSのエコシステムに組み込まれているので不要にパッケージの追加削除、できないのですよ。`brew`とか意外とあっさり壊れますしね・・・。特に**バージョンアップなんてもってのほか**です。全然、余裕でおかしくなります。
そんなわけでMacに入っているPythonやRubyでプログラミングをバリバリしていると・・・**ふと、後戻りでき

PHP if文書き方まとめ

# 目的

– PHPのif文の書き方をまとめる

# 分岐で使用する比較演算子

|比較演算子 |意味 |
|—|—|
|A < B |AがBより小さい | |A <= B |AがB以下 | |A > B |BがAより小さい |
|A >= B |BがA以下 |
|A == B |AがBと等しい |
|A != B |AがBと異なる |

# 書き方の例

– elseを用いた分岐

“`php
if (条件式){
真の時の処理;
}else{
偽の時の処理;
}
“`

– elseifを用いた分岐

“`php
if (条件式A){
条件式Aが真の時の処理;
}elseif (条件式B){
条件式Bが真の時の処理;
}else{
条件式が偽の時の処理;
}
“`

# より具体的な書き方の例

– 変数`age`の値に応じて二十歳か二十歳じゃないのかを表示する処理を記載する。

“`php
if ($age == 20){
echo “二十歳です”;
}else{
e

【AWS】Elastic BeanstalkでLinux 用 Windows サブシステムを使用せずにLaravelアプリケーションをデプロイする

Elastic BeanstalkでLinux 用 Windows サブシステムを使用せずにLaravelアプリケーションをデプロイ方法です。
本手順では、代わりに、フリーの圧縮・解凍ソフトを使用しています。

## 環境
* PHP:バージョン7.3(Elastic Beanstalk)
* Laravel:バージョン6.9.0
* OS:Windows10(ローカル)

## 手順

[Elastic Beanstalk への Laravel アプリケーションのデプロイ | aws](https://docs.aws.amazon.com/ja_jp/elasticbeanstalk/latest/dg/php-laravel-tutorial.html)
に従って実施します。
タイトルの件を以下に、補足事項としてまとめます。

## 補足事項
手順では、Linux 用 Windows サブシステムを使用するとありますが、以下の通り実行すればインストール不要です。

### 1. Laravelプロジェクトの作成
ローカル環境でコマンドプロンプトを起動して、任意のパスでコマンドを実

FFmpegを使ってルパン三世タイトルジェネレーターをPHPで書いてみた

![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560692/28ad0dbd-c6d5-5cb7-472d-f839c448ee6c.gif)

新年も明けて2020年になりましたね!

話は飛びますが、年末辺りからTwitterのエンジニア界隈でルパン三世を模した動画を幾度と無くTLで見ました!
ググって同様の動画を作成するジェネレーターを幾つか確認しましたが、せっかくならPHPで動画作成したい!
ということで開発しました!

“※都度、リファクタを加えながら開発してたので5時間くらいかかりましたw“
“※出力結果は音付きのmp4ファイルです“

[ルパン三世タイトルジェネレーター](https://github.com/huuyafwww/lupin-generator)

## 環境

### 動作確認済み環境

– macOS Catalina : “ver 10.15.2“
– PHP : “7.3.1“
– Web Server : “Apache“

PHPログイン機能

# PHPによる新規登録からログイン・ログアウトまで

大まかな流れとして
◆登録画面でユーザー登録
 →すでに存在しているユーザーではないか
◆ログイン処理
 →入力された情報がDBと一致すればログイン
◆ホーム画面表示
 →ログインか非ログインで表示の変更

##新規登録
フォームの用意

“`signup.php

新規会員登録

//処理を行う宛先を指定

マンション売却査定コンテンツをphpで作成する

この記事では、WordPressで作成した不動産サイトにマンション売却査定のコンテンツを設置します。コピペで簡単に設置できるのでご利用ください。

マンション売却査定コンテンツ

下記の「マンション売却査定コンテンツ」を設置できます。

マンション売却査定コンテンツ作成の手順

  1. マンション売却査定コンテンツのphpファイルを作成
  2. 作成したphpファイルを投稿ページや固定ページで、「ショートコード」で読み込むことができるように「functions.php」にコードを追記する。(注意:念のため、作業前に「functions.php」のバックアップをして下さい。)
  3. マンションの投稿ページを作成して、カスタムフィールドとショートコードを入力する。

マンション売却査定コンテンツのphpファイルを作成する

下記のコードをコピペして、使用しているテーマのテーマファイルがあるフォル

PHP for文まとめ

# 目的

– PHPにおけるfor文の書き方をまとめる

# 書き方の例

– for文はループ条件に応じてループ処理を実行する。
– 回数を指定したループ処理に使用する。
– 下記にfor文の書き方の例をまとめる。

“`php
for (ループ条件に使用する変数の初期化; ループ条件; 変数の更新){
ループ処理で実際に実行したい処理;
}
“`
# より具体的な例

– 変数`i`に初期値として1を格納する。
– 変数`i`が10に達するまで処理をループさせる。
– ループ処理では「変数iには現在nが格納されています。」と出力される処理を記載する。
– 変数`i`は一回のループごとに2足される。
– 下記に前述の条件で処理を繰り返すfor文を記載する。

“`php
for ($i = 1; $i <= 10; $i++){ echo "変数iには現在{$i}が格納されています。"; echo '
‘;
}
“`

# 強制的にループ処理を抜ける

– 前述の処理でfor文のループ条件はそのままに、$iに5が格納された時にループ処理内で強制的に処理を中

Luhnアルゴリズムについて学んだのでまとめた

## 概要

Webアプリ開発をしていると招待コードやクーポンコード等の文字列を作成するという機能が必要になるケースが有るかと思います。
こういったケースでは、**打ち間違いによって想定外のコードが入力される**(悪意のある入力は除きます)のはできる限り避けたいと思うのですが、
そういったケースに適した誤入力検知アルゴリズムがLuhnアルゴリズムです。

先にアルゴリズムの特徴をまとめます。

– 1桁の誤入力を検知できる
– 隣り合う桁の順番を誤った場合も一部検出できる
– 実装がシンプル
– 実際に、クレジットカード番号や海外の社会保険番号等の作成・検証に利用されている

また、PHPにてコードの作成・検証の実装もしました。
特に作成に関する実装はあまりなかったように思えたためコードを記載しました。

今回は簡単のため、作成する文字列は数値だけとしますが、
これは簡単に拡張できて、文字列に対しても適用することができます(*Luhn mod N*アルゴリズム)。

## Luhnアルゴリズムって?

Luhnアルゴリズムは[チェックサム方式](https://ja.wikipedi

PHP マジックメソッドと遅延静的束縛

## マジックメソッド
– インスタンスがある特定の条件になったときに、明示的にcallしなくても暗黙的にcallされるメソッド。
– 名前の先頭2文字がアンダースコア(__)になっている。
– 必ずpublicで定義する必要あり。
– マジックメソッドの引数は参照渡しはできない。

“`php
values[$name] = $value;
}

//アクセス不能なプロパティにisset()を実行

【PHP】PHPの型宣言は弱い型付け

#型宣言とは
次の例のように、関数に引数を与えるような場合などに引数の型に**制約**を与えることができます。
正しくない種類の型が渡された場合、`Fatal error`が発生します。

“`php

Htmlspecialcharsでいたずら(XSS)を防いでみた

#前回のあらすじ
・if文を使ってアンケート内容に不備があったら、注意文を表示させたり進むボタンが出ないようにさせたりしたぞ
#今日やったこと
・$変数=htmlspecialchars(変数);
と入力したら、アンケート内にHTMLタグとか仕込んでみても(これをクロスサイトスクリプティングと言うらしい)文字列として処理されるようになった!
(今回の教科書『いきなりはじめるPHP ワクワク・ドキドキの入門教室』)
#感想
とにかく、入力情報の無毒化はセキュリティ対策で必要な処理なんだなーと思った

#次回の目標
データベースにアンケート情報を保管できるようにしよう!