- 1. 素数判定関数を使って簡単なゲームを作った話②
- 2. 素数判定関数を使って簡単なゲームを作った話①
- 3. 素数判定関数を使って簡単なゲームを作った話
- 4. UbuntuでphpとApacheを連携させる
- 5. Homebrew経由でサポートが終了したPHPをインストールする
- 6. Postmanで連想配列を送る方法
- 7. paizaレベルアップ問題集 標準出力メニュー【行によって長さが違う二次元配列の表示】FINAL問題 すべての行の長さと値が不定な 2 次元配列の出力 (paizaランク B 相当) 解答例
- 8. PHPの静的コード解析ツールPHPMDの使い方
- 9. 【Laravel】マルチパートアップロードを使って動画をS3へアップロードする
- 10. 構造体の作成(もう一度挑戦)⇒Uncaught TypeError: Cannot assign null to property がでる
- 11. LaravelでToDoアプリのAPIを実装してみよう②
- 12. LaravelでToDoアプリのAPIを実装してみよう①
- 13. Laravelでリレーション先のリレーションのデータを取得する時にHas Many Throughが便利っていう話
- 14. PHP デバッグ
- 15. PHPの基本
- 16. Unable to load the requested class: {class名} CodeIgniterのエラー解消
- 17. PDOでロールバックして帳消し
- 18. 一時的にしか使われないコードに有効期限を設定し、GithubActionsでチェック・通知する
- 19. Web系のプログラマーでもわかるP2Pアプリケーション
- 20. 【PHP】リフレクションを使えばクラスやメソッドの構造を取得することができる
素数判定関数を使って簡単なゲームを作った話②
ご覧いただきありがとうございます。
この内容は、複数に分けて投稿しています。全体をご覧になりたい方は、以下のリンク先よりご確認ください。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
# ゲームの概要
このゲームは、複数人による対戦形式を想定して作成しています。
動作の概要は以下の通りです。①プレイヤーの人数を選択
②プレイヤーの名称を入力
③順番に素数を入力していく。この時、前回より大きな素数を入力する必要がある。制限時間内に前の人より大きな素数を見つけられないとゲームオーバー今回は、生徒たちにより楽しみながらプレイしてもらえるように、ランキング機能も作成します。
ちなみに、前の人より大きな素数を入力していく、という遊び方は、学習支援事業で会った生徒さんの発案です。# 次の投稿について
次回は、このゲームのタイトル画面を作成します。
投稿次第、リンクを追加するので、ぜひご覧ください。このプロジェクト全体の内容をご覧になりたい方は、以下のリンク先のまとめページよりご確認ください。
https:/
素数判定関数を使って簡単なゲームを作った話
こんにちは。
私は、週に何度か某市の学習支援事業の指導員として活動しています。そこでは中学生に指導を行っているのですが、その休憩時間に、生徒たちに多少なり頭を使いながら遊んでもらえるものを作れないかと思い、今回のゲームの開発に至りました。
以前の大学の授業で、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の設計・開発、テストをサポートするツールとして有名なPostmanhttps://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
Web系のプログラマーでもわかるP2Pアプリケーション
# はじめに
先月、映画『[Winny](https://www.telasa.jp/videos/217441)』を見ました
Winnyというのは[Peer to Peer](https://ja.wikipedia.org/wiki/Peer_to_Peer)(P2P)型のファイル共有アプリケーションとなっていますP2Pとは何か──
Wikipediaからの引用では以下のようになっています> P2Pに対置される用語としてクライアント・サーバー方式がある。クライアント・サーバー方式ではネットワークに接続されたコンピューターに対しクライアントとサーバーに立場・機能を分離しており、一般的には多数のクライアントに対してサーバーが一つである。クライアントはサーバーとだけ通信でき、あるクライアントが他のクライアントと通信するにはサーバーを介する必要がある。
>
> P2Pではネットワークに接続されたコンピューター同士が対等の立場、機能で直接通信するものである。クライアント・サーバー方式ではクライアント数が非常に多くなると、サーバーおよびその回線に負荷が集中するのに対
【PHP】リフレクションを使えばクラスやメソッドの構造を取得することができる
# 初めに
リフレクションという機能をご存じでしょうか?
私は名前は聞いたことあるけどよくわかっていませんでした。
改めて調べてみてすごい便利だなと感じたので、今回はリフレクションについてアウトプットします。# リフレクションとは
リフレクションとは、クラスやメソッドなどの構造をデータとして扱うことができる機能です。
この機能を使うと以下のような情報を取得することができます。
* クラスの属してる名前空間
* クラスに定義されているメソッドの一覧
* クラスが利用しているtraitの一覧
* クラスの継承元やインターフェースなどなど。
## 使い方
PHPには“`ReflectionClass“`というクラスがあり、以下のようにReflectionClassのインスタンスを作成することでクラスの情報を扱うことができるようになります。
“`php
// ReflectionClass型のインスタンスを作成
// 引数にはクラス名を指定
$reflectionClass = new \ReflectionClass(‘TargetClassName’);
“`“