PHP関連のことを調べてみた

PHP関連のことを調べてみた
目次

【TypeScript × PHP】ReactとLaravelで経路共有アプリを作った話

# 🚙 はじめに
ReactとPHPを用いてwebアプリを開発したので制作記録として解説を掲載したいと思います.また筆者はフルスタック開発初心者であるため,至らぬ点があるかと思われますがご了承くだいさい.

# 🚙 自己紹介
初めまして.趣味でweb開発を勉強している273*(ツナサンド) / Kei.と申します.関西の大学生です.最近はフルスタック開発を行なっています.初心者です.

# 🚙 完成品
以下のリンクからwebアプリにアクセスできます.

https://github.com/273Do/Route8

[サイトURL](URL)

最終調整につき公開停止中

# 🚙 制作に至った経緯
私は趣味で友人とサイクリングやドライブによく行くのですが,経路を選定する際に他の人の経路を参考にしたいと感じたことが多々ありました.「経路を共有できるサービス」は既に存在しますが,私調べではただ経路を共有するだけのものばかりでした.そこで,独自のサービスを開発したいと思いました.走行時の感想や天候,移動手段なども併せて投稿できるようにすることで,より詳しく経路を選定することができるように

元記事を表示

【PHP/Slim4】1.軽量フレームワーク(Slim4-skeleton) 環境構築

軽量な機能のWeb APIを作成したい
Laravelのようなフルスタックではなく、軽量なフレームワークで簡単に構築したい
ということで、Slim4を使ってみたときのメモ書き

## Step1.Slim4-skeleton環境の構築
git bashなどcomposeが使える環境を用意し、以下のコマンドを実行
Slim4-skeletonプロジェクト一式がダウンロードされる
~~~js
composer create-project slim/slim-skeleton [任意のプロジェクト名]
~~~

#### 補足.フォルダ構成について
最上位の親ディレクトリは、上記のコマンドで入力した「プロジェクト名」でフォルダが生成される
|階層1|階層2|階層3|編集|概要|
|—|—|—|—|—|
|app|dependencies.php||〇|ライブラリのコンテナ生成
Twingなどのライブラリをcomposeで追加後、依存関係の解決|
||settings.php||〇|環境変数設定やライブラリの設定
||middleware.php||〇|ライブラリを

元記事を表示

【PHP】ファイルサーバーをPHPで作ってみた

こんにちは、技術猫です。
(初投稿です)

ApacheとPHP(とTailwind CSS)でファイルサーバーを作ってみました。
この記事では、ログイン機能に必要なJSONファイルの読み取りの方法や、
ファイルのアップロード機能の実装方法などを紹介します。
そしておまけで、PHPでのコマンドの実行方法などを紹介します。

:::note info
コード内のコメントアウトされてる部分を読むと意味がわかるよ!
:::

:::note alert
この記事で紹介するコードの一部は、セキュリティが万全ではない可能性があります。
社外などに公開することは推奨しません!
:::

## ソース

https://github.com/DiamondGotCat/tcloud

作成した全部のソースコードはGitHubのreleaseにてMITライセンスで配布しています。

一応ApacheとPHPがあれば使えます。(テスト環境はmacOS)

## ログイン機能
ログイン機能は、最初はパスワードハッシュをPHP内で書いていましたが、
後から出てくる「ユーザー追加機能」という機能が必要なため、

元記事を表示

ローカル環境にLaravelのプロジェクトを作成し、実行するだけ

開発環境はWindows10 Pro(64bit) + PHP 8.1.9 + Composer version 2.4.1。

1 コマンドプロンプト上でカレントディレクトリをCドライブ直下に移動
“`bat
cd c:\
“`

2 コマンドプロンプト上でLaravelのプロジェクトを実行
“`bat
composer create-project laravel/laravel laravel_test_repo
“`

:::note info
インストールが実行されるので、しばらく待機する。
Laravelのバージョンは10.2.9。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2739418/f7d8d072-f93f-c0fd-a670-322663e63721.png)

:::

3 インストールが終了したら、コマンドプロンプト上で、プロジェクトのディレクトリへ移動する
“`bat
cd laravel_test_repo
“`

4 コマンドプロンプ

元記事を表示

ブラウザでやり取りできるようにしてみた。

![Animation_xampp_on2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/9c1feb9c-b853-c831-814d-665762e559a8.gif)
備忘録 ホームページにも忘れずに書いておくこと。
やったことは、インストールと立ち上げ。
apache のconfigに書き足す事。
textを作り、書き込んで保存すること。
アドレスは忘れないようにメモをしておくこと。
Apach2_4 php8apach2_4.dllのためXampp3を導入。ruby,pythonはapache2.2でも動く。
サーバーアドレスは127.0.0.1 ネームはlocalhost メールアドレスは内緒や。
後は、出たとこ勝負。xamppは警告出すから、フォルダーを作っておく。他もアドレスのため独立させた「-」はプログラムでまいなすに間違わない様に「_(アンダースコア)」わからんことはcopilotiに聞く。
VSCoodo,terapad,Screen To Gif,Visual S

元記事を表示

Amazon SESを用いてHTMLメールを送信する

# SDKをインストールする
“`
composer require aws/aws-sdk-php
“`

# SDKを用いたコード
“`PHP
use Aws\Ses\Exception\SesException;
use Aws\Ses\SesClient;

$ses = new SesClient([
‘profile’ => ‘default’,
‘region’ => ‘us-west-2’, //任意のもの
‘version’ => ‘2010-12-01’
])

//送信対象のメールのリスト
$mailList = [‘aaa@aaa.com’, ‘bbb@bbb.com’];

//HTMlメールのボディ
$html = ‘

AWS Amazon Simple Email Service Test Email

‘.

This email was sent with ‘.
‘Amazon SES

元記事を表示

あなたの作った画像アップローダー、投稿者の個人情報ダダ洩れだよ!

# 自前のアップローダーで起きる問題

## 開発者 ――
インフルエンサーとファンをつなぐコミュニティサイト「Qitter」を作ったぞ!
テキストと画像をPOSTするだけのシステムだから、全部自前の実装で作っちゃったぞ。

![job_programmer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/c22ba9e5-5df0-8906-6dbf-ca44cccc30b2.png)

## 投稿者 ――
今日もQitterに投稿しなくちゃ!
「晩ご飯なう!」

![photo_jidori.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/be600a9a-44fa-5be4-6d0b-353de9dec033.png)

## 閲覧者 ――
「推しちゃんの投稿キター!」
「推しちゃんの投稿した画像は全部保存しちゃうぞ!」

![kanki.png](https://qiita-image-s

元記事を表示

ドメイン駆動設計(DDD)とクリーンアーキテクチャの違いについて覚え書き

[こちら](https://qiita.com/remi_ts/items/cf6d1b3b131db4cd1e79)の記事にも書いた事のおさらいと補足。
その後、サンプルプログラムによる差異を掲載。

# 二つの違い

:::note info
ドメイン駆動設計(DDD)
焦点
DDDは、複雑なビジネスロジックの専門知識をソフトウェア設計の中心に置き、ドメイン内での言語(ユビキタス言語)やモデルを重視

主要概念
* ドメインモデル
ビジネスドメインの概念とその関係をモデル化したもの。
* ユビキタス言語
ビジネスと開発チーム間のコミュニケーションギャップを埋める共通言語
* 集約
関連するオブジェクトの集まりで、一貫性のある変更単位を提供

メリットとデメリット

利点
ビジネス要件と密接に連携した設計が可能。

欠点
* 複雑性
ビジネスロジックが複雑なアプリケーションに適している分、小規模あるいは単純なアプリケーションでは過剰となる。
* 実装の難

【PHP8.3】ランディングページが日本語訳されてなかったので深い悲しみに包まれた

[PHP8.3のランディングページ](https://www.php.net/releases/8.3/)がありますね。

右上のChange languageに日本語がありませんね。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/86f5c968-9802-a18c-fabf-889824e4204f.png)

深い悲しみに包まれたので増やした。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/eb7a4ef4-3541-d577-3c91-d537afc638fa.png)

# fork

ランディングページの最下段、`View Source`ってところから[ドキュメントのソース](https://github.com/php/web-php)に進めます。
そこで右上の`Fork`ボタンを押せば、自分のスペースにforkされます。

# branch

作業用にブ

microCMS × PHP レンタルサーバーで構築

## お客さんのレンタルサーバー
クライアントが用意したレンタルサーバーへftp接続している状況でmicroCMSを使用したい、というパターンではJamstack構成を組めない。

PHPが使用できるなら、それが最も手っ取り早くmicroCMSを組むこめる方法かもしれない。

## microCMSが提供しているSDKを利用するべきか
microCMSでは、PHPを使用するためのSDKが用意されている。
しかし、このSDKを利用するためには、composerというPHPのバージョン管理アプリが必要となる。

このcomposerを、**人さまのサーバーに勝手にインストールしてよいはずがない。**

## SDKを利用せず、PHPのみの実装
SDKは使わないでPHPだけで書く方法はあって、それは簡単に実装できた。
一覧ページと個別ページだけなら、2ファイルだけで済む。
実際にはAPIキーの隠蔽は別途行うのでアクセス権限を設定したディレクトリに変数を格納しておく必要があるが、わかりやすく2ファイルだけにすると以下のようになる。

### 一覧ページ

“`archive.php

LaravelでAuth::attempt()には’password’を渡すこと

## 前書き
以下の環境で実行した内容となります。

– PHP 8.2
– Laravel 10.31.0

## 背景
Laravel10を使って開発中、認証機能を使いたいものの既存テーブルにあるユーザー情報を活用したいと思いました。
そのまま利用してもLaravelのusersテーブルを探しに行ってしまうので、既存テーブルに指定すればよいと楽観視していました。
ここでは例として以下のような構造とします。

テーブル名:login
| userID | pass |
|:-:|:-:|
|user1|\\$2y\\$..|

## 変更点

– Models\User のクラスにテーブルを指定
– テーブル構造が異なるのでその他設定を追加

“`
class User extends Authenticatable
{

//既存のログインテーブルを使う
protected $table = ‘login’;
protected $primaryKey = ‘userID’;
//remember_tokenはないためfal

【Laravel】「500エラー」時はDB接続を確認!

## 環境
Laravel v9.5.1 (PHP 8.1.2)
AWS
Fly.io(サーバー)
Supabase(データベース)

## 要約
500エラーはDB接続が上手くいっていないときに起こりやすいので、環境変数などをもう一度確認しよう

## 問題
PHPの練習がてら、Xのクローンアプリを作成。いざFly.ioでデプロイを試みる。
![a08be6b8c3ba304fd4b220099ac40d41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3620668/0b2a43b0-85e5-adf8-189e-9b8684449d9f.png)
おっ、ローカル環境通り上手くいったのでは???
という淡い期待もつかの間、ログイン情報を入力後の画面で「***500 | SERVER ERROR***」が表示された。
![80ce346364a562718ad8ec21ffab3e8f.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

PHP ファイルの内容をブラウザに表示し、意図的に文字化けさせたい場合

# PHP ファイルをあえて文字化けさせたかったのだが・・・
* PHP ファイルの文字コード:UTF-8
* PHP ファイル内の `` の charset:Shift_JIS

上の条件で、PHP ファイルを表示して文字化けを起こそうとした。しかし、結果は **文字化けせず**。「?」となったが、**原因は単純だった**。

![article4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601609/6379344d-9326-d514-90e8-57252e82752a.png)

### ブラウザの表示
![article4-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3601609/03e62ce4-fcf9-346d-21e8-8972c3eae71f.png)

### 使用環境
Windows + Apache + PHP
ブラウザ:Google Chrome

# 文字化け

Laravel(PHPのフレームワークの1つ)CSS罠 ※CSSは当たっていても反映されないときがある件

 昨年度前職で体調を崩したことをきっかけに、紆余曲折を経てなんやかんや、プログラミングを学び始め、数学がそこそこ得意だったこともあって(?)とりあえず、半年強は学習を継続できている、駆け出しエンジニア(できればデータサイエンティスト)か「第一の読者」になりたい離職中・転職活動中の32歳の未だに少年ジャンプ・マガジン・小学館を読んでるおっさんです。以下間違いあれば遠慮なくご指摘下さい m ( _ _ )m

(※今は、とあるプログラミングスクールの学習カリキュラムを修了し、某コミ二ティの現役エンジニアの方々に諸々教えてもらっています。ちなみにそこの代表の方は、勤労感謝の日が誕生らしいです。勤労に感謝m(_ _)m)

Laravelは個人的に一番CSSが沼でした。

 私は、Progateと↓の本から、HTML&CSSから、プログラミングを始めたのですが、その後、上記の某プログラミングスクールで、PHP、Laravelを中心にプログラミングの学習カリキュラムを受けました。そのときに感じたというか、個人的に沼にはまり溺れたLaravelでCSSで当てるときの注意点をいくつか挙げま

変数のスコープ JavaScriptとPHPの違い

## JavaScript(letとconst)
1. {}でエリアが形成される
1. 内のエリアで、外のエリアで宣言された変数を扱うことはできる
1. 外のエリアで、内のエリアで宣言された変数を扱うことはできない
1. 外の複数のエリアで同名の変数が宣言されているとき、最も近いものが扱われる
#### 3. 内のエリアで、外のエリアで宣言された変数を扱うことはできる
“`test.js
const a = ‘aaa’
{
console.log(a) // aaa
}
“`
#### 2. 外のエリアで、内のエリアで宣言された変数を扱うことはできない
“`test.js
{
const b = ‘bbb’
}
console.log(b) // ReferenceError: b is not defined
“`
##### 4. 外の複数のエリアで同名の変数が宣言されているとき、最も近いものが扱われる
“`test.js
const a = ‘a1’, b = ‘b1’
{
const a = ‘a2’
console.log(a, b)

【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/2b9f647d6130a098345f)の記事でマイナフレームワークFlowを使った簡単なAPI作成を行いました。
今回はMySQLにデータを登録するAPIを作成していきます。

# FlowにおけるDB接続処理
Flowはdoctrineと呼ばれるORMを内包しています。
今回はこのライブラリを用いてTBL作成やDB接続を行っていきます。

https://www.doctrine-project.org/

## doctrineでできること
doctrineはORM形式でDB操作を行います。
具体的には以下のような特徴を持ちます。
* SELECTなどのDMLを記載する必要がなく、doctrineで用意されているメソッドを利用してDB操作を行う。
* 事前のテーブル作成が不要。1つのTBL対応するデータクラスを作成し、doctrine のmigrateコマンドを実行することでTBL作成を行う。

# DB接続試してみた
ということで、DB接続を行うAPIを作成していきましょう。
今回は

LaravelのEloquentでorderByを使うとメソッドチェーンの補完が効かなくなるわけについて備忘録

以下のようなページングを想定した一覧情報を返すAPIコントローラ処理を書いていた時のこと
“`php:ArticleController.php
private const PER_PAGE = 30;

public function index(IndexRequest $request): AnonymousResourceCollection
{
$query = Article::query();
// withとかwhereとかいろいろ省略
$articles = $query->paginate(self::PER_PAGE);

return ArticleResource::collection($articles);
}
“`

一覧について「作成日の降順で取得」という仕様が抜けてたので以下のように修正しました

“`diff_php:ArticleController.php
public function index(IndexRequest $reque

phpenv install で発生したエラーと解消方法

# はじめに
– 普段、PHPを書くことが多いのですがプロダクトによってPHPのバージョンが異なるので簡単にバージョンを切り替えられるようにphpenvのセットアップを行いました
– `phpenv install`でPHPをインストール時、`エラー → 解消 → エラー → 解消 → …`をひたすら繰り返しかなり疲弊しました…(特に7.x系)。ので、インストール成功までに実施したことをマシン交換時などに困らないようここに書き留めておきます

## 環境
– macOS Monterey 12.7
– Apple M1
– zsh 5.8.1 (x86_64-apple-darwin21.0)
– anyenv経由でphpenvインストール済み

## PHP7.3.33インストール時に発生したエラーと解決方法
– 環境変数のオプション指定について
– `~/.anyenv/envs/phpenv/plugins/php-build/share/php-build`配下にある`default_configure_options`というファイルに記述する方法もあるみたいな

【個人開発】マイクラの建築物配布サービスを作ったメモ

## きっかけ
今年9月から無職になったので、以前からあたためていたサービスをつくってやろうと思い立ちました。

## つくったもの
https://poscra.com/

マイクラ統合版のPC版では(統合版とはって感じですが)、ストラクチャーブロックによって作成した建築を外部ファイルとしてエクスポートできます。
また建築物の3Dモデルのエクスポートもでき、3Dviwerなどでぐりぐり観察することもできます。
それらをつかってマイクラ建築のカタログみたいなものをつくりたいと考えました。

## 技術スタック
### アプリケーションフレームワーク
当初はNextJSを使おうと思っていました。
しかし、まちがったイメージかもしれませんがNextJSはクラウドサービスの使用前提な印象で、
– ファイルアップロード
– ログイン認証

などを使いたい+構成はスリムにしたい(一つのサーバで完結)+ファイル操作など慣れているPHPでやりたい 
等で結局『Laravel』を使用することにしました。

### フロント周り
デザインはLaravelに最初からついてくる『TailwindCSS』とど

phpでのMQTT開発ガイド

![MQTTをPHPで使う方法](https://assets.emqx.com/images/c8bd6eeb524d0999ff879b95dbd10ba0.png?imageMogr2/thumbnail/1520×684)

英語ブログ:https://www.emqx.com/en/blog/how-to-use-mqtt-in-php

[PHP](https://www.php.net/)は、広く使われているオープンソースの多目的スクリプト言語で、HTMLに埋め込むことができ、特にWeb開発に適しています。

この記事では、PHPプロジェクトで`php-mqtt/client`クライアントライブラリを使って、[MQTTクライアント](https://www.emqx.com/en/blog/mqtt-client-tools)と[MQTTブローカー](https://www.emqx.io/)間の接続、サブスクライブ、サブスクライブ解除、メッセージの受信と送信の機能を実装する方法について主に紹介します。

## MQTTクライアントライブラリの選択

この記事では、Com