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

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

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

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/e98f25bec6cc067f24a4)の記事でFlowにおけるキャッシュの扱い方について解説しました。今回はセッションの扱いについて解説していきます。

# セッションの扱い方
セッションによくある「ECサイトの商品カゴ」の例で説明します。

まずは、セッションで扱いたい情報のクラスを用意しましょう。
以下のようなカゴEntityを作成しました。

“`php

/**
* @Flow\Scope(“session”)
*/
class CartEntity {

/**
* @var array
*/
protected $items = array();

/**
* @param string $item
* @return void
* @Flow\Session(autoStart = true)
*/
public function addItem($item) {

元記事を表示

【PHP】PHPで使うfor文って何?

## for文って何?
同じ動作を繰り返し行う場合には、ループ処理がよく使われます。
ループ処理を使用することにより、コードがシンプルになり作業効率が向上します。
そのループ処理を行う文の1つがfor文です。
for文は繰り返す回数が決まっているときに使用します。

### どう記述するの?
“`php:for文
for (式1; 式2; 式3){
//ここに処理を書く
}
“`
0から5までの数字を表示させる場合
“`
for ($i = 0; $i < 6; $i++){ echo $i; } ``` ① **$i =0 ;** ここでは、式1を0で設定します。 ② **$i < 6;** ここでは、式2で$iが6より小さい間繰り返す指示をしています。 ③ **$i++;** ここでは、式3に処理を1回するたびに初期値に+1する指示を出しています。 ④ **echo $i;** ここでは、処理を1回するたびに$iを出力する指示を出しています。 echoした結果 012345 が表示されます。 ### 2つのfor文を連動させる、2重ループ f

元記事を表示

PHP入門 ~データベース接続~

# PDOとは
「PHP Data Objects」の略で、PHPから簡単にDBにアクセスするための拡張モジュールです。データベースの種類やバージョンの違いを気にせずコードを書くことができます。

# データベースに接続
PDOオブジェクトのインスタンスを作成します。以下の例では、変数$pdoに代入しています。
“`php
$pdo = new PDO($dsn, $username, $password, $options);
“`
4つの引数を渡していて、説明は以下の通りです。
* $dsn…データベースに接続するための必要な情報
`dbname`はデータベース名を指定
`host`はホスト名またはIPアドレスを指定
`charset`は文字セットを指定
“`php
$dsn = ‘mysql:dbname=test;host=localhost;charset=utf8mb4’;
“`
* $username…データベースに接続するためのユーザー名
ルート権限を使う場合、デフォルトは`root`です。
“`php
$username = ‘root’;
“`
* $p

元記事を表示

サイボウズGaroonでSOAP APIを使ってPHPでリクエストを送る

## 記事の概要
社内ネットワークで組んでいるシステムから、同じく社内ネットワーク内にあるオンプレミス版のgaroon5のユーザ情報を取得したいという状況が発生し、初めてSOAP APIを使ってみたという内容の記事です。

### 下調べ
ひとまずcybozu developer networkでgaroon API ドキュメントを確認。
[→SOAP APIの共通仕様](https://cybozu.dev/ja/garoon/docs/soap-api/overview/soap/)
[→ユーザ情報を取得するAPI](https://cybozu.dev/ja/garoon/docs/soap-api/base/get-users/)

### 使用しているgaroonのAPI定義確認
定義の中にリクエストの送り先がAPIの種類ごとに書いてあります。
“`xml

元記事を表示

laravel 他のフィールドの値によって必須としたいときのバリデーション

# やりたいこと

typeが1の場合のみdetailを入力必須にしたい
または入力禁止にしたい
“`
{
“type”: 1,
“detail”: “XXX”
}
“`

# 結論
“`php:FormRequest
public function rules(): array
{
return [
“type” => [‘required’, ‘integer’, new Enum(Type::class)],
// 入力必須にしたいとき
“detail” => [‘string’, ‘nullable’, Rule::requiredIf(条件)]
// 入力禁止にしたいとき
“detail” => [‘string’, ‘nullable’, Rule::prohibitedIf(条件)]
];
}

“`

“`php:FormRequest
“detail” => [‘stri

元記事を表示

Laravel API Resourceのテスト

# 概要

調べ方が悪いのかもしれないけど、APIResourceのテストを書いた記事が見つけられなかった。
Featureテストを使えばリクエストからレスポンスまでをテスト出来るので、あまり需要はないかもしれないけど備忘録として残しておく。

## 環境

– Laravel10
– PHP8.1
– MySQL8

## Resource に Model を渡すケース

ControllerからユーザーモデルをResourceクラスに渡す

“`php: UserShowController.php

元記事を表示

LEMP環境 Laravel Nginx Mysql PHPをDockerで構築してみた

## はじめに
最近LaravelのDocker環境を考える機会がありました。
他の環境は作ったことが何度かありましたが、Laravelは立ち上げのコマンドすら知らない状態でDocker環境を構築していったので良い学びになりました。
`healthcheck`を使用することにより、DBの準備完了前にLaravelがDBを読み取ろうとする事故をなくすことに成功しています。
コンテナの実行順序を正しく制御することで、terminarl上でDocker構築のログが止まる頃にはアプリが完全に応答する状態を保証しています。
適宜コメントを入れているので、参考にしてください。

私は学生エンジニアです~~あと2ヶ月くらい…~~。
至らない点もあるかもしれません。
その点ご了承ください。

## 前提条件
Docker, Docker Composeの知識

## 各ファイルの説明

ファイル構成
“`shell
data/ # Dockerで立てたdatabaseの中身
docker/
db/
conf.d/
– my.cnf
init/

元記事を表示

CMSで作るモダンECサイト

## こんなもの作りました。

義理の母がお花屋さんをしていて、たまに個人でお店をだしていたりしてるのですが、かなりセンスが良くリピーターも多いので「ECサイトで販売したら売れるのでは?!」と思い実際に作ってみました。

Home


(レスポンシブ対応していないため、PC表示だとかなり崩れて表示されます・・)

宣伝もかねて紹介させてもらいます。

## 使用技術

– WordPress
– PHP
– Bootstrap
– その他もろもろの無料サーバ、DBなどなど

## 各パーツとこだわり

ロゴも自作です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480394/e17e00c6-590f-790b-ae9d-6af729f10b47.png)

TOPバナーのくすみ加工とカラーがお気に入りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

【PHP】代入演算子の返り値が変わることがある

PHPの[代入演算子](https://www.php.net/manual/ja/language.operators.assignment.php)は式なので値が返ってきます。
どういうことかというと、`$a = 10`という代入式を書くと`$a`に10が代入されますが、それとは別に`$a = 10`全体としての値も10となるわけです。

# 多重代入

時々ある

“`php
$a = $b = $c = 10;
“`

という書き方、これは

“`php
$a = ( $b = ( $c = 10 ) );
“`

と解釈されます。
まず`$c = 10`で`$c`に10が代入され、`$b`には`$c = 10`の返り値10が代入され、`$a`には`$b = ( $c = 10 )`の返り値10が代入される、ということになり、結果として`$a`・`$b`・`$c`すべてが10になります。

プロパティも同じです。

“`php
$c = new stdClass();
$a = $c->b = 10;

var_dump($a, $c); // $a=10, $b

元記事を表示

php nginx mysqlをDockerで構築する

## はじめに
最近LaravelのDocker環境を考える機会がありました。
その時の知見を活かして、昔考えたDocker PHP環境をアップグレードしたいと思います。
今回の構成の特徴は`healthcheck`です。 `depends_on`で実行順序を保証するだけではなく、対象のコンテナの準備が完了(healthcheckに合格)してから依存するコンテナが構築を開始するようにしています。
適宜コメントを入れているので、参考にしてください。

私は学生エンジニアです~~あと2ヶ月くらい…~~。
至らない点もあるかもしれません。
その点ご了承ください。
## 前提条件
Docker, Docker Composeの知識

## ファイル構成

“`
docker/
db/
conf.d/
– my.cnf
init/
– init.sql
.env
php/
– .env
– Dockerfile
– php.ini
nginx/
– default.conf
app/
src/

元記事を表示

Google.Calendar を ローカルで利用する為の方法について

[ 初投稿 ]
Google.Calendarを ローカルで利用する為の
Source.Generatorを 作った。

[calenG](https://twilight-bluesy.net/_utl/calenG-v10/index.html) ( TwilightBluesy )

幾つかの方法を比較したトコロ
この方法が一番 扱いやすいのでは と 思う。

cG20.sh or cG20.bat を
コマンドライン or Application から call 。

“`php:cG20.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();
?>


  • OTHERカテゴリの最新記事