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

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

【Heroku】アカウントの登録〜デプロイまで

作成したウェブアプリを公開するため、Herokuにアップすることになったので手順を以下に記載します。

①アカウントの登録

https://signup.heroku.com/jp
から新規登録。画面に従って登録を進める。

②mysqlのアドオンを利用できるようにしたいのでクレジットカードも登録

Manage Account⇨ Billingへと進んでクレジットの登録

③Heroku CLIの登録

Get Started⇨PHPの順に進んで「チュートリアルを始める」をクリック
![スクリーンショット 2021-10-24 5.53.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/661879/4ec64476-6cf1-c55e-34a8-9c6305c7b826.png)

④Heroku CLIをインストーラーからダウンロードするか、以下コマンドラインから登録

“`heroku.bash
$ brew install heroku/brew/he

元記事を表示

【エラー解決】Trying to access array offset on value of type null

#はじめに#
 Laravelでちょっとハマったので一応備忘録として。

#Trying to access array offset on value of type null#
Laravelでview composerに値を渡そうとしたときにぶつかりました。

“`AppServiceProvider.php
view()->composer(‘*’, function($view){
$user = \Auth::user();
$post_model = new Post();
$post = $post_model->get_post($user[‘id’]);
$view->with(‘user’,$user)->with(‘post’,$post);
});
“`

我らがGoogle先生によると、
「null型の値で配列オフセットにアクセスしようとしています」
だそうです。
どうやらまだユーザー情報がない状態でget_postメソッドの引数に\$user[‘id’]を渡しているのが原因のようです。
それでは、あらかじめ配列

元記事を表示

自分の身の回りであったことを仲間に伝えたい人に向いています。

https://github.com/JFLABO/tsv/blob/main/djinjson.php

元記事を表示

これはこんな感じでメモするとJSONオブジェクトを生成できるシステム

https://github.com/JFLABO/tsv/blob/main/data/test.txt

元記事を表示

エックスサーバーの「メール転送(エイリアス)確認ツール」を作ってみました

## 制作のきっかけ
エックスサーバーのメール転送機能でメンバー同報メールを運用していますが、
このメールの転送先が誰だったかな?とわからなくなった時に、
わざわざエックスサーバーの管理ログインから確認するのが面倒であったため。
※そもそもその運用では利用者に簡単に使ってくださいとは開放できないですしね。
※エックスサーバーに転送メールメンバーを返信してくれるAPIなどは無いですよね?
・・・もしありますよ?ということでしたら是非お教えください。。
## エックスサーバーのメール転送設定はどこにあるか?
エックスサーバーへFTPで接続して眺めてみるのと、[エックスサーバー公式のCron設定](https://www.xserver.ne.jp/manual/man_program_cron.php)にサーバ上のローカル位置が記載されているので、それらを参考にしつつ、メール転送の設定は「.alias」ファイルに記載されることが分かりました。
“`/home/[エックスサーバID]/[エックスサーバFQDN]/mail/[メールアカウント]/.alias“`
## さっそく制作
テスト

元記事を表示

【初学者奮闘録】画像の保存/表示をする方法について(Laravel)

#はじめに
この記事は、独学開始から約3ヶ月の実務未経験者が作成したものです。
よって、スキルは非常に未熟なため、決して本記事の内容を鵜呑みにされないよう、ご注意ください。
(未熟な私が記事投稿を行なっている背景については、本文の最後にお伝えします。)

#本日の課題
自作のWebアプリ内で、【画像保存】と【画像表示】するための方法について、解説します。

###対象者
Laravelのインストールを完了している方
自作のアプリに、画像の保存/表示を実装したい方

###環境
PHP 8.0.11
Laravel Framework 8.64.0

###記事を読む前に頭に入れておいてほしいこと
【画像保存】は、DB内には保管せず、public(/storage)ディレクトリに保存していきます。
DBも使用いたしますが、それはあくまでも【パスを通すための文字列を保存する】ためです。
上記の内容を何となく頭に入れて、下記を読み進めてください。
(publicディレクトリは、appディレクトリやresourcesディレクトリ・routesディレクトリと同列に配置されています。)
(stor

元記事を表示

【Laravel】Redisのレプリケーション

## はじめに
Laravelで作ったアプリケーションについて、Webサーバ1台構成から、
負荷分散のためにロードバランサーを導入し、Webサーバ2台構成へ変更しました。

元々WebサーバのキャッシュクライアントでRedisを導入していたのですが、
Webサーバの増設に伴い、追加するWebサーバにもRedisを導入する必要が生じます。

また、Redisに格納されているキャッシュデータはWebサーバ毎に差分が出てはいけないため、
それぞれのWebサーバのRedis同士で同期が取れている必要があります。

今回は、元々あるWebサーバのRedisを新しく追加したWebサーバのRedisへレプリケーションする方法について
紹介します。

便宜上、元々のWebサーバをWeb1号機、追加するWebサーバをWeb2号機としています。
また、RedisのレプリケーションについてはWeb1号機をMaster、Web2号機をSlaveとするMaster-Slave構成にしています。

システム構成の変更は下記の図のようになります。

![20210916_1.png](https://qiita-i

元記事を表示

「WP Offload Media Lite」で開発時と本番時でドメインが異なると挙動がおかしくなる

## WP Offload Media Liteとは
WordPressの画像やビデオ、ドキュメント類をAmazon S3にアップロードして、Amazon CloudFrontなどで配信させることができるWordpressのプラグイン

WP Offload Media Lite for Amazon S3, DigitalOcean Spaces, and Google Cloud Storage

## 問題
ウェブサイトをリニューアルする際などに本番のドメインは使えないためサブドメインなどを作って、開発する要件があった。
開発環境のWordpressで画像つきの記事を登録し、本番環境に移行すると画像が表示されないという現象が起こった。

![スクリーンショット 2021-10-22 14.45.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542793/99f8d29e-b259-d6dd-ae03-35f151cc6138.png)

本来であれば、このプラグインを使用するとS3に画像がアップロードされ、画像のパスは下記のように出力さ

元記事を表示

AWS-MFA認証のアカウントでAws\S3\S3Clientを利用するには

MFA認証が必要なAWSアカウントに対してWEB用SDKのS3Clientでアクセスする方法です。
AWSリソース間でのアクセスはRoleでの権限設定が推奨されていますが、例えばローカル開発環境からテストでS3にアクセスするとき、AWS_SESSION_TOKENの設定が必要になります。

対策はaws_session_tokenを配列に指定してオブジェクトを生成するだけです。

“`php
$s3 = new S3Client([
‘aws_access_key’ => env(‘AWS_ACCESS_KEY’),
‘aws_secret_key’ => env(‘AWS_SECRET_ACCESS_KEY’),
‘aws_session_token’ => env(‘AWS_SESSION_TOKEN’),
‘region’ => env(‘AWS_DEFAULT_REGION’),
‘version’ => ‘2006-03-01’
]);
“`
session token

元記事を表示

Build your own PHP framework

![1619573470292.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1709868/ff70fa25-16b9-0166-dd9d-e79b5609a989.jpeg)
![1619573470292.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1709868/79bddbee-a242-d6ce-ce88-061a474420f4.jpeg)

Atom Framework: [https://github.com/cuongdinhngo/atom](https://github.com/cuongdinhngo/atom)

Ezycrazy Project is powered by Atom framework: [https://github.com/cuongdinhngo/ezycrazy](https://github.com/cuongdinhngo/ezycrazy)

# 1.F

元記事を表示

Execute SQL(1), which is created by SQL(2), which is created by script, with mysql command in that script.

改めてやめようと思った出来事でした。
とあるバッチ処理をメンテナンスしていて、もうやめてくれ、と思った事案です。

予め断っておくと、他にやりようがあるのはわかっています。
でも出会ってしまったんだもの。
あと説明のためにあえて他の手段を取ってないというのもあります。

要件としてはinformation_schemaを使って、SQLでSQLを作るというものです。
サンプルとしてWordPressのデータベースを使います。

賛否はあると思いますが、自分もこういうスクリプト書くことがあるので、責めることができません。
いい方法があれば、いいのですが。

順を追って説明します。

# スクリプトで作られた、SQLを作るSQLを、スクリプト内でCLI実行する

## 第1段階:SQLでSQLを作る

“`sql
SELECT
CONCAT(‘SELECT `’, COLUMN_NAME, ‘` AS \”, COLUMN_NAME, ‘\’ FROM \`wordpress\`;’) AS COLUMN_NAME
FROM
`information_schema`.`

元記事を表示

【Laravel】 キャッシュクライアントにRedisを使用する

## はじめに
Laravelで実装したアプリケーションでデータのキャッシュ化を取り入れるため、
Redisを採用しました。
キャッシュクライアントとしては、様々な選択肢(memcachedやMongoDBなどのNoSQL)がありますが、[公式](https://readouble.com/laravel/6.x/ja/redis.html)にも記載があり、導入がしやすそうだったので、Redisを採用しました。

## Redisについて
[AWS公式のRedisの説明](https://aws.amazon.com/jp/redis/)にもある通り、Redisはインメモリ上のkey-valueデータストアです。
メモリ内にデータを格納するため、RDBと比較し、高速にデータの読み書きをすることができるのが特徴です。
RDBよりもパフォーマンスに特化したデータストアをNoSQL呼びますが、Redisもその中に含まれます。

## 環境
– Laravel 6.5
– Redis 6.2.3

## Laravelへの導入
環境構築の方法については、[公式](https://rea

元記事を表示

Laravelのログレベルをカスタマイズする

### やりたいこと
**Laravelの標準で用意されているログレベルに、独自に作成したログレベルを追加したい**

Laravelで標準で使用可能なログライブラリについては公式サイトを参照。
https://readouble.com/laravel/8.x/ja/logging.html

ドキュメントを読めばわかりますが、Laravelでは以下の8つのログレベルが標準で用意されています。
**emergency、alert、critical、error、warning、notice、info、debug**
素直にこれら8つのログレベルをうまく使って開発すれば困ることはほぼないですが、まれにログレベルを独自で増やしたいとか、既存のログレベルを別の名前のログレベルに置き換えたといった要望が出る開発案件があります。
Laravelのログ出力は公式サイトを参考にすれば柔軟にカスタマイズできますが、ログレベルを増やしたり既存のログレベルを置き換える方法については載っていないので、その時の作業の備忘録です。

### 手順
1. MonologのLoggerを拡張したLoggerクラスを

元記事を表示

【DB移行】 Oracle→PostgreSQL移行によるカラムの型変更

## はじめに
PHP(Laravel)で実装したアプリケーションにおいて、OracleからPostgreSQLのデータベース移行案件に携わりました。
SQLの文法が異なるのは勿論ですが、データベースの移行時に思わぬところでカラムの型が変わってしまう箇所がありました。
ソースコードにできるだけ影響がないようにするために、PostgreSQLのカラムの型を適切に変更する必要があります。

## 環境
– Laravel 6.5
– Oracle 11g
– PostgreSQL 13.3

## char型のカラムをboolean型へ変更する
元々boolean型だったカラムが、移行によりchar型に変わってしまったケースです。
データが入っているテーブルでは、単純にデータ型を変えるだけではうまくcastができずにエラーが出てしまいます。
また、カラムによっては、default制約やnot null制約がついている場合もあり、そういったカラムについてはあらかじめ制約を外しておかないと、カラムのデータのキャスト時にエラーが発生します。

### 制約を外す
対象

元記事を表示

PHP strcmp関数のオレオレ補足

比較できるのはそのまま文字列に変換可能ものだけ。
オブジェクトとか配列を比較対象にすると怒られちゃいます(Fatal error)。
数値を比較対象にすると文字列にキャストしてから比較される。(String関数なので)
(なんかまだある気がする。。。)

####返り値
左辺が小さいと負数
同じだと0
左辺が大きいと整数

ようするに
返り値 = 左辺 – 右辺

使うとしたらこんな感じかなと(PHP8以上)

“`php:strcmp_sample.php
$a = 555555555;
$b = “55555555555555555555555555555555555555”;

$value = strcmp($a, $b);

if ($value !== 0) $value /= abs($value);

echo match ($value) {
-1 => ‘左辺がちっちゃいです。’,
0 => ‘ぴったんこ’,
1 => ‘左辺がおっきいです。’,
default => “なんかおかしいぞっ!!”
};
“`

[strcmp(PHPマニュアル)](ht

元記事を表示

ローカルのphpバージョンを設定

### Homebrewを使ってlocalのphpバージョンを設定する場合

#### 1. Homebrewに下記をインストール

“`
brew install php # 入れておかないと怒られるので追加しておく
brew install php@7.4
“`

#### 2. Homebrewにlocalのphpをphp@7.4へ切り替える

“`
brew unlink php && brew link –overwrite –force php@7.4
“`

#### 3. 上記のcommandで出てきた案内通りに`~/.zshrc`へechoで指定のパスを追加

#### 4.下記コマンドで、`~/.zshrc`の内容を反映

“`
source ~/.zshrc
“`

元記事を表示

LaravelでCSVファイルをエクスポートする

### やりたいこと
**Laravelを使って、テーブルから取得したデータをCSVファイルとしてダウンロードする**

CSVファイルのエクスポート(アップロード)については別の記事にまとめたのでそちらを参照ください。
https://qiita.com/gohandesuyo/items/18ad77bad0b7e068d6f7

ここではテーブルを用意して、テーブルに格納されたレコードを取得する実装例とします。サンプルとなるテーブルの定義は以下の通りとします。
DBはMySQLを前提としています。

|カラム|型|PK|not null|unique|
|:–:|:–:|:–:|:–:|:–:|
|id|int|〇|〇|〇|
|login_id|varchar(20)||〇|〇|
|password|varchar(255)||〇||
|name|varchar(255)||〇||
|email|varchar(255)||〇||
|created_at|timestamp||〇||
|updated_at|timestamp||〇||

### 実装方法
CSVエクス

元記事を表示

管理者のみに新規ユーザー登録を許可する[laravel8.*, laravel/breeze]

社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン

**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない

## version
“`
PHP 8.0.11
laravel/framework 8.65.0
laravel/breeze 1.4.2
“`

## guestの新規ユーザー登録をガードする
/routes/auth.php

“`
Route::get(‘/register’, [RegisteredUserController::class, ‘create’])
->middleware(‘guest’)
->name(‘register’);

Route::post(‘/register’, [RegisteredUser

元記事を表示

管理者のみに新規ユーザー登録を許可する[laravel6.*, laravel/ui]

**1年近く前に書いた記事が下書きに眠ったままでした…**

社内システム的なものを作る場合、Laravel標準のユーザー登録では好ましくない動作をしてしまうのでそこをいい感じに修正します。
**Laravel標準の動作**
URLを知っていれば誰でもユーザー登録可能
ユーザー登録後、そのユーザーで自動的にログイン

**このように修正します。**
管理者のみユーザー登録できるようにする
ユーザー登録のみ行い、そのユーザーに切り替わらない

## version
“`
laravel/framework 6.18.41
laravel/ui 1.2.0
“`

## 管理者のみユーザー登録できるようにする
参考サイト
[Laravel:管理者のみに新規ユーザー登録(register)を許可](https://qol-kk.com/wp2/blog/2019/01/18/post-1045/)
こちらを参考にファイルをいくつか修正しまし。
## ユーザー登録処理後の動作を変更する
ここからが本題です
vendor以下を変更すると後々大変ですので、それを避けつつユーザー登録処理後

元記事を表示

CodeIgniterでNamespace declaration statement has to be the very first statement or after any declare call in the script のエラー

# エラー画面

![Screenshot_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1969082/7ff550e7-bab6-2b51-6ab6-8177ee406dc6.png)

“`
Namespace declaration statement has to be the very first statement or after any declare call in the script
“`

最初に余計なもんを書き足すなと怒られた。

# 解決策
コメントアウトを上にしてあったのが原因でした…

元記事を表示

OTHERカテゴリの最新記事