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

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

PHPでZIPファイル内のCSVファイルをそのまま読み取る

# 結論

:::note info
– [fw3/streams](https://packagist.org/packages/fw3/streams)を`composer require fw3/streams`して使おう。
– **[実装](#実装)** にあるサンプルコードをコピーして必要なところだけ書き換えれば終わり。
:::

:::note warn
– PHP7.2.0未満(下限PHP5.3.3)で解決したい場合は[fw3_for_old/streams](https://packagist.org/packages/fw3_for_old/streams)を利用してください。(`composer require fw3_for_old/streams`)
– [fw3/streams](https://packagist.org/packages/fw3/streams)および[fw3_for_old/streams](https://packagist.org/packages/fw3_for_old/streams)共にPHP8.3.1まで動作確認済みのため、P

元記事を表示

Laravelの環境構築してて、nginxで頭を抱えてしまっている人向け

🚨 記事内容精査中です。

# ■ 実際にあった未経験エンジニアの物語

#### 1章 Webサーバーソフトウェアを知る

あなたはプログラミングの世界に新たに足を踏み入れ、Webアプリケーションを開発する際にはWebサーバーソフトウェアが必要だということを学びました。このWebサーバーソフトウェアは、インターネット上でユーザーとアプリケーションの間の通信を担う重要な役割を果たすと理解しました。[^webサーバーソフトウェア]

#### 2章 Laravelプロジェクトの始動

あなたはLaravelというPHPフレームワークを使い始め、自身のプロジェクトを立ち上げます。すると、ブラウザ上であなたのプロジェクトのページが表示されていることに気づきます。この時点で、あなたはまだ専用のWebサーバーソフトウェアを設定していないはずです。

#### 3章 誤解

「LaravelはWebサーバーソフトウェアがなくてもなんとか上手く動くのだろうか?」という疑問が浮かびましたが、なんかうまく動いているし、深くは考えませんでした。
(実はあなたの知らないうちにPHPのビルトインサーバー[^

元記事を表示

PHPのシングルクオーテーション(‘)とダブルクオーテーション(“)の違い

# 初めに
PHPでは、文字列を表すためにシングルクオーテーション(’)とダブルクオーテーション(”)の両方が使用できますが、これらの間にはいくつかの重要な違いが存在します。
これらの違いを理解し、適切な場面で使い分けることが、より効率的で読みやすいコードを書く鍵となります。

# 文字列の解釈

1\.シングルクオーテーション
文字列がそのままの形で解釈されます。変数は展開されず、エスケープシーケンス(例えば\nや\t)も解釈されません。ただし、シングルクオート自体をエスケープするための\’とバックスラッシュ\\は例外です。

“`php
$name = ‘World’;
echo ‘Hello, $name!’; // 出力: Hello, $name!
“`

2.ダブルクオーテーション
文字列内の変数はその値に置き換えられ、エスケープシーケンスも解釈されます。これにより、変数の値を文字列内に直接挿入することが可能になります。

“`php
$name = “World”;
echo “Hello, $name!”; // 出力: Hello, World!
“`

#

元記事を表示

deptracのバージョンアップ(0.11.1 → 1.0.2)

# 概要

アーキテクチャ品質保存ツール`deptrac`のバージョンアップ(0.11.1 to 1.0.2)を行ったので、ツール概要と修正箇所をまとめる

## どんなツール?

> Deptracは、PHPのための静的コード解析ツールであり、プロジェクト内のアーキテクチャの意思決定をコミュニケートし、視覚化し、強制するのに役立ちます。クラスに対してアーキテクチャのレイヤーと、それらに適用するべきルールを自由に定義できます。
たとえば、Deptracを使用して、プロジェクト内のバンドル/モジュール/拡張がお互いに本当に独立していることを確認し、再利用しやすくすることができます。
Deptracは、CIパイプラインで使用でき、プルリクエストが定義したアーキテクチャルールを違反していないかどうかを確認できます。オプションのGraphvizフォーマッタを使用すると、レイヤー、ルール、および違反を視覚化できます。

– 要はクリーンアーキテクチャのレイヤーや依存関係、命名規則について静的解析してくれるツール
## 実行コマンド

`vendor/bin/deptrac analyse`

元記事を表示

Laravelテスト入門:初学者ガイド

## はじめに
Laravelは、テストに優れた環境を提供するPHPフレームワークです。この記事では、Laravelでのテストの基礎を初学者に向けて紹介します。テストを書くことで、アプリケーションが予期せぬ動作をせず、期待通りに機能することを保証できます。

## テストの種類
Laravelで主に扱うテストは以下の2種類です。
1. **ユニットテスト**: コードの最小単位(通常は関数やメソッド)が期待通りに動作することをテストします。
2. **フィーチャーテスト**: アプリケーションの特定の機能がユーザーの期待通りに動作することを確認します。

## テスト環境の準備
Laravelプロジェクトでは、`php artisan` コマンドを使用してテスト環境を簡単にセットアップできます。上記のコマンドは、`tests/Feature`ディレクトリに`UserTest`という名前の新しいテストクラスを作成します。

## テストの書き方
### ユニットテストの例
ユニットテストは、アプリケーションの特定の部分が正しく機能することを保証します。以下は、Laravelでユニットテス

元記事を表示

Bitnami WordPress のインスタンスバージョンアップ手順

基本公式ドキュメントに従えばいい。
https://docs.bitnami.com/aws/how-to/migrate-wordpress/#migrate-data-from-one-wordpress-instance-to-another

:::note warn
警告
All in one wp migration の無料版はローカルファイルのアップロードしか対応していない
:::

# おおまかな手順

1. All in one wp migraiton にてバックアップを作成、ローカルにダウンロードしておく(数GBになることもあるので注意)
1. Lightsail のインスタンスを新しく作成し WordPress を選択する(この時点で最新版になる)
1. PHP や WordPress の設定を書き換えてアップロード上限に抵触しないようにしておく
1. 新しいインスタンスにバックアップをリストアする。ダウンロードしたファイルをアップロードする
1. lets encrypt を利用している場合は crontab あるいは systemd timer が設定されて

元記事を表示

オブジェクトの単純代入はシャローコピーではない

本記事は、「[【上級資格取得に向けて】PHPを理解するために知っておくべきこと①](https://qiita.com/hiroo1120/items/bc0b14f74f4df8e8b459)」の記事に対して、代入とコピーの説明に誤りがあったので編集リクエストさせていただいた修正内容を掲載しています。
誤った内容が広まらないことを願って記事公開しておきます。
編集リクエストが採用されましたら本記事は削除いたします。

本記事に誤りや更に修正した方がいい内容がありましたら、コメントいただけると有難いです。

以下の意見交換記事も参考にしていただけましたら幸いです。

https://qiita.com/shiracamus/questions/bc0fca624ad9c36531d8

以下、編集リクエストさせていただいた内容です。

言語が違えばルールや常識も変わるものです。

この記事ではPHP8.0技術者認定試験上級資格取得を目指すにあたり、PHPを理解するために知っておくべきことについてさらっとまとめてみました。

ぜひご参考までに読んでいただければと思います。

#

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~キャッシュ編~

# 初めに
以前[こちら](https://qiita.com/nnhkrnk/items/3e3caab707a30314e6de)の記事を書いた際、Flowではリフレクションデータを実行時にキャッシュしていると知りました。今回はFlowにおけるキャッシュの扱い方について調べてみました。

# Flowにおけるキャッシュ処理

Flowには、キャッシュ処理を実現するために重要な要素が3つあります。
* **Cache Frontend Interface**
* **Cache Backend Interface**
* **Cache Manager**

それぞれの要素について説明する前に、この3つの関係性をなんとなく把握しておきましょう。
以下のようなイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430841/59a7acac-57f5-9698-b96c-814412b26301.png)

それでは、重要な3つの要素について解説します。

## Fron

元記事を表示

QRコードを印刷 HTML+JavaScript on CakePHP5

CakePHP5 を只今使用中。

### QRコードはこちらのライブラリで。
https://davidshimjs.github.io/qrcodejs/

58㎜幅のレシートプリンタが接続されている想定です。

### 印刷ボタン(呼び出す側)
“`
Url->build(‘/kegs/qr/’ . $ledger->keg) ?>”
>

“`
単純に _blank でリンクを張ります。

### 印刷ページ(呼び出される側)
“`
disableAutoLayout();
?>


CakePHP5 WEHE句でのbind

## WHERE id NOT IN(SELECT id FROM xxx WHERE code=?) こんなクエリを作りたい

> https://book.cakephp.org/5/ja/orm/database-basics.html#id15
> ステートメントを準備する
あなたは execute() か prepare() でステートメントオブジェクトを生成できます。 execute() メソッドは引き継いだ値をバインドしたステートメントを返します。 それに対して prepare()
は不完全なステートメントを返します。

ConnectionManager::get(‘default’) して、prepare して bind して… とあれこれ試してみたもののシンプルに書けなかった。
## シンプルな方法
“`
$rows = $this->Xxx->find(‘all’)
->where(‘Xxx.id NOT IN (SELECT id FROM xxx WHERE code = :code)’)
->bind(‘:code’,$code,’integer’)

元記事を表示

CakePHP Form シンプルHTMLタグを出力して~~

$this->Form->create();
$this->Form->control();
$this->Form->submit();
大変ありがたい機能です。
…が、便利な反面おせっかいなHTMLタグに悩まされることも。
## シンプルな を出力したい!
“`
Form->setTemplates([‘inputContainer’=>'{{content}}’, ‘submitContainer’=>'{{content}}’]);
?>
“`

以上!

元記事を表示

CakePHP5 モデル の メソッド・定数 どこに書く?

CakePHPはモデルがTableとEntityに分かれています。別のフレームワークではモデルが1つのことが多かった。さて、どうしようか。

> テーブルオブジェクト がオブジェクトのコレクションへのアクセスを表し、提供するのに対し、 エンティティーは個々の行やドメインオブジェクトを表します。エンティティーは保持するデータにアクセスして 操作するための永続的なプロパティーとメソッドを保有しています。

https://book.cakephp.org/5/ja/orm/entities.html#namespace-Cake\ORM

、、となると、エンティティかな。定数はテーブルかな。

ただ、DB仕様変更が多いから、bin/cake bake model … で、チャチャっと更新したい。なので、エンティティに書くのは最小限にしたいなぁ。できれば1か所にまとめたいなぁ。

ということで、

### CRUD の R のみ ならエンティティ
「レコードの状態から判定する」とか「アラート表示をつくる」とかの「データ更新を伴わないもの」はエンティティ
1. コントローラーやビューで短いコー

元記事を表示

Stripe PHP SDK Custom子アカウントに紐づく外部口座の口座番号末尾4桁を取得

## 概要

Stripe PHP SDKにてCustom子アカウントに紐づく外部口座の口座番号末尾4桁を取得する方法をメモ的にまとめる。

## 方法

下記のように記載することで取得できる。

“`php
$stripe = new \Stripe\StripeClient(‘sk_test_51OAW2lEwNfmSaNN2fe6Iq27lX3sopoE0LGTk0Uhu6m59eU7nXyQmsOHioJktPtxJRPZRkBCu5tURURmyZpKeI2ej00cFrSfeed’);
$account = $stripe->accounts->retrieve(‘acct_1OezMbImLSY2PRF5’, []);
$externalAccounts = $account->external_accounts->data;

foreach ($externalAccounts as $externalAccount) {
$last4 = null;
if ($externalAccount->default_for_currency && ($e

元記事を表示

PHP 型を知る

phpで変数の型を比較したい時などあると思います。

## gettype関数を使う
gettype関数は引数の型を文字列として返してくれます。
“`php
$number = 5;
$numberType = gettype($number);

var_dump($numberType);
“`
“`
string(7) “integer”
“`

if文とかで活躍しそうですね。

元記事を表示

PHP 変数の型変換

変数の型変換方法です。
“`php
$number = “580”;
var_dump($number);

$number = (int)$number;
var_dump($number);
“`
“`
string(3) “580”
int(580)
“`
以下のようにすることで入力される値に対しても型の指定が可能です。
“`php
$number = (int) trim(fgets(STDIN));
“`

簡単でしたね。

元記事を表示

PHP連想配列操作まとめ

便利だなと思った連想配列の関数をまとめてみました。
自分の備忘録的な感じで残しておきます。
良かったら参考にしてください。

## array_column
連想配列から特定の要素のみを取り出します。

第1引数に配列、第2引数に取り出したいキー名を指定します。

“`php
1, ‘name’ => ‘久保’, ‘hobby’ => ‘サッカー’],
[‘id’ => 2, ‘name’ => ‘佐藤’, ‘hobby’ => ‘野球’],
[‘id’ => 3, ‘name’ => ‘山田’, ‘hobby’ => ‘料理’],
];

var_dump(array_column($row, ‘name’));
// array(3) {
// [0]=>
// string(6) “久保”
// [1]=>
// string(6) “佐藤”
// [2]=>
// string(6) “山田”
// }

?>
“`

加えて第3引数を指定すると、あるフィールドをキー、あるフィ

元記事を表示

【Laravel9対応】LaravelのSMTPサーバを動的に設定する

# 何がやりたいのか
– ユーザーが設定したメールアドレスから自動送信を行うシステムを作っている。
– .envで設定したメール設定ではなくて、データベースに登録された各ユーザーのメールサーバー情報を使い動的に設定を変えて送信する。

Laravel9ではSwiftMailerが使えなくなったため、[こちらの方法](https://qiita.com/nakahara-d/items/9a4c870839741dde8f93)で実装できなりました。
そのため別のやり方を解説します。

# 代替案Symfony Mailerを使う。

“` ruby:DynamicMailService.php

元記事を表示

CSVファイルアップロードが上手くいかない時の解決策

## 起こったこと
PHP(laravel)でCSVアップロード機能を作成していたところ起こった事象。
CSVファイルのn行目のヘッダーの内容を確認しデータをDBに保存するという機能を作成していたのだが、ヘッダーの1列目を認識してくれないエラーが発生。
しかし、該当のCSVファイルはExcelから「名前を付けて保存」すると発生せず、正常にアップロードされるため困り果てていた。
CSVファイルの権限によるものではないかと考え調査していたが、めぼしい調査結果は得られずにいた。

## 原因
WinMergeで、元のファイルと「名前を付けて保存」し直したファイルを比較したところ、原因が発覚。
原因は「空行」だった。
実はCSVファイルデータのn-1行目には空行が入っており、それがSplFileObject::SKIP_EMPTYによって読み飛ばされていたことで、n行目のデータではなくn+1行目をヘッダーとして認識してしまい、それによりヘッダーが認識されずエラーが発生していたのだ。

“`php:修正前データ
$file->setFlags(
\SplFileObject

元記事を表示

miseを使って複数のPHPバージョンをインストールする

# やりたいこと
– Macで
– 簡単なインストールで
– php8.1とphp8.2をインストールし
– php8.1なプロジェクトにcdしたらphp8.1を使いたい
– php8.2なプロジェクトにcdしたらphp8.2を使いたい

# mise
– https://github.com/jdx/mise
– The front-end to your dev env.
– mise (pronounced “meez”)
– mise was formerly called rtx.

asdfとの比較

– asdfはランタイムを呼び出すときにオーバーヘッド(~120ms)かかるが、miseはプロンプトがロードされるときに少量のオーバーヘッド(~5ms)を追加する。
– [参考](https://mise.jdx.dev/dev-tools/comparison-to-asdf.html#:~:text=mise%20adds%20a%20small%20amount%20of%20overhead)

元記事を表示

xサーバーのsmtpサーバーを使ってlaravelからメール送信

やりたい事。
xサーバーのsmtpサーバーを使ってメールを送信したい。

## xサーバーでメールアドレス作成

![スクリーンショット 2024-02-02 133110.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3686263/f6ec7e02-378c-3406-b78c-c3f217eb7967.jpeg)

![スクリーンショット 2024-02-02 133415.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3686263/e99491ab-ec81-5909-9eb4-781496d04d35.jpeg)

## .env編集
“`
MAIL_MAILER=smtp
MAIL_HOST= ⓷ sv*****.xserver.jp
MAIL_PORT=465
MAIL_USERNAME= ⓶ ****@mail.com
MAIL_PASSWORD= ⓵ ****
MAIL_ENCRYPTIO

元記事を表示

OTHERカテゴリの最新記事