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

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

Perlの条件分岐 – ワンポイント解説【Python,Ruby,PHP,Java,JavaScriptとの違いは?】

Perlの条件分岐 – ワンポイント解説【Python,Ruby,PHP,Java,JavaScriptとの違いは?】

元記事を表示

頻出関数をまとめよう

ワイの覚書シリーズ

複数のページを作成する際、タイトルやヘッダー情報、ファビコンリンクなどを一括で変更できるよう、リンクをまとめた関数を呼び出す用の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
“`

元記事を表示

Walker_Commentを継承したクラスがうまく適用されなくて悩んだ話

## はじめに

WordPressのカスタムテーマを1から作成しており,コメント機能の部分をカスタマイズしたいと考えていた.Wordpressで,記事へのコメントを独自のhtml構造で出力するには,以下のようにWalker_Commentを継承して,html5_comment()をオーバーライドするのが一般的だが,定義した内容でうまく出力されずに悩んでいた.

“`php:classes/class-custom-walker-comment.php

表示したいコメント構造など.

元記事を表示

Python,Ruby,PHP,Java,JavaScript,Perlの正規表現の比較

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

Python,Ruby,PHP,Java,JavaScript,Perlの正規表現の比較

# Python

https://qiita.com/FukuharaYohei/items/459f27f0d7bbba551af7

# Ruby

https://qiita.com/shizuma/items/4279104026964f1efca6

# PHP

https://qiita.com/miriwo/items/da463cfcae441400381a

# Java

https://qiita.com/suema0331/items/5dde9f91671100a83905

# JavaScript

https://qiita.com/iLLviA/items/b6bf680cd2408edd050f

# Perl

https://perlzemi.com/blog/2

元記事を表示

PHPの古いtemplate engineであるTemplatePowerについて

ほぼ使われていないと思いますが、もし本当に不幸で10年前以上の技術を使われたプロジェクトの保守に任せられたら、ご参考になっていただければ幸いです。

本記事の想定対象

本記事は以下の対象を読者として想定しています。

  • PHPの初心者
  • 不幸にもPHPの古い技術TemplatePowerを使えざるを得ない担当者
  • HTML、CSS、Javascript初級〜中級の方
  • PHPのtemplate engineに変な見たことのない記述に遭遇する時
  • TemplatePowerを知りたい方
  • template engineのHTML、CSS、Javascript担当者がPHP担当者の業務を知りたい方

と、その他諸々の方も大歓迎です。

参考資料があまり見つからなかったため、錯誤、間違いがあれば、お気軽にコメントしていただければ幸いです。
何度でも修正しますので、多分これが数少ない上古時代技術の参考文献になると思います。

Template Engineとは?

Template Engine(テンプレ

元記事を表示

【Laraval】チャットワークのAPIをGuzzleクライアントを使ってメッセージを送る

## 1. チャットワークのAPIトークンを取得する

画面右上のユーザーのアイコンをクリック>サービス連携>APIトークンで確認

1. 右上のUIからサービス連携を選択

![](https://storage.googleapis.com/zenn-user-upload/9e28f77d3e85-20220902.png)

2. APIトークンを選んでをメモする
![](https://storage.googleapis.com/zenn-user-upload/3fafe219aa75-20220902.png)

## 2.先ずはpost manで叩いてみる

3. 先ずは送りたいチャットルームのルームIDを取得する(URLの#!ridの後ろの数字をコピー)

“`php
https://www.chatwork.com/#!ridxxxxxxxxxxxxx
“`

4. API URLをpost manのURLに貼る(メソッドはPOSTを設定)
![](https://storage.googleapis.com/zenn-user-upload/edbf27c3

元記事を表示

canvasデータをlaravelへ送信しデコードする

こんにちは、いしがみです。
今回は、自分がlaravelをやっているときに嵌まってしまった、canvasデータの送信とlaravel側の受信について書きます。

# 環境
Laravel v9.17.0
PHP v8.1.7

# Javascript側の送信

今回は、保存ボタンをクリックしたときにcanvasに描かれたデータを、base64にエンコードし、laravelへと送信する。laravel側で保存用のAPIを用意しておき、そちらに送信する。
“`Javascript:main.js
saveButton.addEventListener(‘click’, () => {
//canvasデータを指定された画像フォーマット形式のdataURIを返す
var canvasData = canvas.toDataURL(“image/png”);

const fd = new FormData();//送信データ
const xhr = new XMLHttpRequest();//リクエストの作成

//送信先の指定
xh

元記事を表示

【jQuery】append()にクソ長文字列を書くのをやめませんかみたいな話

### この記事の書き方はXSSできてしまうので危険です。
@tadsan**さんよりこのコードだとXSS攻撃されてしまうというご指摘を受けました。**
**こちらの記事のコードで実装するのは危険です。**
戒めのために取り消し線を付けて残しておきます。
タイトルのようなことがしたい場合[こちらのコメント](https://qiita.com/simoyama2323/items/1e93f9c242692c26166c#comment-8e165dfa21951934534d)のような実装をしてください。

### 環境
PHP 8.1
jQuery 3.6.1
PHPSTORM

### 本文

~~例えば要素Aを加工して同ページの要素Bにappend()するときこんなコード書いていませんか。~~

“`html

Hello

World

2022 0902 15:00

元記事を表示

【Laravel】条件によってバリデーションの内容を変更したい

# 実現したいこと
氏名・電話番号など入力項目が複数ある、入力フォームでデータベースの必須カラムの論理値によって、バリデーションルールを変更したい。

# テーブル構成
テーブルは以下のようになっており、カテゴリーテーブルの必須か否かでバリデーションチェックを行い、問題なければ、ユーザーテーブルへデータを保存します。

カテゴリーテーブル(categories)
| ID | name | required |
|:-:|:-:|:-:|
| 1 | 氏名 | true |
| 2 |性別|true|
| 3 |住所|true|
| 4 |電話番号|false|
| 5 | メールアドレス |false|

ユーザーテーブル(users)
|  ID | name | gender | address | tel | email |
|:-:|:-:|:-:|:-:|:-:|:-:|
|   |  | |  |  | |

# 結論
バリデーションチェックは、Validatorで行いました。

Validatorについては以下のページを参考にさせていただきました。

https://q

元記事を表示

OTHERカテゴリの最新記事