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

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

macにLaravelを導入

# はじめに
現在通っているプログラミングスクールTECH CAMPでは、Ruby on Railsを用いたアプリケーションの開発を行ってきました。スクールも終盤になり、新しいプログラミング言語、フレームワークを使用してみたいと思って今回「laravel」を導入してみました。

# PHPとLaravel
PHPとLaravelについては、現在、書籍やドキュメントで勉強中です。見聞きした範囲で書くとPHPはプログラミング言語の一つで、サーバーサイドで動的なウェブページを作成することが得意なので、Webアプリケーションに特化している、という感じ。
そしてLaravelは、PHPを使用して作成するWebアプリケーション用のフレームワークの一つ。PHPのフレームワークにはコレ!!という定番はまだなく、いくつか選択肢があるようです。Laravelは、他に比べて歴史は浅いものの人気のフレームワークの一つで、コードをスッキリ書けるらしい。Rubyに対してRails、PHPに対してLaravel、そういう認識です。

# 達成したいこと
Laravelで新しいプロジェクトを立ち上げ、ローカルから確認

元記事を表示

[mysql,laravel]あるカラムで重複を持つレコードだけをまとめずに全て呼び出す方法

#何をした?

operationsテーブルから”第三工種”というカラムで重複するレコードに付随しているデータの塊を作りたいと考えました。

具体的には”第三工種”に”土工”というレコードが複数ある場合、それ以降の”第四工種”以降が”埋め戻し”のものや”掘削”のものなどに分岐します。
それを”第三工種に土工を持つもの全て”で一括りの配列にして、呼び出したいと考えました。

(参考)ER図
![v4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/555157/f3c9a304-52b7-efaf-e850-410381f7404f.png)

#失敗した方法

ひとことで言うと、クエリによる処理でなく配列処理で対応しようとしたらドツボにはまりました。

######※詳細(分かりにくいので、お急ぎの方は読まなくて大丈夫です)
まずテーブルから全レコードを呼び出し、`distinct()`で重複を絞った後、その”id”を持つ”第三工種”を抜き出します。その”第三工種”のレコードを持つものを`foreac

元記事を表示

Call to undefined method Illuminate\Database\Eloquent\Builder::toArray() の解決例

#エラー文の様子
スクリーンショット 2020-06-04 2.43.24.png

#どんなエラー?

“`php:app/Http/Controllers/RecordTimingController
public function syousai_matome($id)
{
$third_operation_class_id = Operation::query()->where(‘record_timing_id’,$id)->distinct()->select(‘third_operation_class’);
return $third_operation_class_id->toArray();
}
“`

上記のように、コントローラで構文的に

元記事を表示

プログラミング言語毎のコーディング規約チェッカー使用感 (C#(Unity) JavaScript(CocosCreator), PHP(FuelPHP))

#はじめに

コーディング規約を自動的にチェックしてくれるコーディング規約チェッカーは、
複数人で開発する際の可読性向上や各人の書き方の癖を平準化できる便利なものです。

コードレビュー等で生産性のない指摘をし合わないよう、
チェックはシステムにやってもらうというのはとても合理的。

一方で、規約に縛られた書き方を窮屈に感じたりすることもあると思います。
そこで、各開発環境における規約チェッカーを使ってみた所感を書き残します。

#C# (Visual Studio)

規約チェッカーであるStyleCopは、
・プロジェクトにNuGetパッケージとしてインストール
・Visual Studioの拡張機能としてインストール

という2種類の方法があります。
前者が適用できるならそちらのほうがベターなようです。

・プロジェクトにNuGetパッケージとしてインストール

NuGetでインストールするとプロジェクト内に管理される形となり、
自動でチェックが走るため扱いやすいです。

また、NuGetではStyleCopの後継であるStyleCop.Analyzersが使用できるため、

元記事を表示

初学者が躓くreturnの概念

#プログラミング初心者が躓くreturn(返り値)

なんとか理解することができたので
忘れないようにアウトプットも兼ねて投稿しておく

returnの意味は大きく2つ

・処理を終わらせる

・値を返す

値を返すという概念はなかなか理解しづらいですが
私は関数で処理して得た値を使いまわしたい時はretrunで返り値を持たせる!と覚えている

試しに2パターン関数を書いてみる

“`php:returnなし

$num = 10;
function a($i) {
$i * $i;
}

echo a($num);

//結果は出力なし

“`

“`php:returnあり
$num = 10;
function a($i) {
return $i * $i;
}

echo a($num);

//100

“`

結果returnをつけてやらないと、全く使いまわすことのできない関数となってしまう

“`php:

$num = 10;
function a($i) {
echo $i * $i;
}

a($num);

//100

元記事を表示

Laravel × Dacapo で始める快適マイグレーション生活!

[Laravel Advent Calendar 2019 – Qiita](https://qiita.com/advent-calendar/2019/laravel) の 1日目 の記事です。

## 去年(Laravel Advent Calendar 2018)の記事

– [Laravel 整理整頓したマイグレーションファイルを生成するライブラリを作った話](https://qiita.com/ucan-lab/items/10bb60e10c5b26a59b92)

実際に弊社の実務でDacapoを運用し、他の会社さんから使ってもらったフィードバックを活かして去年より大幅アップデートしてます。

## リポジトリ

https://github.com/ucan-lab/laravel-dacapo

## 何をするツールか

Laravelのマイグレーションファイル生成をサポートするライブラリです。

## 困っていること

– 開発中はテーブル構成を変更する頻度が高い
– 不要なマイグレーションファイルが増える
– 似た構成のテーブルをコピペして作るにも変更箇所が多い

元記事を表示

【Laravel】外部制約キーを設定しているデータを論理削除してみた

# はじめに
外部制約キーを設定しているデータは、通常テーブルから削除する事ができない。
ただ、DBのテーブルからデータを削除には__論理削除__と__物理削除__の2種類ある。
先ほど挙げた通常の削除とは__物理削除__の事を指します。
では、__物理削除__の場合はどうなるのか、検証していくぅ!

# マイグレーション作成
外部制約キーを使用するために、まずテーブルを2つ用意しましょう。
親テーブルには論理削除の為に、__deleted_at__カラムを用意しましょう。

“`php:CreateSchoolsTable
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘schools’, function (Blueprint $table) {
$table->id();
$table->timestamps();

元記事を表示

Laravel API データポスト時のバリデーションで弾かれた後、http://127.0.0.1:8000/にリダイレクトしてしまう

# 目的

– Laravel APIのバリデーションでpostデータが弾かれた時に初期画面にリダイレクトしてしまう問題を解決した話をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いて導入 |
| MySQLバージョン | 8.0.19 for osx10.13 o

元記事を表示

PHPの覚書

PHP学習の覚書

###連想配列について
#####連想配列は何層にもできる
“`php:test.php
$array_promise_member = [
‘human’=>[
‘Emma’ =>[
‘sex’ =>’woman’,
‘plant’ => ‘three’,
‘age’ => 11
],
‘Ray’ =>[
‘sex’ =>’men’,
‘plant’ => ‘three’,
‘age’ => 12
],
‘Noman’ =>[
‘sex’ =>’woman’,
‘plant’ => ‘three’,
‘age’ => 11
],
],
‘monster’ =>[
‘Sonju’ =>[
‘sex’ =>’men’,
‘age’ => null,
],
‘anokata’ =>[
‘sex’ =>’men’,
‘age’

元記事を表示

【プログラミング】吾輩は関数である名前はまだない

# はじめに

この記事ではチョットキニナル
プログラミングワードについて書いています。

——————————–

# ラムダ式

初めてラムダ式と聞いて
ピンと来ませんでしたが
ラムダ式とは要するに

「無名関数」を表現する為の
書き方のことである。

——————————–
# 無名関数

英語だといろんな呼び名があるみたいです。

nameless function
anonymous function

——————————–

# 無名関数とは

その名の通り
***名前を持たない状態で定義される関数のこと***

通常の関数の場合は以下のような定義方法を使うと思う。
PHPで例を出すと

“` PHP

“`

元記事を表示

FileSystemでファイルクリアをすると結果が取得できなくて困ったこと

# 背景
特定のファイルをcleanするコードを書きたくて

“`
$result = app(‘files’)->put($this->pathFromInput(‘clean’), ”);
$result_str = $result ? “success” : “failure”;
\Log::info(“{$this->pathFromInput(‘clean’)} cleaned: {$result_str}.”);
“`

みたいなコードを書いていたんですけど、ファイルの中身が消されてるのに結果がFalseで返ってきてておかしいなって思いました。

# 調査

なのでLaravelのコードをのぞいてみました。
https://github.com/laravel/framework/blob/7.x/src/Illuminate/Filesystem/Filesystem.php#L133-L136

“`
public function put($path, $contents, $lock = false)
{
return file_put_conten

元記事を表示

【Laravel】ミドルウェア(Middleware)で任意のパラメータを渡す。

メモとして残します。

#■やり方
##ミドルウェア呼び出し側
下記の例ではルーティングでミドルウェアを呼び出しているが、基本的には変わらない(はず)

“`php
//複数の場合、第二パラメータ以降はカンマで区切る
Route::middleware(‘my_middleware:引数1,引数2’)->group(function () {

});

“`

##ミドルウェア(my_middleware)側
ミドルウェアの第二引数**$next**の次に任意のパラメータを入れる引数を定義する。

“`php
namespace App\Http\Middleware;
use Closure;
class MyMiddleware
{
public function handle($request, Closure $next, $arg1=””, $arg2=””)
{
//$arg1=引数1
//$arg2=引数2
return $next($request);
}
}

“`

元記事を表示

UNIX時間(UNIX TIMESTAMP / タイムスタンプ)を普通の日付と時間に変換しながらランダムな日時を自動生成する

#### ランダムな日付だけでなくランダムな時刻も同時に生成

こんにちは。2038年問題まであと18年ですね。
今回は適当な日付と時間をランダムに作るPHPのコードサンプルです。
一応2038年問題も考慮して、date関数などは使わずにやりたいと思います。

[2038年問題の詳しい解説はこちら](https://pisuke-code.com/php-way-to-avoid-2038-promblem/)

DateTimeクラスを使えばいいじゃない…という意見もありますが、フレームワークやライブラリが使えるなら「むしろCarbonでいいじゃない」ということでCarbonを使っております。

Laravelとかではお馴染みですね。CarbonはDateTimeクラスをオーバーラップした日付操作ライブラリなので、DateTimeクラスの上位互換と言えそうです。

仮に、何かしらのテスト用データを大量に挿入しつつ、更新日時をランダムに生成したいとします。Laravelのseedsにそういったコードを書いてみます。

“`php:ProductsTableSeeder.php
<

元記事を表示

MySQL5.7でアプリが動かなくなる原因の1つ

#MySQLのバージョンを5.7にあげたら動かなくなった
MySQL8がリリースされているものの、まだまだMySQL5系をご利用されている場合は多いかと思います。今回はphpのアプリで利用しているMySQLのバージョンを5.6→5.7に入れ替えたときに急にアプリが動かなくなりました。

#原因:sql_modeの設定
原因はMySQLの設定項目であるsql_modeでした。旧環境(5.6)と新環境(5.7)で
この設定が異なっていたため、SQLエラーが頻発していました。
(sql_modeの解説は他に詳しく書いている方が多くいると思うので省略します。)

コマンド実行で変更可能ですが運用的には`/etc/my.cnf`に

“`
[mysqld]

sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES
“`
みたいに明示的に指定して固定しておいたほうが間違いないかと。

sql_modeのデフォルト設定は5.7以降よく変わっているようです。([参考](https://econosys-system.com/blog/archives

元記事を表示

phpMyAdminでエクスポートしておいたバックアップデータがインポートできない!?

## インポートできない…
削除機能を改修している途中、誤ってデータベースのとあるテーブルのデータががっつり半分以上消えてしまったのでエクスポートしておいたテーブルのデータをインポートして元に戻そうとしました。



できない…
なぜだ…

“`sample.sql
1054: Unknown column ‘カラム名’ in ‘field list’

“`

とか

“`sample.sql
#1062 – Duplicate entry ‘1’ for key ‘PRIMARY’
“`

とかエラーが出て、何をしてもどっちかのエラーが出て一向にインポートできる気がしない。

## そもそもエクスポートの時点で必要な設定がされていないから!
はい。この問題が発覚してから調べて知りましたが、
エクスポートのオプションで
『DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT コマンドを追加する』
にチェックを入れておかないとエラーが出る場合があるみたいですね。
しかもデフォルトではチェックが入っていないときた。
エラー出るなら

元記事を表示

DockerでつまづくLaravel Dusk何なのお前

色々事情があってブラウザテストすることになったんですよ。
そう言えばLaravelには「Dusk」っていうイカしたブラウザテストユニットがあったなとか思い出して、試しに使ってみました。
https://readouble.com/laravel/5.5/ja/dusk.html

↑のドキュメント通り、duskをインストールし、動かしてみたら

“`
# php artisan dusk
Cannot load Xdebug – it was already loaded
Cannot load Xdebug – it was already loaded
PHPUnit 6.5.14 by Sebastian Bergmann and contributors.

E 1 / 1 (100%)

Time: 1.29 seconds, Memory: 16.00MB

There was 1 error:

1) Tests\Browser\Exam

元記事を表示

Laravel フォームリクエストを使用してバリデーションを指定したら403エラーが出た

# 目的

– フォームリクエスト(FormRequest)を使用してバリデーションを実装してブラウザから動作を確認したところルールにクリアしていても403エラーがでてしまい、当事象を解決した話をまとめる。

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.3) |
| ハードウェア | MacBook Pro (16-inch ,2019) |
| プロセッサ | 2.6 GHz 6コアIntel Core i7 |
| メモリ | 16 GB 2667 MHz DDR4 |
| グラフィックス | AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB |

– ソフトウェア環境

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

元記事を表示

wordpressの立ち上げ

##概要
wordpressのプロジェクトをクローンして立ち上げるまでの備忘録

##やり方
①データベースを作成する
②wordpressのプロジェクトのリポジトリをgithubからクローンする
③このURLからhttps://ja.wordpress.org/download/ wordpressインストールする
④クローンしたディレクトリをwordpressのテーマの配下に移動させる
⑤データベースの情報を登録する

##1. データベースを作成する
localにデータベースを作成する
https://qiita.com/ibarakishiminn/items/ddfc8018b69246cbcbb8

##2. wordpressのプロジェクトのリポジトリをgithubからクローンする
プロジェクトをwordpressのテーマとして設定することで、開発していきたいので、まずはgithubからクローンする。
クローンしたら、そのディレクトリを、後ほどインストールしたwordpressのテーマに持っていく。
作業後wordpressで外観を確認してOKなら、gitで上書きして管

元記事を表示

CakePHP 2.x 画像バリデーション

 今回はCakephp 2.xでの画像のバリデーションについてまとめようと
思います。尚、今回が初の投稿なので適宜アップデートさせていただく事がありますので
ご了承下さい。

やりたい事

1.画像のバリデーション(フォーム、画像アップロード処理の際可能)
2.画像のユニーク化(ファイル名を一意のものにする)

画像バリデーションで出来る事

•フォームでファイル形式を指定する事で意図しないファイル形式を
選択時点で除外する事が出来る。

•ファイルサイズを指定したサイズにする(最大値、最小値の指定)

•画像の拡張子の偽装チェックが出来る(悪意のあるユーザーからのアップロードを防ぐ、
セキュリティ性を高める)

1.画像のバリデーション

まずユーザー情報ページを作るという前提でテーブル構成は以下のようになります。

“`PHP:table
CREATE TABLE `users` (
`id` int(10) UNSIGNED NOT NULL,
`username` varchar(50) DEFAULT NULL

元記事を表示

[TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel. ] が出たとき

* phpでPDFを生成する機能を動かした際、白画面に表題のエラーが返ってきた。
* phpinfo() で確認したらGDライブラリが入ってなかったので入れた。

“`shell
sudo apt-get install php7.3-gd
“`

* インストール時、選択肢を聞かれたところはデフォルト、紫の画面は current keep 的なものを選択。

* おまけ
* phpのバージョン毎にgdがあったので検索してどれを使うか判断する

“`
apt-cache search gd | grep php
“`

元記事を表示

OTHERカテゴリの最新記事