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

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

504エラーが発生してもDBにデータが保存されてしまう問題

# 起こったこと
CSVデータアップロード機能をPHP(Laravel)で作成していた。
1万件以上のレコードを持つ大容量のCSVデータをアップロードし、DBにデータを保存しようとした際、開発環境でタイムアウトエラーが発生してしまい、正常なアップロードが出来なかった。
しかし、DBにはデータがアップロードされていたため、「エラーが発生しているのにトランザクションがロールバックされていない」問題が発生してしまった。

# 原因
CloudFrontはタイムアウト(504 gateway timeout)をクライアントにレスポンスしているが、PHPのプロセスが裏側で動いており、トランザクションが正常にコミットされていたためDBにデータが登録されていた。

# 解決策
大容量のCSVデータ自体は時間がかかっても正常に登録されることが分かったので、DBの該当テーブルに新しくフラグを追加し、
「処理中(デフォルトの値)」
「成功(コミットした場合更新)」
「失敗(ロールバックした場合更新)」
の3種類の値を入れられるようにした。
504エラーが出た際に画面を開きなおしてもらい、フラグの値に応じ

元記事を表示

【PHP】2次元配列をimplodeしたかった話

# はじめに

ある日こんなことを思いました。

2次元配列をimplodeしたい!

と。

# どういうことか
“`
[[1,2,3],[4,5,6]]
“`
こんな多次元配列を
“`
1|2|3|4|5|6
“`
こんな感じに変換したいということです。

# 試したこと① foreach

まずはシンプルにforeachを使って変換しました。

“`php:
$array = [[1,2,3],[4,5,6]];

$result = “”;
foreach($array as $value){
$result .= implode(“|”,$value);
}

echo($result);

// 出力結果
// 1|2|34|5|6
“`
3と4がくっついてしまいました。

implodeで変換したものをresultにくっつけるのではなく、1つの配列を作って一気に変換してみようと思います。

“`php:
$array = [[1,2,3],[4,5,6]];

$resultArray = array();
foreach($array as $va

元記事を表示

【Composer】インストールから基本コマンド紹介まで

## 導入
PHPでWebアプリケーションを開発する際、純粋なPHPのみで実装するケースってほぼほぼないですよね。
なにかしらのライブラリを導入したり、フレームワーク・CMSを利用するかと思います。

そんな時に、使用するパッケージ・ライブラリのバージョン管理を行ってくれるのが**composer**です。

今回の記事ではこれさえ知っとけばどうにかなるんじゃないかという**composer**の基本コマンドをご紹介します。

## composer 本体のインストール
手順は[公式ドキュメント](https://getcomposer.org/download/)に書いている通りで恐らくスムーズ行きます。
(M2・Macでは問題ありませんでした。)

以下を順番に実行してください。
“`bash
php -r “copy(‘https://getcomposer.org/installer’, ‘composer-setup.php’);”
php -r “if (hash_file(‘sha384’, ‘composer-setup.php’) === ‘edb40769019c

元記事を表示

議論をするための掲示板Webサイトを作ってみた

## 作った物
『**ディスカッションツリー**』というWebサイトです。
一つの話題に対して複数の意見を出し、それぞれに対して更に複数の意見、またそれに対し複数の意見といった形で、ツリー状にコメントを重ねていく掲示板です。
一つの意見に対して補足や訂正を重ねていく事で、SNSなどで起こりがちな「それぞれ好き勝手な事を言うだけ言って、そのまま話が流れていく」ような状況を回避し、情報を残しながら議論を行う事を目的としています。

https://discussion-tree.net/

<画面>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715891/c612cd89-bdfb-b220-f3ab-a1e52f79fbaf.png)

## 使い方
早い話が、**コメントに対してコメントする機能が付いたYahoo!知恵袋**です。
1. 意見を集めたい、知りたい事に関するトピックを作成
1. コメントで回答
1. 回答に対してコメントで意見する
1. 回答に対するコメントにコメント

元記事を表示

Xampp環境でWebsocketサーバー(自作)をたててみる

## はじめに

Linux環境でサーバーアプリを作った事は今までありましたが、Windows上で開発する時に仮想環境を作ったり、もろもろのサーバーアプリをインストールしたりするのが面倒だったので、Xampp環境だけでWebsocketサーバーをたてられないか検証してみたいと思います。

それにどうせだったらLaravelのフレームワーク環境を使ってクライアントサイドとサーバーサイドのオールインワン環境で進められないか確認してみたいと思います。

:::note warn
この記事では検証作業をメインとしていますのでXamppやLaravel等のツールはインストール済である前提で話を進めます。参考にさせて頂いた資料等はリンク先のサイトをご覧ください。
:::

https://qiita.com/uzued/items/5287dddaa7ffc5c84d6a

## 環境

プラットフォーム
Windows10
統合環境
Xampp v3.3.0
フレーム

元記事を表示

XSS対策でエスケープ処理をする

## はじめに
xssはサイバー攻撃の一種で、悪意のあるユーザが投稿型webページに悪意のあるjavascriptを投稿し、アクセスしたユーザにそのコードを実行させ個人情報を盗むなど攻撃します。

## 対策方法
エスケープ処理を使って対策していきます。エスケープ処理とは投稿されたjavascriptのコードをただの文字列に置き換える方法です。

## 対策方法
今回、対策するにはエスケープ処理をします。javascriptのコードをただの文字列にします。
第一引数はエスケープ処理したい文字列、第二引数はどのように置き換えるか、第三引数は変換時の文字コードになります。
“`php
$string = ‘‘;
$string = htmlspecialchars($string, ENT_QUOTES, ‘utf-8’);
“`
“`

“`
javascriptが実行されずに文字列として出力されました。

## 終わりに
サイバー攻撃は後を絶ちません。また、サイバー攻撃の被害

元記事を表示

【PHP】文字列→配列へ変換

# 「,」区切りの文字列を配列にする!

“`

“`

“`
Array
(
[0] => A
[1] => B
[2] => C
)
“`

元記事を表示

Ubuntu22.04 CLIでバーチャルホスト設定を行ったときに参照したサイト

1. 全体の流れ

https://qiita.com/i-tanaka730/items/3f28150eb1b3b7f8183c

2. ERROR: Site mysitename does not exist!への対処

https://qiita.com/mzmttks/items/85c69313693cb1df4949

元記事を表示

PhpStorm で Docker環境のユニットテストを実行する

これまで、Docker環境でのPHPのユニットテストは、毎回、コンテナにログインして実行してたけど、ファイルのパスを指定するなどなかなかめんどい。

ちなみに、世の中の VS Code 一強の流れに逆らうかのように PhpStorm を使っているんだが、これはこれで PHPに最適化されていて使いやすい。

というわけで、PhpStorm のGUIから直接テストが実行できそうな機能があったので、Docker環境でもできないかなと思って試してみた。

早速設定。

## CILインタープリターの設定
![スクリーンショット 2024-02-18 13.08.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26899/1793feb8-16c4-0c59-cf3c-7412b50373fb.png)

環境設定を開き、PHPのペインの CLIインタープリターの右側にある「…」のボタンをクリックする。

![スクリーンショット 2024-02-18 13.08.55.png](https://qiita

元記事を表示

【PHP】開発現場で必ず使う配列関数のすべて

## はじめに
webサービスを構築していく中で必要な知識を備忘録として残しております。

今回は `配列関数` について深堀りしていきたいと思います。
※随時writeしていきます。

## 現場でよく使う配列関数

配列関数 説明 使用頻度
in_array 配列の要素に特定の値を含むものがあるか ★★★★★
count 配列の要素の数を返す ★★★★★
array_merge 配列同士を結合(マージ)する ★★★★
array_pus

【個人開発】マイクラの建築物配布サービスを作ったメモ part2

### はじめに

https://qiita.com/soradore_/items/a7caa7a371fc25181a6f

先日投稿した記事からさらに色々追加したのでメモ

作ったサービスは以下です
https://poscra.com/

### 追加要素
– 記事への埋め込み画面
– 3Dモデルのカメラ設定保存

### 記事への埋め込み画面
こちらは何かというと3Dモデルをiframeで読み込めるようにした形です。
Figmaとかの埋め込みを参考にデザインしました。
詳細ページに埋め込みタグをコピーできるボタンを設置してます。

![スクリーンショット 2024-02-05 6.52.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/178346/ab6cfcdd-6d47-721b-fc57-3ca3bedfd8c5.png)

やった内容としては画面いっぱいにCanvasを広げて表示することと、
Figmaのように下部にロゴやリンクなどを置きました。

埋め込む際のセキュリティ的な

よく使うPHPの関数10選

## はじめに
備忘録としてよく使うPHPの関数を書き留めておきました。

### 1.echo()
指定された文字列を出力します。
“`php
echo “Hello, World!”;
“`

### 2.var_dump()
変数の型と値を出力します。デバッグ時に役立ちます。
“`php
$myVar = array(1, 2, 3);
var_dump($myVar);
“`

### 3.isset()
変数がセットされており、NULLでないかをチェックします。
“`php
$var = ”;
if (isset($var)) {
echo ‘$var is set’;
}
“`

### 4.empty()
変数が「空」かどうかをチェックします。
“`php
$var = ‘0’;
if (empty($var)) {
echo ‘$var is either 0, empty, or not set at all’;
}
“`

### 5.strlen()
文字列の長さを返します。
“`php
$str = “Hello”;
ech

php.iniの設定が反映されない(windows)

## はじめに
PDO driversにMySQLを入れたくてphp.iniをいじっていたのですが、php.iniの設定が反映されなくて困っていました。その時の対処法を残しておきます。

## 環境
・OS : Windows10
・PHP8.2.9
・Apache2.4

## 問題点
・Apacheを再起動していない

これが問題点でした。しかし、PHPのダウンロードしかしていなかったため、ApacheをダウンロードしてPHPと連携させて再起動していきます。

## Apacheのダウンロード
①以下のリンクにアクセス
https://httpd.apache.org/

②最新バージョンである「Apache httpd 2.4.57 Released」のブロックにある「Download」を選択

③「Apache HTTP Server 2.4.57 (httpd): 2.4.57 is the latest available version 2023-04-06
」にある「Files for Microsoft Windows」を選択(今回はWindowsのため)
※2023

【PHP】配列の値を書き換える※備忘録

# 前書き
相談をされた時に回答したものの備忘録になります。
PHPでエクセルファイルを作る業務をしていたそうで、送られてきた値の順番からセルに優先度を設定しなければならないとのことで、最終的には以下のコードのように入れるセル番号に対しての文字列を設定したいと相談を受けました。

“`php
$array = [
‘C10’ => ‘()’,
‘C11’ => ‘()’,
‘C12’ => ‘(1)’,
‘C13’ => ‘()’,
‘C14’ => ‘()’,
‘C15’ => ‘(3)’,
‘C16’ => ‘()’,
‘C17’ => ‘()’,
‘C18’ => ‘(2)’,
‘C19’ => ‘()’,
‘C20’ => ‘()’
];
“`

タイプのようなものがあり、番号で管理されているらしいです。
以下のような配列でタイプと優先度が送られてきます。
“`php
$values = [
1 => ‘013’,
2 => ‘019’,
3 => ‘0

【PHP】FlowのプロジェクトにPHP Stan入れてみる

# 初めに
Flowのキャッチアップのために記事を書き始めて3か月ほど経ちました。
初めてのPHPにも慣れ、そろそろ静的解析ツールを入れてソースを綺麗にしたいなぁと思っていたので、PHPでよく使われているPHP Stanなるものを入れてみました。

# PHP Stanとは
PHP StanとはPHPのソースで使用される静的解析ツールの一つです。

https://phpstan.org/

以下のようなコードを検出してくれます。

* 型安全性の問題
* 未定義の変数
* 死んだコード(使用されていないコード)
* クラスやメソッドの存在しない呼び出し
* 引数の数や型の不一致
* …and more!!

## 特徴1:チェックの厳しさを決めることができる
PHP Stanはチェックのレベルを0~9の10段階で設定することができます。
プロジェクトに合わせたレベルを設定できるため、新規導入しやすいのが良いですね。
各レベルの詳細は[こちら](https://phpstan.org/user-guide/rule-levels)をご参照ください。

## 特徴2:特定のFWに特化

cakeを簡単に触ってみる!

### はじめに
仕事でcakephpを使うことになりましたので、実際にcakephpを使ってみたいと思います!

### cakephpとは
phpで開発されたフレームワーク。MVCアーキテクチャを採用していてRuby on Railsの影響を受けてる。MVCの流れを簡単に確認しましたので備忘録も兼ねてまとめます。

### cakephpをインストール
とりあえず下記のコマンドでcakephpをインストール
“`
composer create-project –prefer-dist cakephp/app:4 BlogApp
“`

ディレクトリ構成はこんな感じです

BlogApp
|-.github
|-bin
|-config
|-database
|-logs
|-plugins
|-resources
|-src
|-templates
|-tests
|-temp
|-vendor
|-webroot
|-.editorconfig
|-gitattributes
|-.ignore
|-

Laravelでcsvファイルを簡単インポート

## はじめに
選択したCSVファイルがインポートされるまでの流れを簡単に作ってみたいと思い、必要最低限で実装。

## テーブル定義
| カラム | 型 | CSVファイル読み込み対象 |
| —- | —- | —- |
| id | bigint(20) | |
| name | varchar(255) |○ |
| age | varchar(255) | ○ |
| address | varchar(255) | ○ |
| created_at | timestamp | |
| rpdated_at | timestamp | |

### 今回使うcsvファイル
![image](https://firebasestorage.googleapis.com/v0/b/ciita-c6ea6.appspot.com/o/user%2Fimages%2Fcvza5ChG1vGAzClo?alt=media&token=e8fe9087-a205-40c8-9693-ff6a09c96c6b)

## 実際の動き

### イン

[Laravel]フォームリクエストバリデーションについて

## はじめに
ララベルのバリデーション実装時に躓いたので、備忘録も兼てまとめたいと思います。

### バリデーションの種類
Laravelのバリデーションは大きく分けて二つあります。

1.validateメソッドを使ってコントローラーに記述する

2.フォームリクエストバリデーション

### どちらを使った方がいいのか
時と場合によりますが、特に理由がなければフォームバリデーションを使った方が良い。

理由としてファットコントローラーを避けるため。コントローラーにはなるべくロジックは書きたくないので、分けられるなら分けた方が良い

フォームリクエストバリデーションのファイルはバリデーションの処理しか書かないので分かりやすい。

今回はフォームリクエストバリデーションについてまとめたいと思います
### フォームリクエストバリデーションの使い方

下記の簡単なフォームで実装します。
![image](https://firebasestorage.googleapis.com/v0/b/ciita-c6ea6.appspot.com/o/user%2Fimages%2F24F

静的メソッド(スタティック)と動的メソッド(インスタンス)について。とりあえず案件先に合わせてたので、改めてまとめてみた。

本日は静的メソッドと動的メソッドについて、備忘録も兼ねて書いてみました!
## 環境
__使用言語__:PHP 8.1.10

__フレームワーク__:laravel9.19

## はじめに

– 他の人のソースに合わせてstaticとかnewでメソッド使ったり、プロパティ参照してる。
– とりあえず欲しい値が取得できれば良い。
– そもそも静的メソッドと動的メソッドの違いが分からない
– 静的メソッドと動的メソッドどちらで作ろうか迷った。

自分はこんな感じで開発してたので、改めてまとめてみることにしました!

## 静的メソッドと動的メソッドとは
### 静的メソッドについて
まず静的メソッドとは、クラスの中で「static」を記述して作成したメソッドの事です。__呼び出しはクラスに対して行い、どこで呼び出しても同じ処理を行います。__

__呼び方__

“`
静的メソッド
スタティックメソッド
クラスメソッド
“`
と、呼ばれます。使うには下記のようにfunctionにstaticを付けます。
“`Test2Controller.php
//スタティックとインスタン

Laravel開発をちょっと快適に! tinkerの使い方

## はじめに
Laravelでクエリビルダを調べてる時に気になったので深掘りしてみました。

## tinkerとは
Laravelに標準で搭載されている対話型のコンソール。

LaravelでクエリビルダやEloquentの結果を確認する事ができるみたいです。

取得したデータを確認したい時に便利かなと思いました。

## とりあえず使ってみた

### 使い方
下記コマンド入力
php artisan tinker 
“`
kamimurayuuta@uemurayuutanoMacBook-Pro todoTask % php artisan tinker

Psy Shell v0.11.12 (PHP 8.1.10 — cli) by Justin Hileman
>
“`
## モデルの取得(全件)
“`
> App\Models\User::all()
= Illuminate\Database\Eloquent\Collection {#4466
all: [
App\Models\User {#4720
id