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

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

PHPフレームワーク「Flow」のリフレクションがPHP標準のリフレクションよりも速いワケ

# はじめに
PHPにはクラスやメソッドの構造を取得できるリフレクションという機能があります。PHPフレームワークのFlowではPHP標準のリフレクション処理を用いた独自のリフレクション処理が定義されており、様々な機能を追加で使えるようになっています。

そんなFlowのリフレクション処理ですが、公式ドキュメントを読んでいると以下のような記載がありました。

> Flow provides a powerful extension to PHP’s own basic reflection functionality, not only adding more capabilities, but also speeding up reflection massively.

“**speeding up reflection massively…**”

どうやら、**FlowのリフレクションはPHP標準のものよりも速い**とのこと。
FlowもPHP標準のリフレクションを利用しているのになぜ差が出るのか気になったので調べてみました。

# TL;DR
* Flowは実行前にコン

元記事を表示

素数判定関数を使って簡単なゲームを作った話③

ご覧いただきありがとうございます。
この内容は、複数に分けて投稿しています。全体をご覧になりたい方は、以下のリンク先よりご確認ください。

https://qiita.com/hitoki_univ/items/8e3feab0add17befc700

前回の内容については、こちらからどうぞ。

https://qiita.com/hitoki_univ/items/5893785797243794d33a

# 今回やること
第2回では、ゲームのタイトル画面を作成しました。
今回は、タイトル画面からのリダイレクト先である、プレイヤー名と制限時間を設定する画面を作成します。

# プレイヤー名、制限時間の設定画面
前回作成したページでは、選択したプレイヤー人数に応じて異なるページにリダイレクトするようにしました。
今回はそのリダイレクト先のページを作成するので、複数のページを作成します。しかし、基本構造はどのページも同じなので、今回は2人用のページを主に確認していきます。

### HTML
“` html


素数判定関数を使って簡単なゲームを作った話②

ご覧いただきありがとうございます。
この内容は、複数に分けて投稿しています。全体をご覧になりたい方は、以下のリンク先よりご確認ください。

https://qiita.com/hitoki_univ/items/8e3feab0add17befc700

前回の内容については、こちらからどうぞ。

https://qiita.com/hitoki_univ/items/e1b8ec9e6c7c39d5e761

# 今回やること
前回は、これから作成するゲームの概要などについて説明しました。
今回は、そのタイトル画面を作成していきます。

# ゲームのタイトル画面
タイトル画面では、プレイヤー人数を選択し、人数に対応したプレイヤー名入力画面に遷移する機能を実装します
1. プレイヤー人数を選択し、人数に対応したプレイヤー名入力画面に遷移する機能
2. 過去のランキングを表示する画面に遷移する機能

具体的なコードは以下の通りです。

### HTML
“` html


素数判定関数を使って簡単なゲームを作った話①

ご覧いただきありがとうございます。
この内容は、複数に分けて投稿しています。全体をご覧になりたい方は、以下のリンク先よりご確認ください

https://qiita.com/hitoki_univ/items/8e3feab0add17befc700

# ゲームの概要
このゲームは、複数人による対戦形式を想定して作成しています。
動作の概要は以下の通りです。

①プレイヤーの人数を選択
②プレイヤーの名称を入力
③順番に素数を入力していく。この時、前回より大きな素数を入力する必要がある。制限時間内に前の人より大きな素数を見つけられないとゲームオーバー

今回は、生徒たちにより楽しみながらプレイしてもらえるように、ランキング機能も作成します。
ちなみに、前の人より大きな素数を入力していく、という遊び方は、学習支援事業で会った生徒さんの発案です。

# 次の投稿について
次回(第2回)は、このゲームのタイトル画面を作成します。
~~投稿次第、リンクを追加するので、ぜひご覧ください~~
以下のリンク先から、是非ご覧ください。

https://qiita.com/hitoki_univ/i

素数判定関数を使って簡単なゲームを作った話(目次用)

こんにちは。
私は、週に何度か某市の学習支援事業の指導員として活動しています。そこでは中学生に指導を行っているのですが、その休憩時間に、生徒たちに多少なり頭を使いながら遊んでもらえるものを作れないかと思い、今回のゲームの開発に至りました。
以前の大学の授業で、JavaScriptで素数判定を行うプログラムを作成していたので、今回はそれを活用して、Webアプリケーションの形式でゲームを作っています。

# この投稿の構成
一度にすべての内容を書くと長くなりそうなので、何回かに分けて投稿します。このページは、その目次のような形で使っていければと思います。

# 第1回
1回目は、作成したゲームの概要等について簡単に説明しています。
詳しくは、↓のリンク先をご参照ください。

https://qiita.com/hitoki_univ/items/e1b8ec9e6c7c39d5e761

# 第2回
2回目は、ゲームのタイトル画面を作成します。
詳しくは、↓のリンク先をご参照ください。

https://qiita.com/hitoki_univ/items/589378579724379

元記事を表示

UbuntuでphpとApacheを連携させる

# 概要
UbuntuでphpとApacheを連携させるのメモ。

# 現象
index.phpでechoしてもブラウザ上になにも表示されなかったので調べたところ、phpとApacheを必要があるらしい。

# 環境
Ubuntu
“`
$ cat /etc/issue
Ubuntu 22.04.3 LTS \n \l
“`
php
“`
$ php -v
PHP 8.3.2 (cli) (built: Jan 25 2024 15:18:05) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.2, Copyright (c) Zend Technologies
“`
Apache
“`
$ apachectl -v
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2023-10-26T13:44:44
“`
# 試したこと
1. 下記コマンドでphpモジュールを有効化する
“sudo a2enmod php“
下記エラーが出る
“ERROR: Mod

元記事を表示

Homebrew経由でサポートが終了したPHPをインストールする

# バージョン情報

Homebrew:4.2.5

# 事象

HomebrewでPHP8.0をインストールしようとしたら2023年11月でサポート期間が終了していたため、下記のエラーが発生してインストールできなかった。

今回は8.0をインストールする。

“` terminal
$ brew install php@8.0
Error: php@8.0 has been disabled because it is a versioned formula!
“`

2023/01/25時点でインストールできるのは8.1と8.2

# 対応策

①下記コマンドを叩く

“` terminal
$ brew tap shivammathur/php
“`

2024/01/25時点では5.6〜8.4がインストールできるっぽい。

“` terminal
$ brew search php
brew-php-switcher phpmd shivammathur/php

元記事を表示

Postmanで連想配列を送る方法

# はじめに
Web APIの設計・開発、テストをサポートするツールとして有名なPostman

https://www.postman.com

何となくGETで値を受け取ったり、POSTしてDBに値を保存したり、、、といった基本的な使い方はわかっているがある時

**「あれ??連想配列ってどうやって送るんだ???」**

と詰まったので、ここに記録します:persevere:

またLaravel + Open APIという開発環境の例で進めます

# どうやって配列をPOST送信するか
画像とともに手順を以下に記載していきます!

## まずはRequest内のBodyセクションを開きましょう
![Screenshot 2024-01-25 at 21.42.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/a4f36d83-19ab-1a1a-f261-6538571d588e.png)

今まではパラメーターで送ってばかりでParamsしか開いたことがありませんでした・・・
👇

元記事を表示

paizaレベルアップ問題集 標準出力メニュー【行によって長さが違う二次元配列の表示】FINAL問題 すべての行の長さと値が不定な 2 次元配列の出力 (paizaランク B 相当) 解答例

PHPで回答。コード公開可とのことなので復習も兼ねて共有します。
[問題文](https://paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_boss “paiza.jp/works/mondai/stdout_primer/stdout_primer__variable_array_boss”)
## 解答例1
“`php

元記事を表示

PHPの静的コード解析ツールPHPMDの使い方

## まずは本家ドキュメント

### ルールの内容
https://phpmd.org/rules/index.html

### ルールセットの作り方
https://phpmd.org/documentation/creating-a-ruleset.html

英語だけど翻訳機能を使えば割りと良い感じで読める。

## 大枠の構成と方針

* ルールセットがあって、それらに単品のチェックルールが入っている構成
* ルールセットも、xmlで定義されている
* ルールのパラメータ上書きもできる(メソッド名は最低3文字など)
* ルールセットの複数指定もできる

今回は、ルールセットを指定して、セットの中の都合の悪いものだけ、無効化する方針とした。

## install
“`bash
composer require –dev “phpmd/phpmd=@stable”
“`

## help見る
“`bash
composer –help
“`
使えるrulesetとか、出力フォーマットの種類とか、cacheオプションなど色々書いてある

## 単品ファイルなど、手動

元記事を表示

【Laravel】マルチパートアップロードを使って動画をS3へアップロードする

## はじめに
この記事が私の初投稿になります。
アウトプットの機会を増やしていくため、継続的に記事を書いていこうと思います。

今回は実際の業務で苦戦した「マルチパートアップロードを使用したAWS S3へのファイル保存」についてです。
この辺のトピックはネットの情報が古かったり有益な情報に出会えなかったため、私と同じような状況の方の手助けになれば幸いです。

また間違いなどがございましたら、ご指摘のほどよろしくお願い致します。

## 背景
私が業務でS3を使用した背景ですが、以下のような理由から採用することにしました。
※S3の詳細は割愛しますが、サーバーとは別のところにファイルを保存したい場合に使用するドライブみたいなものですかね!(ざっくりしすぎかな、、、)

* 容量が1GBを超える動画コンテンツを扱うため
* S3に置いたコンテンツはCloudFront(詳細は[公式](https://aws.amazon.com/jp/cloudfront/)を参照してください)経由で高速でアクセスできるため

## 実行環境など
* PHP8.2
* Laravel10
* MySQL

元記事を表示

構造体の作成(もう一度挑戦)⇒Uncaught TypeError: Cannot assign null to property がでる

今Paizaラーニングを解いていて、もはやCレベルには達しており、
pythonも扱えるようになってきたので、Cクラスの残りの部分はもうストップして
Bクラスの問題集に行こうと思います。

https://paiza.jp/works/mondai/class_primer/class_primer__make

前回は、下記でやっていますが下手すぎたので
再度やります。

https://qiita.com/Atsulabo/items/122181b1778afeca677f

まず構造体ってなんだ?というところから始めたので、
そこらへんは前回のを見て下さい。
ただ、PHPのコードは修正します。
“`php

元記事を表示

LaravelでToDoアプリのAPIを実装してみよう②

# 前回の記事
https://qiita.com/kent0129/private/b991b2c0c32706fd337c
こちらの記事の続きになります。

# ToDoの詳細取得機能の実装

### コントローラーの編集
データを1件取得するメソッドをTodoControllerに書いていきましょう。

“`php:TodoController.php
/**
* ToDo詳細
*
* @param int $id
* @return JsonResponse
*/
public function show($id):JsonResponse
{
// $idが数値以外が送られてきた時にはエラー返す
if (!is_numeric($id) || $id <= 0) { return response()->json(
[
‘code’ => Response::HTTP_B

元記事を表示

LaravelでToDoアプリのAPIを実装してみよう①

# 前書き
初学者向けにLaravelでAPIを作る方法を記事にさせていただきます。
今回はシンプルなToDoアプリのAPIを実装していきます。
記事ではLaravel10系を使用しています。

# Laravelの環境構築
今回は手軽に環境構築を行いたいのでSailを使用しようと思います。
Docker Desktopは事前にインストールしておいてください。
以下のコマンドを実行してアプリケーションの作成を行ってください。
“`
curl -s “https://laravel.build/laravel-todo-api-sample” | bash
“`

上手くいかない方は以下のQiitaの記事や公式ドキュメントをを参考にしみてください。

https://qiita.com/y_sone/items/2bf510e551cd14d22042

公式ドキュメント

https://readouble.com/laravel/10.x/ja/sail.html

https://readouble.com/laravel/10.x/ja/installation.html#d

元記事を表示

Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話

# 前書き
タイトルまんまですが、Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話になります。
書き方とHas Many Throughを使わない場合との書き方の違い、簡単な活用方法等を書いていきます。

#### サービス概要
今回はユーザーが記事などを投稿して記事にコメントをできるようなサービスを考えてみます。

#### 環境
Laravel 10系

# テーブル設計

#### users(ユーザー)テーブル
| 論理名 | 物理名 | データ型 | 制約 |
| —- | —- | —- | —- |
| ユーザーID | id | UNSIGNED BIGINT | PRIMARY KEY,
AUTOINCREMENT |
| ユーザー名 | name | VARCHAR(255) | NOT NULL |
| 作成日時 | created_at | TIMESTAMP | NOT NULL |
| 更新日時 | updated_at | TIMESTAMP | |

#### po

元記事を表示

PHP デバッグ

“`php
“y1”,
“x2” => “y2”,
“x3” => “y3”
);

//バッファ出力開始
ob_start();
//配列をダンプ
var_dump($log);
//バッファの内容を変数に代入
$dump = ob_get_contents();
// バッファ終了
ob_end_clean();
error_log($dump,3,’./dump.txt’);

error_log(var_export($log, true), 3, “./export.txt”);
error_log(print_r($log, true), 3, “./r.txt”);
“`

元記事を表示

PHPの基本

PHPの基本文法
1.![スクリーンショット 2024-01-23 002202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3666066/b3a40589-b74c-5a15-4de5-d5784153c2d3.png)
2. 末尾にセミコロンが要る
3.出力には、echo
4. 関数は処理をまとめるもの
5. 関数内の処理の結果は返り値で、return 返り値
6. returnが出たら、処理が終了。Returnの後の処理は無視される
7. 条件式:if(){
処理;
}
8. 配列
次に配列の要素で繰り返して取り出す方法を説明します。これはすごくよく使うので、かなり重要です。
たとえば、配列の要素を順番に取り出してそれらを表示するということがあります。そういうときにforeach文というのをよく使います。
foreachは以下のように記述します。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

Unable to load the requested class: {class名} CodeIgniterのエラー解消

## エラー内容
ブラウザでサイトにアクセスしたところ、以下のエラーが表示された。
“`
An Error Was Encountered
Unable to load the requested class: {class名}
“`
このときCodeIgniterのエラーログは以下の内容のみ。
“`
ERROR – yyyy-MM-dd hh:mm:ss –> Unable to load the requested class: {class名}
“`
通常のエラーログと違ってスタックトレースがなくこの1行だけなので、やや戸惑った。
そのため発生個所の特定も必要になる。
## 原因と対処
**原因**:ファイル名・クラス名の大文字小文字のtypoが原因で、クラスのロードに失敗していた。
**対処**:ファイル名・クラス名の大文字小文字を確認する。ファイル名は大文字にする。

## 環境
– CodeIgniter 3.1
– PHP 8.1.14
– EC2インスタンス(Amazon Linux 2)
– Apache 2.4.58

備考:ローカルのDocker環境では

元記事を表示

PDOでロールバックして帳消し

phpでロールバックをして帳消しします。

“`php
try{
$pdo = new PDO($dns,$user,$pass,[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);}catch(PDOException $e){
echo ‘接続失敗’ . $e->getMessage();
exit();
}

$pdo->beginTransaction(); //トランザクションの開始
$pdo->query(
“UPDATE user SET age = age + 1 WHERE id = 1”
);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result[0][“age”]);
“`
“`
26
“`
間違えたことに気づきます。処理前まで巻き戻しましょう。

“`php
$pdo->rollback();
print_r($result[0][“age”]);
“`
“`
25
“`
rollbackメソ

元記事を表示

一時的にしか使われないコードに有効期限を設定し、GithubActionsでチェック・通知する

本日 [レガシーソフトウェア改善ガイド](https://www.amazon.co.jp/dp/B01MSLAFPT/) の第4章で紹介されていた「期限切れのコード」を読み、心当たりしかなかったので早速実践として動くコードを書いてみる

# 期限切れのコードとは

広告キャンペーンで決まった期間だけバナーを表示するとか、A/Bテストを実施してみるとか。

そういう、役目が終わりもう使われないコードがリポジトリ内に残ったままだとコードリーディング時の認知負荷を上げてしまうため、使い終わったら即削除すべき。

なのですが**弊社は削除のためのタスクが発行されることもなくそのまま残してしまう傾向しかない**ため、消し忘れている場合はビルドが失敗するようにして、削除を促すようにする。

# やり方とサンプルコード

一時的にしか使われないコードには、決まったテンプレートを使って有効期限を付与する。サンプルコードでは [Expire] YYYY-mm-dd をテンプレートとする。

## PHP

2024年01月22日以降は使わないコード

“`php
// [Expire] 2024-0

元記事を表示

OTHERカテゴリの最新記事