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

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

PHP掲示板に検索機能の実装

PHPで作成した掲示板に、検索機能を実装したので振り返りつつ。

参考にした記事はこちら。

PHPで検索フォームを作るには?簡単な検索機能を実装してみよう!

具体的な機能は、
名前を検索すると、それに紐づいたIDと発言内容を表示する
という形。

トップページに検索内容の入力フォーム→別ファイル検索機能(search.php)の作成
で行った。

#検索内容の入力フォームの作成
TOPページにこんな感じで作成した。
実際に機能が動くのはsearch.php。
ここでは入力フォームで文字を受け取り、”search_name”という名前で受け取る。

“`index.php

検索




Laravel6 ユーザと管理者の認証を分けて作る

# 目的

– ユーザと管理者とで認証を分ける方法をまとめる。

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| PC | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 6.18.35 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaaaeecae69d63

元記事を表示

Laravel CRUD

## はじめに
LaravelでCRUDを作っていきます。

### やらないこと

– 認証関係は扱いません。
– 削除の前の確認などJavaScriptで実現される機能は今回は作りません。

### つくるもの

|アクション|画面の有無|内容|
|—|—|—|
|index|画面あり|一覧表示画面|
|create|画面あり|新規入力フォーム|
|store|画面なし|追加処理(createの登録ボタン)|
|show|画面あり|詳細表示|
|edit|画面あり|変更フォーム(既存の値が入っている状態)|
|update|画面なし|変更処理(editの更新ボタン)|
|destroy|画面なし|削除処理(showの削除ボタン)|

“`:流れ
index(一覧表示) ┳ create(新規作成画面) ━ store(新規保存)
     ┗ show(詳細表示)    ┳ edit(編集画面) ━ update(上書き保存)
                 ┗ destroy(削除)     
“`

## 準備

###

元記事を表示

【PHP】URLのリストをまとめてDLする

とりあえず備忘録として

URLのリストをまとめてDLできるようなものを作成していく。
例えば以下のようなテキストファイルにURLをつらつらと書いていってそれらをまとめてDLできる。

“`:list.txt
https://…..
https://…..
https://…..
https://…..
“`

#DL保存先ディレクトリを作成
ディレクトリの名前をURLリストファイルの名前と同じものとした。
コマンドライン引数でURLリストファイルのパスを受け取って、そこから名前を抽出する。

以下は保存用ディレクトリがなかったら作成するコード

“`php5
$dirName = basename($argv[1], “.txt”);
$dir = FILE . ‘src/’ . $dirName;
if (!file_exists($dir)) {
mkdir($dir);
}
“`
##basename
を使うことでパスからファイル名の抽出が簡単になる。
第1引数はパスで、第2引数へ拡張子を指定してやるとファイル名のみを抽出できる。

#コマンド

元記事を表示

phpでOSの環境変数から値を取得する

“`envtest.php

“`

## 動作確認

“`
$ export REMOTE_ADDR=1.1.1.1
“`

“`
$ php envtest.php
1.1.1.1
“`

元記事を表示

CircleCIでPHPUnit

# はじめに
本記事はCircleCIを利用して、PHPUnitでCIの自動化を実施することを目的とし、以下の図をワンシーケンス通す備忘録とする。
![スクリーンショット 2020-08-08 17.21.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/a44f6bc3-b0f9-301d-76f3-7e7a0c424d6d.png)

GitHubのリポジトリは[こちら](https://github.com/sakamotoyuya/circleci-phpunit)

# 環境
macOS Catalina:10.15.5(19F101)
php 7.4.9
composer 1.10.10
PHPUnit 9.3.7

# 目次
– 前提条件
– CircleCIを登録する
– GitHubでCI連携用のリポジトリを作る
– composerを取得する
– composerでPHPUnitをインストールする
– PHPUnitで手動実行するテストファイルを作成する
– PHP

元記事を表示

みんな大好き「バリデーション」。コロナでどこへも行けませんが,画面にマスク着用すると,開発がちょっとだけ幸せになるかもという余談

# 概要

台湾しかり,ベトナムしかり。

コロナ対策で成功している国を見ると,早期の歯止めが,共通因数だなぁと感じるおじさんです。

システム開発の現場でも,早期の歯止めが,開発を幸せにしてくれるということを,記事にしてみようと思います。

具体的には,**みんな大好き「バリデーション」**関連です。

# みんな大好き「バリデーション」

システム開発工程が無事完了し,いざ,利用部門ユーザを巻き込んだテストの段になって,意外と多いのが,誤入力防止機能(バリデーション)を,追加開発リクエストされるという展開。

「この欄は,過去日付が入力されたら,エラーメッセージを出して欲しい」

一般的な傾向として,完成したシステム画面を,実際に操作してみると,利用部門の期待(と欲望)は,ぐーんと高まるのですが,これは,人間として,ごく自然な心理特性です(=人間,何かを手に入れたら,もっと良いものが欲しくなる)。

特に,**「品質の作り込み」が大好きな日本国内のシステム導入では,テスト工程での「後出しじゃんけん」って,驚くほど,お盛ん**ですよね。

言葉がまったく通用しない地域を含めて,過去,

元記事を表示

駆け出しエンジニア「サーバーサイド言語を勉強したら、何ができるようになるの?」

# 登場人物
**駆け出しエンジニア(以下、後輩? と呼ぶ)**
やっとの思いでHTML/CSS/JavaScriptを習得した、駆け出しエンジニア。
JavaScriptのライブラリやフレームワークも経験して、
とりあえずイメージしたWEBアプリを作成できるレベル感に達成した。
使っているブラウザはGoogle Chrome。

**駆け出しエンジニアの友人(以下、先輩? と呼ぶ)**
駆け出しエンジニアと同じカリキュラムで勉強をした後、
駆け出しエンジニアよりも1年早くサーバー関連の仕事を経験してきた、彼の友人。

# あらすじ

**後輩?** :
サーバーサイド言語を学ぶべきなのはわかるけど、これを学んだら何ができるようになるんだろう?

オンラインサービスが作れるようになる、というのはわかるんだけど、それだけなのかな?
なんかパッとしないな〜。

**先輩?** :
おっ、後輩。
なにやら勉強のモチベーションに行き詰まっているようだね?

**後輩?** :
先輩!
そうなんだよ〜。サーバーサイド言語がとっても大事な知識だというのは理解してるんだけど、
JavaScri

元記事を表示

Laravelでドメイン駆動設計を用いてプロフィール登録を実装してみる

#DDDでプロフィール登録を実装する流れ
1、Controllerを作成する
2、Model(Eloquent)を作成する
3、Viewを作成する
4、Eloquentを編集する
5、リポジトリを作成する
6、Providerに登録する
7、UseCaseを作成する
8、Requestを作成する
9、Controllerを編集する
10、ルーティングを編集する

それではやってみよ〜

##1、Controllerを作成する

“`:Controller:ProfileController
php artisan make:controller ProfileController
“`

##2、モデルを作成する(migrationファイルも作成する)

“`:Model:Profile
php artisan make:model Profile –migration
“`

###■migrantionファイル

“`php:2020_mm_dd_xxxx_create_profiles_table

元記事を表示

laravel ルーティングまとめ

#ルーティングとは
viewからリクエストされたURLと、Controller内に定義されたActionを結び付ける役割
アクセスしたアドレスに応じて対応するControllerのActionを呼び出す仕組みのことをRoutingという

#基本的なRoutingの書き方

“`php
Route::get(‘user/news/create’, ‘user\NewsController@create’);
“`
http://XXXXXX.jp/user/ からはじまるURLを指定することになる。
user/news/create というURLにアクセスしたら NewsController の create Actionに割り当てますという意味

#ルーティングのgroup化

ルーティングの設定で Route::group を使用すると一括して定義することができるよ
主に使うものは、
・プレフィックス(URLをまとめるときに使用)
・ミドルウェア(主に認証をかけるときに使用)
だよ

下記のコードは
プレフィックスを使って同じURLを経由するroutingを一括りにして、誰

元記事を表示

Ubuntuに最新版のパッケージをインストールする方法まとめ

Ubuntuでパッケージをインストールしようとしたとき
バージョンが古かったりそもそも存在しなかったり
するときの対処法のまとめ

結論としてリポジトリを追加して最新版のパッケージを
インストールするやり方は2点

– 公式(パッケージの方)のリポジトリをサイトから探す
– PPAを使う

apt installはそもそも何をしているのか?

ざっくりとした手順は以下

1. 依存関係のチェック
1. パッケージをダウンロードし、dpkgに渡す
1. dpkgがパッケージをインストール

結局のところ2番目のパッケージが古いか
もしくは存在しないかが問題になる

パッケージはどこにあるのか?

パッケージは/etc/apt/sources.listにリポジトリとして存在している

以下一部抜粋

“`
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
d

元記事を表示

phpQuery、PhamtomJSを使ってJavascriptで生成されたWebサイトをスクレイピングする

#概要
PHPでスクレイピングが簡単に行えるphpQueryと、ヘッドレスブラウザのPhamtoJSを使って、Javascriptで生成されたWebサイトのスクレイピングを行います。スクレイピングはサイトの分析をするときに使える便利な技術です。
今回はニュースサイトから最新記事の情報を取得し、指定のメールアドレスに送信できるようにします。

スクレイピングは、使い方によってはサーバーに負荷がかかったりすることもありますので、利用規約に反していないかなど注意しなければいけない点がいくつかあります。スクレイピングを行う際は、下記サイト等を参考に慎重に行ってください。
[Webスクレイピングの注意事項一覧](https://qiita.com/nezuq/items/c5e827e1827e7cb29011)

#phpQueryのダウンロード
phpQueryのダウンロードページから最新の「phpQuery-…-onefile.zip」をダウンロードします。
https://code.google.com/archive/p/phpquery/downloads

phpQuery-o

元記事を表示

かゆいところに手が届く配列につかう関数まとめ

1. [array_merge](#1-array_merge) –配列同士を結合する
2. [array_merge_recursive](#2-array_merge_recursive) — 配列同士を結合する(キーが同じ文字列の場合も上書きされない)
3. [array_count_values](#3-array_count_values) — 配列の値の登場回数を調べる
4. [array_diff_key](#4-array_diff_key) — 配列のキーの差異を確認する
5. [array_key_exists](#5-array_key_exists) — 指定したキーが配列に存在するか調べる
6. [array_filter](#6-array_filter) — 配列からキーまたは値を指定し配列を抽出する
7. [array_fill_keys](#7-array_fill_keys) — 対象の配列をキーにして値を設定する
8. [array_map](#8-array_map) — 配列の要素全てに指定した関数を適用させる
9. [arra

元記事を表示

PHPSpreadSheetで1万行強書こうとして死んだ話となんとかした話

記憶を頼りに。
帳票出力で1万行を超えるExcelを`PHPSpreadSheet`で書こうとした。
プロジェクトにはすでに`PHPSpreadSheet`のヘルパーライブラリがあってそれ使えみたいな空気感。
で、パフォーマンスが悪くて死んだ。
2000行超えたあたりから1行書くのに3秒とかかかる様になって詰んでた。

## パフォーマンス問題
問題は記憶が確かならこの関数

“`php
$spreadsheet->getActiveSheet()->insertNewRowBefore(7, 2);
“`

`insertNewRowBefore`。この関数、前の行の様式や書式を引き継いでしてくれるので楽なんですけどパフォーマンスで死ぬ。
`PHPSpreadSheet`、全体的にパフォーマンス問題抱えているようでGithubとかも死屍累々、Stackoverflowでは別のライブラリ使えって言われるので全体的に負け戦。でもなんとかしなきゃいけない

## 対応方法
ともかくからのExcelに行番号を保持してインクリメントしながら書き倒して、様式書式全部設定していけば速度もメモリ

元記事を表示

PHPでは==と===の意味が違うらしい

#プログラミングの勉強日記
2020年8月23日
PHPを学んでいく上で`==`と`===`を知り、違いがあることを知ったのでまとめる。

#PHPの比較演算子
 条件式で用いる左右の値の大小や等値関係を確認する演算子を比較演算子という。演算子の左右に置いた値や変数の内容の比較をする。

| 演算子 | 役割 |
|:—:|:—:|
| == | 等しい |
| != | 等しくない |
| > | より多い |
| >= | 以上 |
| < | 未満 | | <= | 以下 | #==と===意味の違い
 `==`:値が等しいときにtrueを示す
 `===`:値が等しく型も等しいtrueを示す

※PHPでは`==`演算子を使うと型が違っても等しいとみなす。

 なので、`===`と`!==`の等号や不等号は値とデータ型まで含めた完全一致もしくは不完全一致かを判定する。データ型は文字や整数、実数などのデータの種類のこと。

“`php
$a = 10;
$b = ’10’;

//trueを返す
$a == $b

元記事を表示

Laravel7 ユーザ認証時にメールアドレス確認の処理を付与する

# 目的

– LaravelのAuth認証ではメールアドレスはただ入力するだけで、入力されたメールアドレスが正しい物であるかどうかの確認がない
– 入力メールアドレス宛にメールを送信し、初回のログインはメール内のURLからのみ行える様にする

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2GHzクアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHPバージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravelバージョン | 7.0.8 | com

元記事を表示

git pushでDocker環境をHerokuにデプロイする

### 初めてHerokuを使ったので方法をまとめました

githubに変更をpushしたら自動でHerokuにデプロイできるようにしています。
今回はLaravelですが、他言語でもBuildpackの言語や環境変数を変えて使えると思います。

# 環境
– mac OS Catalina 10.15.6
– Docker version 19.03.12
– Laravel 7.22.4
– Heroku CLI 7.42.8

# 前提

– LaravelのDocker環境(↓で作成)

[【初心者向け】20分でLaravel開発環境を爆速構築するDockerハンズオン – Qiita](https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4)

– フォルダ構成はこんな感じ

“`:termianl
.
├── README.md
├── docker
│   ├── mysql
│   ├── nginx
│   └── php
├── docker

元記事を表示

【laravel】ファサードについて

#経緯
プログラマとして業務を始めてから間もないタイミングで新人研修の担当を任され、改めて自分が上辺の知識で業務を行っていたのか日々痛感しています・・・。

Laravelのファサードもその一つで、いざ教えるとなると「そういえばファサードってなんだ・・・?」となってしまったので言語化できるように調べてまとめました。

#公式から
>ファサード(facade、「入り口」)はアプリケーションのサービスコンテナに登録したクラスへ、「静的」なインターフェイスを提供します。Laravelのほとんどの機能に対して、ファサードが用意されています。Laravelの「ファサード」は、サービスコンテナ下で動作しているクラスに対し、”static proxy”として動作しています。これにより伝統的な静的メソッドよりもテストの行いやすさと柔軟性を保ちながらも、簡潔で記述的であるという利点があります。
Laravelのファサードはすべて、Illuminate\Support\Facades名前空間下で定義されています。ですから、簡単にファサードへアクセスできます
https://readouble.com/la

元記事を表示

【jQuery】jQueryで、クリックされた【Laravel】の画像ファイルのデータを取得する方法

###パスの最後の/の後が画像のファイル名

“`php:画像出力のHTML
anpanman
“`

“`javascript:画像のsrcを取得→ファイル名を取得
$(‘img’).click(function() {
$object = this;
filename = $object.getAttribute(“src”).split(“/”).pop(); // ファイル名を取得
});
“`

`split(“/”)`で/ごとに配列に分ける
`pop()`で配列の最後の要素だけ取り出す(つまりファイル名)

意外に調べても出てこなかった。。。あんまり苦労するところじゃないのかもしれん。。。

初心者はつまづく気がするので、参考になれば幸いです。

元記事を表示

結合文字列(合成文字)の濁点/半濁点をどうにかする(PHP)

#この2つの違いはなんでしょうか
1.ポセイドン
2.ポセイドン

見た目は同じだけど…

##経緯
スクレイピングで取得した文字列を画像に出力するシステムを作っている時のこと
なんか出力結果がおかしい
![スクリーンショット 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505768/26780d9c-14d6-b45b-03e4-d656c03f31b0.png)

「ポセイドン」と綺麗に出力したいのに濁点と半濁点が分離した「ホ゜セイト゛ン」となってしまう。
もし読み込ませているデータ自体が「ホ゜セイト゛ン」ならわかるけど

読み込み先の文字列を見てみると「ポセイドン」…なぜだ

##Unicodeによる結合
どうやら2文字のデータを1文字に纏める結合というものが行われていて、特に今回スクレイピングみたいにwebからごちゃごちゃ取ってきたりすると混同しがちらしい。

どういう理屈で混同してるのかとか、なぜこんなものが生まれてしまったのかはさておき、とりあえずこの「ポセイドン」を「ポ

元記事を表示

OTHERカテゴリの最新記事