PHP関連のことを調べてみた2022年03月23日

PHP関連のことを調べてみた2022年03月23日
目次

WordPressでログを取る場合に気を付けること

Web制作会社のエムハンドでエンジニアをしてる@yadon_yadon_yadon_don_donです:raised_hand:
WordPressサイトの制作をする際、
いわゆるシステムチックな構築が必要になる場合、
システムの検証や、システムが動いていることの証拠を残すために、
エラーログを出力させています。

その実装方法、注意することをまとめます:point_up:

## 実装方法
### wp_config.php
下記を、
“`
define( ‘WP_DEBUG’, false);
“`
下記に書き換えます。
「保存したいパス」に関しては、**ドキュメントルートより1つ以上上の階層にディレクトリを作成**、そこを設定することを推奨します。(理由は後述)
“`
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
define( ‘WP_DEBUG_LOG’, ‘保存したいパス’.date(‘Ymd’).’_debug.log’ );
“`
この書き換えが完了したら、エラーや警告がデバッグ

元記事を表示

【Laravel】初期設定について

## この記事に書いてあること
Laravelプロジェクトを立ち上げた直後の初期設定について、最低限必要なものを紹介します。
プロジェクトに応じて、他にも必要があれば設定してください。

## タイムゾーン、言語設定
タイムゾーンと言語設定を日本にします。
config/app.phpを以下のように変更。

“`php:config/app.php

// ‘timezone’ => ‘UTC’,
‘timezone’ => ‘Asia/Tokyo’,

//中略

// ‘locale’ => ‘en’,
‘locale’ => ‘ja’,
“`

## デバッグバー
クエリ実行ログ、ルーティング、ビュー、セッション等の様々な情報をデバッグバーとして出力してくれます。

githubは[こちら](https://github.com/barryvdh/laravel-debugbar)

以下のコマンドでインストール。
vagrantにssh接続して、仮想環境上で実行します。

“`
composer require barryvdh/laravel-debugbar
“`

元記事を表示

【初心者向け】ポケモンでオブジェクト指向をふわっと学ぶ

# はじめに
__オブジェクト指向とは何か。__
プログラミングを学んでいく上で欠かせないものらしいとわかっていながら、ずっと後回しにしていた方や何回学んでも忘れてしまう方(自分)に向けてアウトプットを兼ねて、馴染みのあるポケモンを例に自分なりにまとめてみました!
できるだけわかりやすい言葉でまとめているのでかる〜い気持ちで読んでくれたら嬉しいです!

# もくじ
[・オブジェクト指向の理解が困難なワケ…](#オブジェクト指向の理解が困難なワケ…)
[・オブジェクト指向とは](#オブジェクト指向とは)
[・オブジェクト指向で出てくる用語](#オブジェクト指向で出てくる用語)
[・ポケモンでオブジェクト指向を考えてみる](#ポケモンでオブジェクト指向を考えてみる)
[・さいごに](#さいごに)

# オブジェクト指向の理解が困難なワケ…
これにはプログラミング初学者ならではの理由があると思いました。

__・オブジェクト指向自体が考え方や概念であるため。__
__・書籍や記事での解説が実用的な例を使った解説ではないため。__

オブジェクト指向はルールがあって、それに従って書けば動く何

元記事を表示

XserverにLaravelをデプロイできない場合に注意する点

# はじめに
今回は環境の異なるXserverにLaravelを使ったアプリをデプロイしたいけどエラーが起きる場合に注意する点をまとめました。
gitからクローンしてpublic配下に移動し、シンボリックリンクの設定を済ませた前提で書いていきます。

## PHPのバージョンを確認
まずはlaravelアプリのcomposer.jsonファイルを確認して環境を確認しましょう。
“`json
“require”: {
“php”: “^8.0.2”,
“guzzlehttp/guzzle”: “^7.2”,
“laravel/breeze”: “^1.8”,
“laravel/framework”: “^9.2”,
“laravel/sanctum”: “^2.14.1”,
“laravel/tinker”: “^2.7”,
“laravel/ui”: “^3.4”
}
“`

このrequireに記載されているものを満たす必要があります。今回は8

RubyとPHPの比較(文字列と変数)

# この記事の概要
Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

# 簡単な出力
簡単な出力からそれぞれ見ていきます。

⚫︎“`Ruby“`

“`rb
puts “プログラミング”
“`

⚫︎“`PHP“`

“`php

“`
PHPだと“`最後に;“`がつくのが特徴です。

両方とも***プログラミングと出力***されます。

⚫︎補足
“”だけでなく”で囲むことも可

# コメントの書き方
 コメントの書き方がそれぞれ違います。

⚫︎“`Ruby“`

“`rb
#コメント
puts “Ruby”
“`
Rubyでは“`#“`を使います。

⚫︎“`PHP“`

“`php

“`
PHPでは“`//“`を使います。

# 文字列と数値の連結

⚫︎“`Rub

CodeIgniterのバリデーションルールで他のPOST値を参照する

CodeIgniterのset_rulesは便利ですが、このような形
“`html:日付



“`
の入力項目があった場合、set_rulesは基本的に単一のPOST値に対してのバリデーションなので
例えば存在しない日付を入力していないかのチェックは難しいかと思います
(配列のnameにすればいけないこともないですが、、)

その場合はset_rulesで第二引数を利用して、他のPOST値のnameを橋渡しします。

# やり方

第二引数を利用する場合は、ルール名の後に[]を記述し、そこに引数の中身をいれてください
第三引数は設定できませんので、今回はカンマ区切りで疑似的な配列指定をします

“`php:callback_check_dateはコントローラー内に記述した独自ルール
$this->form_validation->set_rules(‘year’, ‘年’, ‘req

【Laravel】Web開発初心者が1週間で入門チュートリアルを実施した記録(8)

以下の続き。

https://qiita.com/yotty19911207/items/613bbeb18cfa2f748bfe

前回までで、タスクの編集機能をつくった。

入門Laravelチュートリアル (8) ToDoアプリの認証機能を作る

認証機能の実装。
・会員登録機能
・ログイン機能
・ログインしたユーザーは自分のフォルダのタスクだけを閲覧できる機能

ユーザーとフォルダの紐付け。

単純にFoldersテーブルにユーザーIDカラムを追加するだけだと既存データのNot Null制約が邪魔してうまくいかないので、以下コマンドでテーブルを作り直す。

php artisan migrate:fresh

このコマンドでは、テーブルを全て削除してマイグレーションを実行し直す。
すると問題なくマイグレーションできる。なお、Usersテーブルは、既存の以下ファイルにて作成済み。
・2014_10_12_000000_create_users_table.php

ユーザーとフォルダは1対多(フォルダとタスクも1対多)の関係なので、ユーザーモデルにh

【Laravel】公式のDocker環境Laravel Sailを起動するまで

Laravel公式のDocker環境“Laravel  Sail“を起動するまでの流れをまとめました。起動時によくあるエラーの解決方法も説明しています。

# ゴール
Laravel Sailを利用してLaravelのデフォルト画面を表示する。
![スクリーンショット 2022-03-07 23.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654760/d0179e0c-a2bb-946c-f4b5-9c41de6ebaed.png)

# 準備
Docker Desktopを起動してください。
インストールの方法は[こちら](https://docs.docker.jp/desktop/index.html#desktop-download-and-install)から。

# 検証環境
– macOS Catarina 10.15.7
– Docker Desktop 4.6.0

# インストール

[公式サイト](https://laravel.com/docs/9.x/ins

【PHP】参照渡しの配列の要素をunsetしても参照は解除されない

タイトルの通りです。
参照渡し(参照の代入)が推奨できるかはさておき、挙動の一例として参考にしてください。

# テストデータの作成
配列“$foods“を作成し、“$ref_foods“へ参照を代入します。

“`php
$foods = [
‘fruits’ => [
‘apple’,
‘orange’
],
‘vegetables’ => [
‘carrot’,
‘tomato’
]
];

$ref_foods = &$foods;
“`

代入後、“$ref_foods“と“$foods“は同じ内容を指します。
“`php
var_dump($ref_foods);
/*
array(2) {
[“fruits”]=>
array(2) {
[0]=>
string(5) “apple”
[1]=>
string(6) “orange”
}
[“vegetables”]=>
array(2) {
[0

日付を取得する方法

・日付を取得する方法
コード
“`php
‘;
}
“`
`strtotime(‘+’ . $i . ‘ day’)`
文字列を`$i`日後の時間に変換

`$day = date(‘n/j(D)’, $time)`
月/日(曜日)の形で`$time`の日付を`$day`に代入

現在時刻を表示する方法

・現在時刻を表示する方法
①構造化プログラミング
コード
“`
date_default_timezone_set(‘Asia/TOKYO’);
echo ‘現在の時刻は、’ . date(‘G時 i時 s秒’) . ‘です’;
“`
現在時刻を取得するにはdate()を使う。
`date_default_timezone_set(‘Asia/TOKYO’)`で日本時間を取得するように設定している。
`echo`で表示するようにして初めて表示される。(`date()`は時間を返すだけ)

②オブジェクト指向
コード
“`
$today = new DateTime();
$today->setTimezone(new DateTimeZone(‘Asia/Tokyo’));
echo ‘現在の時刻は、’ . $today->format(‘G時 i分 s秒’);
“`
日本時間の設定方法が異なる。

「’」や「”」をechoで表示したいとき

・「’」や「”」をechoで表示したいとき

「I’m from Japan.」と表示したいとき、
“`
echo ‘I’m from Japan.’;
“`
では、シングルクォーテーション(‘)とアポストロフィー(‘)が同じ記号であるためエラーとなる。

これを解決する方法を載せておく。

①文字列をダブルクォーテーション(“)で囲む
“`
echo “I’m from Japan.”;
“`

②エスケープシーケンスを使う
“`
echo ‘I\’m from Japan.’;
“`

PHPのreadfile()でファイルサイズが大きいzipファイルをダウンロードできなかったためfopen()-fread()にした話

PHPのreadfile()でファイルサイズが大きいzipファイルをダウンロードできなかったためfopen()-fread()にした話

#修正前
“`php
readfile($zip_name);
“`

#修正後
“`php
$handle = fopen($zip_name, ‘rb’);
while (!feof($handle)){
echo fread($handle, 4096);
ob_flush();
flush();
}
fclose($handle);
“`

【Docker+Laravel6メモ】開発環境構築についてまとめてみました

## 背景
AWSでの本番環境構築にむけてポートフォリオ開発を進めていたところ、以前の開発環境が簡易的で必要な設定がされておらず、環境依存が起こってしまう可能性が高いと考えたので、本番環境構築前に整えておこうという目的で再構築しました。

:::note warn
今回は再構築、初構築両方に対応できるように手順を記載しました。
状況に応じて実行、スキップします。
:::

– GitHubリポジトリ

https://github.com/Yuuichi-M/travel-notes/tree/main/docker/dev

## 開発環境について

### 前提条件
– Dockerインストール済み
– VScodeインストール済み(Vimでも大丈夫です)

### 開発環境
– OS : Mac
– Docker 20.10.12
– Docker Compose v2.2.3
– Docker image
– laravel-app(appコンテナ)
– php7.4-fpm-alpine(nginx,php-fpm,supervisor)

旅の思い出を共有できるSNSサービス『Travel notes』の紹介

# サービス概要
旅の思い出を投稿して、他ユーザーと共有できるWebアプリケーションです。
旅先の名所や宿泊施設の感想、グルメやおみやげの情報、
地元や近所のおすすめスポットなどを投稿して、他のユーザーと共有できます。

### アプリURL:https://travel-notes.online/

![スクリーンショット 2022-03-19 1.51.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/891391/bf877b6b-6ab2-e9c1-7478-fc10665496e0.png)

## 機能一覧

### 認証機能
– ユーザー登録機能:名前・メールアドレス・パスワード登録
– ログイン機能:メールアドレス・パスワード認証
– ゲストログイン機能:ユーザー未登録のままログイン可能
– パスワード再設定機能:メールアドレス認証・パスワード変更
– プロフィール編集機能:名前・メールアドレス変更。プロフィール画像、自己紹介文登録
– ログアウト機能:ログイン前画面に遷移
– 退会機

セッションがうまくいかないと思ったときの仮説検証

エンジニア初心者がPHPの勉強でつまづいたところを備忘録として記載しています。
自作でToDoアプリを作成しようと思っていまして、そのsignup機能の実装においてエラーが起きました。
以下にまとめます!

# 目次
– 前提
– 課題と結論
– 仮説1(セッションの不具合)
– 仮説1の検証と結果
– 仮設2(コーディングミス)
– 仮設2の検証と結果
– まとめ

# 前提
アカウント作成、signup機能でのエラーです。
フローは
signup画面→確認画面→登録thanks画面→signin画面を想定しており、
signup画面で「2つの条件を両方とも満たす場合」のみ確認画面に遷移するよう設定します。

また、条件とは以下で、満たさない場合はエラーを表示して確認画面に遷移しないようにするような機能を作っています。
・メールアドレスが空欄ではない
・パスワードが4文字未満ではない

# 課題と結論
課題:2つの条件を満たしていないにもかかわらず、画面遷移をしてしまう
結論:コーディングミスがあった

# 仮説1
最初の仮説は、セッションがうまく機能していないのではないかと考えまし

【Laravel】Web開発初心者が1週間で入門チュートリアルを実施した記録(7)

以下の続き。

https://qiita.com/yotty19911207/items/1053c3153e9c3c252b9d

前回までで、フォルダ作成&タスク作成機能をつくった。

入門Laravelチュートリアル(7)ToDoアプリのタスクの編集機能を作る

続いて、タスクの編集機能。
流れとしてはフォルダ作成&タスク作成機能と同じ。

①ルーティング設定(web.php)

Route::get(‘/folders/{id}/tasks/{task_id}/edit’, ‘TaskController@showEditForm’)->name(‘tasks.edit’);
Route::post(‘/folders/{id}/tasks/{task_id}/edit’, ‘TaskController@edit’);


getは一覧画面の「編集」ボタンを押して、タスク編集画面に遷移してきた時。
postはタスク編集画面にてタイトル・状態・期限を入力して「送信」ボタンを押した時。

まずはget時のshowEditFormメソ

Laravelで直接データベースをいじったら地獄を見た件

みなさん、こんにちは!

アプリを完成しましたが、データの削除の際に外部キーのエラーがあったので修正しようとしたところ、地獄を見たので愚痴らせてください。

### サービスについてはこちら
laravel学んで2か月で自サービスを開発した話 Part1

# 何が起きたか
![FireShot Capture 016 – フラワーギフト – flower-gift.herokuapp.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/9dbc3d42-68a5-eef5-44c1-dbfa7fa6c154.png)
以前、凍結されたぶりを削除しようとしたら、
![fireshot_capture_013_-_sqlstate_23000___integrity_constraint_violation__1451_cannot_delete_

PHPの文字列検索でSQLの”LIKE”的に使える関数を作ってみた

# コピペ用関数

こちらをコピーして使ってください。

“`php: functions.php
function strlike(string $haystack, string $needle): bool
{
//
$initial_is_percent = false;
$final_is_percent = false;

//
if (substr($needle, 0, 1) === ‘%’) {
$initial_is_percent = true;
} else {
//no action.
}

//
if (substr($needle, -1) === ‘%’) {
$final_is_percent = true;
} else {
//no action.
}

//
$matched = false;
if (
$initial_is_percent === tr

【Laravel】ControllerからViewへの変数渡し方法と表示まで

こんにちは、最近Laravel楽しいなと思っているLaravel初心者エンジニアです。

今回は**ControllerからViewへ変数渡す方法とView上で、その変数を展開するところまで**まとめてきたいと思います。

## Viewであるbladeファイルに変数を渡す方法

方法としては以下の3つがあります。

①配列を使って渡す
②withメソッドを使う
③compact関数を使う

どれを使っても変数を送信することができますが、
**可読性の点からcompact関数が良いとのこと。**

### 前提の準備

まずは事前準備ということで、以下を用意します。

1.ルーティングの記述
2.viewを返すControllerファイル
3.bladeファイル

1.ルーティング
“`php:web.php
// localhost:8000/view にアクセスしたらVariableControllerのtest関数を呼び出す
Route::get(‘/view’, ‘VariableController@test’);
“`

2.Controllerファイル
“`ph