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

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

【環境構築】 「memory_limit」が足りないと言われた!

環境構築時にコードを“`clone“`してきた後

ターミナル上で“`$ php init“`したら下記のようなエラー文が表示されました

“`
Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/RuleSetGenerator.php on line 129
“`
メモリが足りないとのこと。。

## 解決策1 「cloneしてきたphp.iniを編集する」
1. “`$ php init“` で作成されたdockerをdeleteする
1. “`php.ini“`内の「memory_limit」を編集する
“`
memory_limit=256M

memory_limit=-1
“`

3. 再度“`$ php init“`で環境構築する

→変化なし。。

## 自PC内ディレクトリのphp.iniを編集
1. cloneして

元記事を表示

文字コードの5C問題について解説

最近直面した5C問題をメモとしてまとめておこうと思います。

## 5C問題とは
日本語は、ひらがな、カタカナ、漢字など文字数も多く、1バイト(256種類)では
すべての文字を表現することは難しいため、`ShiftJIS`では、漢字を**1文字当たり2バイト**を
使って文字情報を表します。

ここで問題なのが、`「¥」`、`「 \ 」`の文字コードが「**5c**」であり、
**一部の漢字の文字コードが重複している**ため、コンピュータはその箇所を
**エスケープ記号**として解釈することにより正常に読み取れなくなっている。

文字 Shift-JISコード
89 5c

Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較

Qiita > プログラミング言語の比較

Python,Ruby,PHP,Java,JavaScript,Perlの演算子の比較

# Python

https://qiita.com/G-Rape/items/cd3f2f284ba990164564

# Ruby

https://www.tohoho-web.com/ruby/operators.html

# PHP

https://qiita.com/mzmz__02/items/8bfbcf2cd48d9e9f2806

# Java

https://qiita.com/suema0331/items/7045e3ce3e2f5faa9acf

# JavaScript

https://qiita.com/uhyo/items/cc92a553059274d85403

# Perl

https://perlzemi.com/blog/20161005147566.h

Laravelでサイト構築

今日の開発で参考にした記事

https://johobase.com/create-table-primarykey-sql/

LaravelのModelを初心者向けに解説!作成方法や使い方、実践までを即理解


https://qiita.com/usayamadausako/items/f53a24ada4c22e1a2cc9
https://qiita.com/yukibe/items/7bab0d596ae9a0930f18

【MySQL入門】INSERT文を使いこなす!基本からSELECT句まで一挙紹介


https://qiita.com/ryo2132/items/63ced19601b3fa30e6de
https://qiita.com/aoaoao/items/623bf40a1c317fc45a8f
https://note.com/hotate52/n/n7819e25bc700
https://programmercollege.jp/column/2663/
https://webukatu.com/wordpress/blo

そのif文もっと見やすくしてみません?

# 基本
“`
if($priceA > $price B){
$message = ‘Aの方が高い’;
}else{
#message = ‘Bと同じかBの方が高い’;
}
“`
というコードがあったら
“`
$price = $price > $price
? ‘Aの方が高い’
: ‘Bと同じかBの方が高い’;
“`
と書けるよというのがこのお話の基本
(?とか:を先頭にしておくと、三項演算子の処理が続くよ、とわかるのでおすすめ)

# 応用
基本があれば応用があるのが世の習い
もっと複雑な処理でもこんなふうに綺麗になる
## 汚いif文
“`

if ($paymentTotal > $salesTotal) {
$differenceBetweenPaymentsAndSales = $paymentTotal – $salesTotal;
if ($price1) {
$result1 -= $differenceBetweenPaymentsAndSa

Laravel8のJetstreamでAPIの発行をhasTeamPermissionでコントロールする

Laravel入門中です。

今回はJetstreamのAPI Token発行を制限してみます。
あまりよくわかっていないので、この方法が適切かどうかわかりませんがとりあえずやってみました。

### 前提

– Laravel8.x
– Jetstream team版導入済み

### roleを追加

まず、teamに閲覧専用のpermissionを追加します。

app>Providers>jetstreamServideProvider.phpの

“`php:jetstreamServideProvider.php
protected function configurePermissions()
{
Jetstream::defaultApiTokenPermissions([‘read’]);

Jetstream::role(‘admin’, ‘Administrator’, [
‘create’,
‘read’,
‘update’,

【サボりたいエンジニア向け】コーディングに役立つチートシートまとめ

# はじめに

こんな人が役に立つ記事
* コーディング業務の効率を上げたい。
* コーディングに関するチートシートを知りたい。
* 打つのもめんどいからコピペでなんとかしたい(笑)

今回は、コーディングに役立つチートシートをまとめました。

## VSCODEチートシート
エンジニアなら必ず使うであろうVsCodeのショートカットチートシート。これはよく使ってます!

includeとrequire_onceの使い分け

# includeとrequire_onceの違い

– 結論
ファイルの読み込みが失敗した場合の動作に違いがある

■使用例
“`
include ‘samplefile.php’;
“`

“`
require_once ‘samplefile.php’;
““

### includeの場合
指定したファイルの読み込みが失敗しても
Warning(警告)だけ表示され,処理が中断されない。
HTMLやテキスト等を読み込むときに使われる。

### require_onceの場合
指定sたファイルの読み込みが失敗した場合,
Fatal Error(致命的なエラー)が表示され,処理が中断される。
主に関数(メソッド)や処理を読み込む時に使われる。

# 参考記事
https://www.php.net/manual/ja/function.require.php
https://www.php.net/manual/ja/function.include.php

頻出関数をまとめよう

ワイの覚書シリーズ

複数のページを作成する際、タイトルやヘッダー情報、ファビコンリンクなどを一括で変更できるよう、リンクをまとめた関数を呼び出す用のphpを作った。

▽呼び出されるphp

“`php
function site_assets(){ //サイトの情報類
$assets = array(
‘site_title’ => ‘tomeivideo’,
‘site_favicon’ => ‘./image/favicon.png’
);
return $assets;
}
“`
▽呼び出す側のphp

“`php
require_once(‘./assets.php’);

$site_meta = site_assets();
foreach ($site_meta as $key => $value) {
$$key = $value;
}
“`

呼び出される側で連想配列に格納したキー名・要素が、呼び出す側でそのまま変数・内容として利用できる。

## 呼び出される側にアクセスされると?
呼び出

自分で構築したOpenStreetMapのタイルサーバのスピードアップ

# OpenStreetMapタイルサーバを構築して、ついでに表示速度も改善しよう

## 概要
[OpenStreetMap](https://openstreetmap.jp/)はフリー(自由・無料)な地図プロジェクトです。
(2018年のGoogle Maps APIの仕様変更の際に、乗り換え先として検討した方も多いでしょう。)
タイルサーバも公開されていますが、負荷がかかる使用方法の場合、自身でタイルサーバを構築することが推奨されています。
ただし、PostgreSQLを使った、CPU的にもメモリ的にもストレージ的にも非常に重たい処理のため、リアルタイムに地図を生成すると数十秒待たされることが多いです。(特にズームレベルが小さいと遅い)
一度キャッシュを生成すれば次からは早いですが、キャッシュもすぐに消えてしまいます。

そこで、以下の方法でスピードアップを図ります。
– あらかじめ必要範囲の地図をPNG画像としてダウンロード[(参考)](https://dev.classmethod.jp/articles/batch-download-openstreetmap-tile-

逆ジオコーディングサーバを自作

# 逆ジオコーディングサーバを自作しよう
## 概要
緯度経度から住所を割り出す逆ジオコーディングはYahooやGoogle等から各種APIサービスが提供されています。
[参考](https://zenn.dev/niccari/articles/7c0f95d175903c)
件数制限があったり、当然ながらインターネット接続が必要だったりするため、クローズド環境で動作する使いたい放題の逆ジオコーディングサーバを自作しました。
(日本国内の住所のみ対応です。)

## 住所データの入手
住所と緯度経度の紐づけデータには国土地理院の[位置参照情報ダウンロードサービス](https://nlftp.mlit.go.jp/cgi-bin/isj/dls/_choose_method.cgi)を利用しました。
本来であれば、街区レベル(「○○町△丁目□番」)の情報のみで逆ジオコーディングしたいところですが、まだまだ住居表示がなされていない場所も多いので、大字・町丁目レベルの情報も併せてダウンロードします。

必要な都道府県のデータ(zipファイル)をすべてダウンロードして、CSVファイルを取り

【初心者向け】書籍『良いコード/悪いコードで学ぶ設計入門』を要約していく(第一回目)

# はじめに

私自身、エンジニアデビューしてから2年目の初心者です。

勉強のために本書を購入したのですが、設計の原理原則やコーディングの本質などたくさんの学びがあったので、個人的に重要だと感じたと所を中心に要約していきたいと思います。

より詳細に学びたい方は本書『良いコード/悪いコードで学ぶ設計入門』を参考にしてください。

# 書籍紹介

#### ●内容

本書は、”悪いコード”を例としてソフトウェア設計の問題点・改善点を明らかにし、より良いソフトウェア設計のための”良いコード”を紹介している内容となっています。

「変更の影響を最小限にしたい」「コードの可読性を上げたい」「仕様変更に強い設計にしたい」と考えている人は必読です。 

#### ●対象

オブジェクト指向プログラミング言語を使う開発者向けです。私のように一年以上の経験があれば誰でも読むことができます。
 
設計やコーディングの基礎を学びたい人にはかなりおすすめです。

※ただし、本書ではJAVAを取り扱っています
 

[『良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方』](

PHPで指定したディレクトリ内のファイル一覧を取得

最近アイコンの素材サイトを作りまして、その際にディレクトリ内のsvgとpngファイルを全部表示させる的なことをPHPで書いたので解説。

## 完成コード
完成コードはこんな感じ

“` php:php

‘;
}
}
?>



【PHP】PHPで別ドメインへcookieを送る方法

iframe内のコンテンツのURLを開く際に、cookieが消えてしまう事象が発生した。
ifame内は別ドメインで動いているためcookieのセキュリティで別ドメインに送れず、別ドメインを経由して表示されたページではクッキーが消えているという状態だった。

### 別ドメインへcookieを送る方法
PHPで“`setcookie()“`を使ってクッキーをセットするときに、パラメータでセキュリティ等の詳細を設定することができる。
今回は別ドメインに対してもクッキーを送れるようにしつつ、最低限のセキュリティは保つようなパラメータを設定した。

“`:phpファイル
setcookie(‘name’, ‘value’, [
‘path’ => ‘/’,
‘secure’ => true,
‘httponly’ => true,
“samesite” => ‘None’,
]);
“`
上で設定しているパラメータの意味は次のとおり。

“`path“`:サーバー上でcookieを有効としたいパスを記入。
    “`’/’“`をセットするとド

【PHP】同じ名前のcookieが重複して登録される不具合修正

同ドメインで同名のcookieが2つ登録されてしまい、原因を調査しました。

### cookieの判定条件
cookieは以下の3つのパラメータで差別化されています。
1. 名前 (cookieのキー名)
2. ドメイン (cookieを使用するドメイン)
3. パス (cookieが使用できるパス)

今回、名前とドメインは同じでしたが、パスが違ったため別のcookieと判断されて重複登録されていました。

### 重複登録されないようパスを指定
複数個所で同一のcookieを作成・更新する処理がある場合、重複登録されないようにパスを指定する必要があります。

今回はPHPとjavascriptでパス指定の方法を紹介します。

※例では「/」以下でcookieが使用できるようパスを設定。

#### 【PHPの場合】
“`:phpファイル
setcookie(‘name’, ‘value’, [
‘path’ => ‘/’,
]);
“`
※なお、setcookieのオプションに「’httponly => true’」が設定されていると、javascriptなどhttp

【PHP】composer installコマンドについての超簡潔まとめ【Composer】

composerとはPHPのパッケージ管理システムです。
composerを使ってパッケージをインストールするには以下のコマンドを使用します。

“`:terminal
composer install
“`
1. 上記コマンド実行時、同階層に“`composer.lock“`ファイルが存在する場合、“`composer.lock“`に記載されたバージョンがインストールされる。

2. 同階層に“`composer.lock“`ファイルが存在しない場合、“`composer.json“`の情報をもとにパッケージをインストールし、インストールしたバージョン情報等を記載した“`composer.lock“`ファイルが新たに作成される。

3. チーム開発時にはメンバー間でパッケージのバージョンを合わせる必要があるため、“`composer.lock“`ファイルもバージョン管理し、“`composer.lock“`を使用して“`composer install“`を行う。

【PHP】endroid/qr-codeライブラリを使用したQRコード生成方法

QRコード生成はgoogleAPIを使用する方法等ありますが、外部リンクを読み込む方法を採用するのはAPIの仕様変更やサービス停止を考慮すると危険です。

そこでPHPのライブラリ「endroid/qr-code」を使用したQRコード生成の方法を紹介します。

※ここではCakePHP3で実際に導入した方法を紹介します。

### 「endroid/qr-code」のインストール
Composerを使用して「endroid/qr-code」 のインストール を行います。

※Composerはインストール済みという想定で進めます。

composer.jsonのあるディレクトリで次のコマンドを実行

“`:terminal
composer require endroid/qr-code
“`

以上で「endroid/qr-code」 ライブラリの導入が完了です。

### 「endroid/qr-code」の使用方法
ライブラリの導入が完了したので、ここからは実際にQRコードを表示するまでの例を紹介します。

GitHubのREADMEに載っているコードを参考に

【Laravel】Laravelで改行コードを反映してブラウザ表示する方法

### 反映方法
LaravelのBladeファイルで改行コードを反映させて表示するには以下のように記述する。
“`:bladeファイル
{!! nl2br(e(改行ありのテキスト)) !!}
“`
### 解説
1. laravelヘルパー関数の“`e()“`を使用してテキストをエスケープする。
2. phpの“`nl2br()“`の関数で改行文字を“`
“`に変換する。
3. “`{!! !!}“`を使用して“`
“`のみエスケープせずに表示する。

※“`e()“`を使用しないとスクリプトタグ等が有効となったままなので注意が必要。

【Laravel】Laravelでenvファイルが反映されないときの対処方法

キャッシュをクリアすることで.envが反映される。

“`:terminal
php artisan cache:clear
“`
configの設定は以下の方法でクリアして.envを反映する。

“`:terminal
php artisan config:cache
“`

【Laravel】useしているのにClass not foundエラーが出たときの対処方法

### 原因
対象の名前空間を指定したファイルが存在するのに、クラスが見つからない主な原因は、そのファイルがコンパイルされていないこと。

### 対処方法
ファイルの変更内容が読み込んで適切にコンパイルし、クラスを生成してくれる以下のコマンドを実行する。

“`:terminal
composer dump-autoload
“`