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

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

Dockerで2つのプロジェクトで参照し合う場合の注意の話

開発環境としてDockerって結構使いますよね。
今回は開発プロジェクトが別の開発プロジェクトにアクセスするときに発生しました不具合とその対応を書いておきたいと思います。
正直、この問題は難しくて一日悩んでいました。
答えはシンプルでしたw

# 開発環境
はじめに開発環境を書いておきます。

今回はPHPStormを使いまして以下のプロジェクトを作成しています

– Webページのプロジェクト(port : 8000)
– Web API開発プロジェクト(port : 8001)

それぞれの動作確認はHTTP Requestとブラウザにて確認していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481837/2aae960c-9481-0c50-a382-9d75a722f67c.png)

# 不具合
はじめに開発スケジュールを書き出します

1. Webページプロジェクトの開発 ( リリースしたWeb APIを利用 )
2. 今回、Web APIプロジェクトの追加機

元記事を表示

CRC32の再現方法を求めて

## 巡回冗長検査

[巡回冗長検査(Wikipedia)](https://ja.wikipedia.org/wiki/%E5%B7%A1%E5%9B%9E%E5%86%97%E9%95%B7%E6%A4%9C%E6%9F%BB)

ファイルの完全性検査などにはSHA256やMD5が使われますが、短いテキストのようなデータの場合、SHA256やMD5は結果が長すぎて使いにくいことがあります。

その点、CRC32は結果が32bitで、16進数表記でも8文字で済むため、元のテキストの代替として使うのに簡便です。

しかし、CRC32と一口に言っても実はいくつかの方式があり、異なる値を算出します。

## CRC32の種類

前掲のWikipediaのページを見ても、32bitのCRCには(厳密にはCRCでないAdler32も含めて)
– CRC-32Adler (厳密にはCRCではないがよく混同される)
– CRC-32
– CRC-32C
– CRC-32K

の4種類が掲載されています。CRC-32Adlerは計算方法が全く異なりますが、それ以外の3つは、Wikipedia記事中で

元記事を表示

JavaScriptから使いやすいWebAPIをRPCでお手軽に

JavaScriptから使いやすいWebAPIを考える回。
WebAPIといえばRESTが有名ですが、今回はRPCを実装してみます。

## 基本的な使い方

“rpc.js“はローカル関数を実行するような感覚で、サーバ側の関数を実行できます。

“`js:基本的な使い方
import API from ‘./rpc.js’

const result = await API.plus(1, 2) // 関数名plusと引数[1,2]が送信される
“`

ここでplusメソッドは幻で、定義はありません。
裏で**関数名**と**引数**がHTTP送信されて、サーバ側で同名の関数が実行され、結果が返ってくる仕組み。

基本的にGET送信ですが、**関数名の最初が大文字**の場合はPOST送信になります。

“`js:POST送信
const result = await API.Save(data) // POST送信
“`

以上がJavaScriptからWebAPIにアクセスする最善の書き方だと思います。
サーバ側も関数定義+αで済むので、全体を通してシンプルで分かり

元記事を表示

PHPとRepl.itで何でも換算してくれる単位換算機を作ったお話

# はじめに
はじめまして。**Fuse**です。
普段はゲームを作っているものですが、ここ最近ある悩みが浮上しました。
それは様々な単位について。武器の名前を考えるときにインチとフィートがとっさに変換できなかったりと
単位に関する悩みが絶えませんでした。
今回はその悩みを解決するために、**どんな単位も登録すれば変換するWebアプリを製作しました。**
# 完成品
実物へのリンク

https://conversionthemall.frmkdj.repl.co/

動画


# 制作環境
+ 使用言語 PHP v7.4.21
+ ホスティング先兼IDE Repl.it
# 構成ファイルの簡単な説明
+ index.php
最初に開かれるphpファイルは一番上の階層に配置しなければならないらしい。
![mono.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2957248/49e97e

元記事を表示

初めての個人開発日記【Laravel】#1

# 作りたいWebアプリ
**”休日の予定を与えてくれるサービス”** を作っていきたいと思っています。

大学では授業の組み方によっては丸一日授業が全くない日が週に1、2回ほどあり、結構暇なことが多いのですが、せっかくの休日なのにネトフリやYoutubeをみたりしているとあっという間に1日が過ぎてしまいその日を無駄にしてしまった気分になることがたまにあります。

みなさんもせっかくの休日なのに予定が無くなにをしようか考えているといつの間にかもう夕方になってしまっていたり、ネットサーフィンで1日を無駄にしてしまった経験があるのではないでしょうか?

そんな経験から休日の予定を勝手に与えてくれるサービスがあればいいなと思い今回のサービスを考えました。

# 実装する予定の機能
箇条書きで欲しい機能を書き出してみました。
– ルーレットでやることが決まる
– ルーレットの目がミッションになっている
– ミッション例
– 美術館に行く
– 映画を見に行く
– 行ったことのないカフェに行くetc…
– Twitterへの投稿機能
– 投稿するとポイントゲ

元記事を表示

【未経験・独学】アパレル卸売ECモールアプリの開発 / マルチログイン【PHP/Laravel/JavaScript/Vue】

# はじめに

独学でポートフォリオを作成しました。(Laravel/Vue.js)
github:https://github.com/ShintaroKurata/job-board

本記事では、学習したことを振り返ります。
## 自己紹介

25歳
学習期間:2022年6月〜9月
前職:営業→Webディレクター
## アプリについて
### 概要
今回、PHP(Laravel)のポートフォリオとしてマルチログインで実装されるECモールを作リました。
実際には購入機能はないので、カート機能までの実装です。
### サービス画面
#### バイヤーダッシュボード
![buyer-dashboard-sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255872/9cde288a-b44c-644a-9e9a-7285aa9b7809.png)
バイヤーはこの画面から、自分のプロフィールなどを更新できます。

#### バイヤープロフィール
![buyer-profile-sample.p

元記事を表示

荒廃したWordPressのPHPコードをPHP_CodeSnifferでキレイにしたい

## きったねぇWordPressのコード:worried:

きったねぇコードは解読するのが難しく、バグの原因になりやすいです。
そんな時は「整形ツール」

以前までは、prettierを使用してPHPの整形をしていました。

https://github.com/prettier/plugin-php

しかし、こちらはHTMLとPHPが混在したコードの場合、動作が不安定になることが報告されています。

> このプラグインは、純粋な PHP ファイルをフォーマットした場合に安定すると考えています。PHP と HTML が混在したファイルのフォーマットは、まだ不安定だと考えています。詳細は “inline” タグの open issues をご覧ください。(DeepLによる日本語訳)

きったねぇコードのままはイヤだ:sob:

## WordPress公式のコーディング規約を発見!:laughing:

PHP コーディング規約

元記事を表示

初めての個人開発日記【Laravel】#0

# Webアプリを開発してみたい!
大学でプログラミングの授業をきっかけにプログラミングに興味を持ち、これまでにHTML, CSS, javascript, React, PHP, Laravelの勉強を独学で行ってきました。
そろそろ何か自分のアイデアを形にできるのではないか?と感じたのでこれから数回にわたって、Laravelを用いたWebアプリ開発の開発日記を発信していこうと思います。Qiitaに記事を投稿すること自体が初めてなので拙い部分もあると思いますが読んでいただけると嬉しいです。

元記事を表示

centos7でnginxと(laravel)php-fpmを動かすメモ

# 作業記録
vagrantでcentOS7を立てて
nginxとlaravel(php-fpm)を動かす。

ゴールはlaravelのwelcome画面が出ればok

## centOS7を立ち上げ
vagrantが既に入っている状態で
centOS7のイメージは

https://app.vagrantup.com/bento/boxes/centos-7

こちらを使用する。

“`
$ vagrant box add bento/centos-7
“`

“`
$ mkdir test
$ cd test
$ vagrant init
//これでVagrantfileが作られる
$ ls
Vagrantfile
“`

“`:Vagrantfile
config.vm.box = “bento/centos-7” //box名を設定
config.vm.network “private_network”, ip: “192.168.56.54” //ipを指定
//Ranges: 192.168.56.0/21この範囲内で指定しないといけないっぽい
config.vm

元記事を表示

【laravel】ユニットテストざっくり

## 概要
laravelでは下記テストが用意されている。
– ユニットテスト /tests/Unit
クラスやメソッドなどモジュール単位で動作を検証する

– フィーチャテスト /tests/Feature
WebページやAPI機能など
コントローラの動き(リクエストを受けてレスポンスを返すまで)を検証する

今回はユニットテスト練習用を作成した際のまとめ。

## テスト対象の作成

“`sample.php
public function sample(int $english, int $math, int $science)
{
$average = ($english + $math + $science) / 3;
//3教科の平均でクラス分け
if ($average >= 85) {
$class = ‘advance’;
} else {
$class = ‘basic’;
}
return array($a

元記事を表示

【PHP】Laravelの`bearerToken()`メソッドを使ってリクエストヘッダーのBearerトークンを取得

## 概要
LaravelでAPIを開発するときなど、認証時にリクエストヘッダーのトークンを使うことがあると思います。[【Laravel8.x】リクエストヘッダーの値を取得する。](https://yama-weblog.com/get-request-header-data-in-laravel8/)の記事にある通り、requestからヘッダー値を取得する方法でも全然良いと思うのですが、Laravelでは`bearerToken()`というメソッドが用意されていたので紹介します。

## bearerToken()メソッドについて
[How to get Bearer token from a request in Laravel](https://stackoverflow.com/questions/47158522/how-to-get-bearer-token-from-a-request-in-laravel)のstackoverflowの記事に使い方など書かれています。基本的にはrequestのオブジェクトにメソッドが用意されているので、`$token = $reques

元記事を表示

php ダウンロードされました対応方法

# ずばり httpd.conf 見直し

## 下記は重要です。

“`
ServerRoot “c:\Apache24”
Listen 80
#LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule php7_module “c:\php\php7apache2_4.dll”


AllowOverride none
Require all denied

DocumentRoot “C:\Apache24\htdocs”

#
# Possible values for the Options directive are “None”, “All”,
“`

#最後に下記追加

“`

PHPINIDir “c:\php”


AddHandl

元記事を表示

mb_check_encoding関数の調査

## はじめに
久しぶりに文字コード絡みの不具合を調査したので備忘録として経緯をまとめます。

## 背景

– PHPのCSVファイルのアップロード処理で不具合が発生しました。
– 特に変わった処理はなく、ファイルをアップロードして、DBに取り込むというよくある処理。
– ただし、アップロードしたファイルをfilterを使用して、チャンクごとにmb_check_encoding関数で文字コードをチェックしていた。

## 不具合

– 1年以上運用されているサービスで、基本的には問題なく動作していた。
– 極稀にCSVファイルが最後まで読み込めずに処理が終わるという現象が発生する。
– 例外が捕捉されず、システムエラーとして扱えない。

## 原因
調べた結果、「髙」(はしごだか)などの文字コードが原因のようでした。
「髙」自体はよく使われているので、「極稀に」発生するという現象の辻褄があいませんでした。

Shift-JISでは、一部の文字には「IBM拡張文字」と「NEC選定IBM拡張文字」の2つの文字コードが割当てられているようです。
https://ja.wiktionary.

元記事を表示

新人に教えたいコードを書く時に注意していること

フリーランスの小野です。

最近、若手に教えることが増えてきて、ふと思ったので書くことにしました。

「プログラムを書く」

システム開発をしていると切っても切り離せない作業ですが、プロジェクトチームで担当している時に「できる限り全員同じようなコードを書き残したい」と思っています。
そのため、ある程度のコーディングルールは決めて、システムチームで共有しています。

PHPのコーディングルール規約は、こちらのページが分かりやすくてオススメです。
まだまだPHPを始めたばかりの人は、一読しておいて損しません(というより一読しておくべきページです…笑)

https://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.php

実際の現場は、上記だけを守っていればよいというわけではありません。
フレームワークを使ったりしていると、「クエリをベタに書く」 or 「フレームワーク独自のクエリビルダで統一する」などなど臨機応変に対応する場面があると思います。

今回はもう少し基礎的なルール・書く時の注意点を書いていこうと思います

元記事を表示

Laravelのルーティングファイルの違いについて

## はじめに
Laravelのルーティングファイルについて、何気なく触っていたので備忘録として残します。
※Laravel8を使用
## 対象者
この記事は下記のような人を対象にしています。

– 駆け出しエンジニア
– プログラミング初学者

## ルーティングファイルの種類
– web.php
– api.php

## 違いについて
#### web.php
デフォルトでCSRF保護の機能が有効になっているため、外部からPOSTすることができない。

#### api.php
CSRF保護が有効になっていないため外部からPOSTができる。

## 詳細
kernel.phpにweb.phpとapi.phpのそれぞれの設定がミドルウェアとして組み込まれています。
デフォルトでは下記の通りの設定となっており、api.phpには`VerifyCsrfToken`が入っていないためCSRF保護が機能しておりません。
“`php:kernel.php
protected $middlewareGroups = [
‘web’ => [
\App

元記事を表示

Laravel コレクション型のmapとpluckはどちらが早いのか

## 概要
Laravelで特定のコレクション型の変数から「idがkeyで名前がvalueの値を抽出したい」というケースがありました。

その時に`map`と`pluck`で両方の書き方がある(厳密にいうと全く同じ形式の値にはならないが、その後の使い方は似ることが多い)が、どちらの方がパフォーマンス的には良いのか疑問に思ったので検証してみました。

## 検証方法
・測定する項目は「メモリ使用量」と「処理時間」とする。
・対象のコレクション型の変数は100個のオブジェクトが入っているものを使用する。
・10回の測定を終えて、それぞれの平均値を比較する。

## 対象データの例
今回使用するのは下記のようなオブジェクトが100個ほどあるコレクション型の値である。
そこから「idがkeyで名前がvalueの値を抽出したい」というケースを実践する。
“`
{
“id”:1,
“name”:”hogehoge”,
“birthday”:”2022-11-05″,
“department”:”Sales”
}
“`

## 関数それぞれの使い方
“`php

元記事を表示

LaravelでWeb APIを開発するときの話

LaravelでWeb APIを開発する時ってどうしていますか?
routeをapi.phpに入れると…
api/ほげほげになりますよね
これってWeb API開発をする時ってメンドくさくなりますよね

`http://localhost/hogeservice/v1/fuge`

とバージョン(v1)以下にプロジェクトを差し込んで運用を考えるとapi.phpに入れると変になります

`http://localhost/hogeservice/v1/api/fuge`

になってします
これを対策にweb.phpに入れると解決しますが…

ダサいです。

ちゃんとapiなのでapi.phpに入れて開発したいのでその対策を考えてみます

# 開発環境
はじめに開発環境を確認します

“`bash
$ php -v
PHP 8.1.11 (cli) (built: Sep 29 2022 20:02:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies

元記事を表示

PHPのクラスについて

## はじめに

日本システム開発株式会社の藤井といいます。
タイトルにもあるようにクラスについてまとめました。
クラスとは?より、PHPのクラスについての内容になっています。

## オブジェクトについて

オブジェクトは他の言語の参照と同じように扱えます。

`$obj = new StdClass()`を実行すると、`$obj`にはオブジェクトのIDが代入されます。
`$obj`を他の変数に代入すると、オブジェクトのIDがコピーされます。
`$obj`には、オブジェクトのIDが代入されているため、nullを再代入してもオブジェクトは消えません。(他の言語の参照と同じ動作です)

“`php

元記事を表示

PHP8.1の新機能を試してみた

# はじめに
PHP8.1の新機能を試してみました。
試した機能は以下です。
* 文字列をキーとして持つ配列のアンパック
* 列挙型
* 交差型

それではそれぞれの詳細と具体例を書いていきたいと思います。

# 1. 文字列をキーとして持つ配列のアンパック
文字列のキーを持つ配列を展開できるようになりました。
“`php
‘foo’];
$arr2 = […$arr1, ‘bar’ => ‘bar’];
var_dump($arr2);
“`

“`php
// 実行結果
array(2) {
[“foo”]=>
string(3) “foo”
[“bar”]=>
string(3) “bar”
}
“`
この機能のおかげで連想配列が扱いやすくなりそうです。

# 2. 列挙型
列挙型は独自の型を定義するための機能で、セレクトボックスで設定する値に使用したり、バリデーションに使えるかと思います。

ここでは定義方法からセレクトボックスの値として使用する方法まで具体例を書きたいと思います。

## 2.1 定義

元記事を表示

【研修】未経験WEBエンジニア1ヶ月目の振り返り

# 0. はじめに
大阪の受託開発エンジニア1年目の、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
未経験エンジニアとして1ヶ月目の振り返り記事となります!(まだ実務ではなく研修ですが…)
内容としては、今後研修を受ける方向けポエムなので、あまり参考にはならないかもです^^;

## 0-1. 目次
> [1.研修内容](#1-研修内容)
> [2.学んだこと](#2-学んだこと)
> [3.学びたいこと](#3-学びたいこと)
> [4.やってよかったこと](#4-やってよかったこと)
> [5.所感](#5-所感)
> [補足](#補足)
> [Reference](#reference)

## 0-2. 結論
– 研修内容は書けないので、僕の所感ベースの内容となります。
– 未経験エンジニアにとって、外部研修のある会社はとてもありがたいです。
– 経験者やスクール卒の未経験の方にとっては物足りないかも?

## 0-3. 想定読者
– 外部研修付きの会社ってどんな感じ?
– 自分より後に入社さ

元記事を表示

OTHERカテゴリの最新記事