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

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

「ググれ」って言われてググるな!【初学者べからず集 その1】

某 QA サイトで初学者の質問をかなりの数見ているのですが、初学者がやってはまずいことがなんとなく分かってきたのでまとめてみます。
**私の活動範囲が php に寄っているので他言語では若干の違いがある可能性があります。当てはまらん箇所はごめん^^;**

プログラミング初心者に見てもらいたいですが、コーチする方にも参考になると思いますので、サクッと読んでくださいw

# 1.「ググれ」って言われてググるな!

まずはタイトルのやつから。
「最近の若いモノ」なら一度は「ググってから質問しに来い!」って先輩に言われたことがあると思います。が、プログラミング初学者の場合ググった後に再度質問に行っても同じことを言われます。理不尽だわw

## ググっても正解は出てこない

本質的には「検索語句の選定」と「結果ページの評価」に問題があるので根深いですが、お手軽(?)な解決手段だけ提示します。

### プログラミングで困ったらまず公式サイトを探せ

言語学習において最も基本となるのは「用語の定義」の体系的な知識です。これがないと、有識者と会話できません。当然ですが、適切な用語で検索できなければ

元記事を表示

プログラミングをかじったからには何らかの制作物を作りたい#3 ~作り直し編、完成したもの~

#説明
このエントリーは初心者がとりあえず何かを作りたいと考え、それのみを理由にして記述しているものの3です。そのため、技術的な誤りや勘違いが多分に含まれている可能性があります。ご了承くださいませ。もしよろしければご指摘やご教示を頂けましたら幸いです。

#前回のあらすじ
プログラミングをかじったからには何らかの制作物を作りたい# 2
https://qiita.com/tatsuki1112/items/bf363ff7e0a1678eebd6
じゃんけん自体を書いたり、Bootstrapでページを一応レスポンシブ化した。

#作り直しとは
じつはこのじゃんけんサイトは最初PythonのFlaskで作成していた。しかしなんとなくやる気が起きずにだいぶ放置していた。その後、PHP、Laravelを使用している会社でインターンを行うこととなったので、勉強をかねてLaravelで作成しようと思い立ち作り直して再開した。

#できたもの
このエントリーを行ったときにはこのじゃんけんサイトもうすでに完成していて、やったことの整理という意味で記述しています。

元記事を表示

風水プログラミング

今日は趣向を変えて風水のプログラミングをしてみます。

風水?オカルト?
「そんなの風水師が適当なこと言ってるんじゃないの?」
と思う人もいるかもしれません。

いいえ、そんなことはありません。
風水、九星気学、四柱推命は計算のアルゴリズムがしっかりと確立していて、入力が同じならば出力は同じになるという特徴を持っています。

成立した経緯はわかりませんが、昔の中国の人がたくさんの運命を見てきて統計的な法則を見つけたけどわかりにくいから陰陽五行にあてはめてみたとかそういう類じゃないかと思います。

例えば、風水ならば、竣工年と建物の向きが決まれば、結果は一意に定まります。
四柱推命も誕生の年月日と時間で結果は一意に決まります。

**入力が決まれば出力も一意に決まる** っていいですね。

そのアルゴリズムはちゃんとした本を読めば書いてあります。陰陽五行の話とかいろいろ出てくるのですが、結局のところは、

– 足し算や引き算をする
– テーブルを引く
– 割り算して余りを求める
– if文で分類して、パターンを減らす

ということを繰り返しています。 

ロジカルで、まさにプログ

元記事を表示

PHP7.4をCentOS8にインストール

#はじめに
お正月を使って自宅色々兼用サーバを役割ごとに仮想化させました。
仮想化ベースはCentOS8/KVMで、本稼働VM部分とは別に検証し放題のテストVM環境も作ったので今後色々遊べそうです。
サーバ構築部分はいつか別途書こうと思います。
ちなみに現状VM4インスタンス同時起動でも、ほとんどの時間がアイドル状態なので35w程度の消費電力です。

んで、PHP7.4.1が安定版になってるのでインストール用メモ。
例のごとくRemi、epelリポジトリからダウンロードします。

#インストール
###リポジトリのインストール

“`bash
# epel
$ sudo dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# -略-
“`

“`bash
# remi
$ sudo dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# -略-
“`

###PHP7.4

元記事を表示

Laravelでよく使うコマンド、記法

# 新規プロジェクト作成

“`
$ laravel new (アプリ名)
“`

または

“`
$ composer create-project laravel/laravel (アプリ名) –prefer-dist
“`

# artisanコマンド

### コントローラの作成
“`
$ php artisan make:controller (コントローラ名)
“`

### マイグレーションの作成
“`
$ php artisan make:migration create_(テーブル名)_table
“`

### モデルの作成
“`
$ php artisan make:model (モデル名)
“`

### シーダーの作成
“`
$ php artisan make:seeder (テーブル名)TableSeeder
“`

### マイグレーションとシーダーの反映
“`
$ php artisan migrate –seed
“`

### データベースのリフレッシュ
“`
$ php artisan migrate:reset

元記事を表示

Uncaught Error: Call to undefined function~が出た時は

#前回のあらすじ
アンケートシステム作ってるなう
・タグでいたずらされないようにしてた。
#今日やったこと(ハイライト)
・XAMPPでMySQLのDBを構築した
・DBにアンケートデータが自動で保存されるよう頑張った
(今回の教科書『いきなりはじめるPHP ワクワク・ドキドキの入門教室』)
#困ったこと
・Uncaught Error: Call to undefined function mb_internal_encording()~~って名前のエラーが出た
#原因
mb_internal_enco「 **r** 」ding スペルミスってた!!
mb_internal_encoding  直した!!やったね!!
#感想
自動保存の機能を追加するためのソースを書いてる上で、文字列の連結を理解するのが難しかった。てことで、明日以降の私に丸投げした。

#次回の目標
アンケートシステムをもっと便利にするよう学習していくぞい

元記事を表示

Atom の PHP 補完を vim-lsp で使う

Vim で PHP を書くときは [vim-lsp](https://github.com/prabirshrestha/vim-lsp) で Intelephense を使っているのですが、プロプライエタリなソフトウェアなのでサーバサイドのコードが公開されていません。[Intelephense のウェブサイト](https://intelephense.com/)はあまり親切ではなく、初めてインストールしたときは正しく動かせているのかよく分からなかった事を覚えています。
そのため OSS の PHP LSP を探していたところ [Serenata](https://serenata.gitlab.io/) というソフトウェアを見つけました。

Serenata は Atom エディタのプラグインとして公開されていたようです。サーバ型の Serenata 本体と、Atom プラグインの [php-ide-serenata](https://atom.io/packages/php-ide-serenata) の2つで構成されています。バージョン4までは Atom エディタ用ですがバージ

元記事を表示

Laravelで簡単なメモアプリを作る(3)~データの更新と削除~

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

[Laravelで簡単なメモアプリを作る(1)~Viewの作成と表示~](https://qiita.com/Alesion30/items/95222f62904ef46f6f45)
[Laravelで簡単なメモアプリを作る(2)~データの取得と保存~](https://qiita.com/Alesion30/items/97c3bd16c4e20d4bdb72)

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

元記事を表示

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アーキテクチャを採用しています。今回は、データベースの接続とデータの取得と保存をしていきたいと思います。

[Laravelで簡単なメモアプリを作る(1)~Viewの作成と表示~](https://qiita.com/Alesion30/items/95222f62904ef46f6f45)
[Laravelで簡単なメモアプリを作る(3)~データの更新と削除~](https://qiita.com/Alesion30/items/11a9e17368b922e67a5c)

# 今回の目標物
スクリーンショット 2019-12-31 11.25.14.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プロジェクトの作成
ローカル環境でコマンドプロンプトを起動して、任意のパスでコマンドを実