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

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

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’);
“`

元記事を表示

PHPxさくらサーバー デプロイ攻略_サーバー側環境編

**↓前回**

https://qiita.com/dnote/items/5f22f43a9b4158caff97

## あらすじ
– [x] 開発環境側で.envファイルを使用した情報の読み取り
– [x] サーバーへのファイル移動(各自`www`直下へフォルダごとファイルを送信されたし)
– [ ] サーバー側で開発環境同等の実行環境を作る **(本稿)**

:::note warn
CHK:アップロード忘れずに!
composer.json
:::

https://qiita.com/dnote/items/5f22f43a9b4158caff97

ここではさくらのレンタルサーバー側の環境構築を行っていきます。
具体的には下記↓
– composer & phpdotenvのインストール
– .envファイルの作成が必要です。
(FTPで直接送信 or サーバーコントロールパネル上で作成する方法もあります。)

を行います。やりたいことは一緒。でも方法は違います。
ここからはSSH接続を利用した、コマンドベースの作業となります。

## S

元記事を表示

ElasticsearchのMUST(AND),SHOULD(OR),MUST_NOTについて

「must_not [A,B,]」はSQLでいう「NOT (A AND B)」なのか「NOT (A OR B)」なのか…動作確認した。
(2023/10/19㈭にbid:5815のハンドボール掲示板の所属先カテゴリidを129→118に移動した際、発生したのを機に…。)

tid=21,22,24,24,25の集合があるとき
must_not=>[tid=>22,tid=>24,]

tid=21,23,25が抽出される。
つまり
「NOT (tid=22 OR tid=24)」
と書くのと同じ動作。
「NOT (tid=22 AND tid=24)」
ではない!

must_not=>[tid=>22,!tid=>22,]

NOT(tid=22 OR ! tid=22)

何も抽出されない。◯

NOT(tid=22 AND ! tid=22) ⇔ (NOT tid=22 OR tid=22)

このように全抽出になるわけではない。

注意するのは
must_not 「「性別=男性」、NOT「身長が170cm以上」(身長が170cm未満)、」

「男性かつ170cm未

元記事を表示

phpでのvar_dump()表示形式変更

注意:「 xdebug.so 」を読み込むと処理に時間がかかるようになるので、読み込むのは開発用/ステージングサーバーのみに絞った方が無難です。
時間的に約倍。下手すると倍超えまで時間がかかるようになります。

2023/07/04 AWS->OCIへのサーバー移行
※OCIサーバーでvar_dumpするとどのファイルの何行目かが分からないので。

今回のケースでは
“`
[root@0206oci_webstaging php.d]# pwd
/etc/opt/remi/php56/php.d
[root@0206oci_webstaging php.d]# cat 20230704.ini
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
[root@0206oci_webstaging php.d]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service
[root@

元記事を表示

ループメニュー1を解いていく5

https://paiza.jp/works/mondai/loop_problems/loop_problems__kuku_step2

### Python

“`py
N = int(input())
for i in range(1,10):
if i < 9: print(i * N, end=" ") else: print(i * N) ``` ### PHP ```PHP
“`
https://paiza.jp/works/mondai/loop_problems/loop_problems__pow2

### Python

“`py
N

元記事を表示

ChatGpt Apiを用いてクイズWEBアプリを作った際のプロンプトの知見

# 初めに

ChatGPT APIを使った何か作ってみようと思い、AIに質問をして正解を当てるクイズWEBアプリを作ってみました。

![20200622.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2713225/4abc99ce-d278-33c7-ef5d-6c55efc22a9f.gif)

↓WEBアプリPubliQはコチラ。
https://publiq.cloud/

こちらのページではphp(laravel)で解説しますが、どの言語を使っている方にも分かるように、「プロンプトの使い方」に焦点を当てて書こうと思います。

アドバイス、ご助言頂けますと幸いです。

# クイズの概要

例えば:お題が「野菜」で正解が「ニンジン」の場合は「色はオレンジ?」「根菜?」等の質問をAIしながら答えを探すクイズにしてみました。
ちなみに某ラーメンyoutuberのクイズショート動画から着想を得ています。

# ざ

元記事を表示

PHPxさくらサーバー デプロイ攻略_開発環境編~.env情報の取得~※Windowsベース

## 本稿の目的
PHPで作成したアプリをノーヒントでデプロイするのはわからないことだらけですごく大変でした…
自分の行ったデプロイまでの手順を示し、みんなのPHPアプリを世に解き放つお手伝いがしたい!

ということで、ここでは開発環境側の準備に関して解説します。
全体の流れはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3562770/edcbfc4a-e30f-3558-d316-685c329e7d78.png)

## .envファイルの準備
このようなデータベースへのアクセス設定がphpファイルに記載されているとする。
“`php:初期状態php
$db_name = “sample_db”; //データベース名
$db_id = “root”; //アカウント名
$db_pw = “”; //パスワード:MAMPは’root’
$db_host = “localhost”; //DB

元記事を表示

OTHERカテゴリの最新記事