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

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

横(列)方向に伸びるCSVを効率よく作成する方法の模索

# はじめに

通常データベースの内容をCSVなりExcelなりにエクスポートする場合、ひとつのカラムに対してひとつの列が割り当てられ、ひとつのレコードに対して行がひとつ、つまりレコード数が増えると見た目縦に伸びていくような構造に、通常はなると思います。

しかし今回お客様のご要望は縦横が逆で、カラムが縦に並び、1レコードが1列に対応するものでした。

通常
住所
山田 一郎 北海道
田中 二郎 沖縄県
<

【Laravel】独自の単位でリクエスト制限を設定する

この記事では、Laravelアプリケーションで独自のID単位でリクエスト制限を設定する方法を説明します。

デフォルトでは、LaravelはIPアドレスやユーザーID単位でリクエストを制限しますが、特定のシステムIDやユーザーセッションIDに基づいてリクエストを制限することで、より細かな制御が可能になります。

今回は、セッションIDを単位で1分間に10回のリクエスト制限を設定する例を用いて具体的に解説します。

## コードの説明

### 1. **カスタムミドルウェアの作成**

まず、特定のID(例としてセッションID)に基づいてリクエストを制限するためのカスタムミドルウェアを作成します。

“`php
namespace App\Http\Middleware;

use Illuminate\Routing\Middleware\ThrottleRequests;

class ThrottleRequestsByCustomID extends ThrottleRequests
{
protected function res

cakePHP4のmigrationで発生したSyntaxエラーの解消

## 発生したエラー
クエリビルダを使用してupdate文を作成した時に以下のエラーが発生しました。(コードは以下の通り)やりたかったことはorderカラムの値のアップデートです。

“`php
$this->getQueryBuilder()
->update(‘my_table’)
->set([
‘order’ => xx,
])
->where([‘id’ => xx])
->execute();
“`

このコードを実行すると以下のエラーが吐かれました。
“`php
PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ‘order = ‘xx’ WHERE id

PHPで改行コードを取り除く

PHPの勉強始めました。
今までなんとなくで使っていたので、初心に戻って1つづつ学んでいます。
## trim()を使う
変数をechoした時に、謎の改行が出ていたので取り除く方法を探しました。
見つかったのがtrim()、先頭や文末の文字列を削除します。
“`
trim( “対応の文字列”, “削除したい文字列” );
“`

第2引数に何も指定しない場合は、以下の文字コードが削除されます。
今回削除したいのは、改行だったのでちょうど良い。
“`
” ” (ASCII 32 (0x20)), 通常の空白。
“\t” (ASCII 9 (0x09)), タブ。
“\n” (ASCII 10 (0x0A)), リターン。
“\r” (ASCII 13 (0x0D)), 改行。
“\0” (ASCII 0 (0x00)), NULバイト
“\v” (ASCII 11 (0x0B)), 垂直タブ

“`

始めての技術アウトプット、終わり。

## 参考記事
https://www.php.net/manual/ja/function.trim.php

【PHP8】password_hashを使ったハッシュ化について

## はじめに
PHPでの実装にて、ユーザ情報のパスワードのソルト(パスワードに付与するランダムな文字列)を作成し、`password_hash`関数に渡してハッシュ化しようとしたら問題が起きました。

その際にPHPでのハッシュ化について少し調べましたので記述します。

## `password_hash()`の動作

`password_hash`はPHP5.5以降で使うことができ、強力な一方向ハッシュアルゴリズムを使って、 新しいパスワードハッシュを作るハッシュ関数です。

`option`引数でソルトを設定可能ですが、指定しない場合はランダムソルトを使い、同じパスワードの文字列であっても毎回違うハッシュ値を生成します。

しかし、PHP7から`option`でのソルトは非推奨、PHP8からはソルトが設定されていても無視されてランダムソルトが使用されるので注意が必要です(これが原因でsymfonyをdevelopモードで動かしていて発生するとエラー画面でWarningが表示されてしまいます)。

### PHPバージョン7 ソルトを設定して`password_hash`実行 –

WordPressでiframeを埋め込んだらCSPエラーが発生した件

## はじめに
WordPressで作成したページにVimeoの動画を埋め込んだ際にContent Security Policy (CSP) エラーが発生したので、今回はそれについてまとめる。
CSPはセキュリティ対策の一環として重要だが、設定ミスや外部リソースの許可を適切に行わないとエラーが発生する。

## 問題点
以下のようなコードを追加して、Vimeoの動画を埋め込んだところ、以下のようなCSPエラーが発生しました。
“`php

ユーザーグループの作成、追加
“`
groupadd laravel
gpasswd -a root laravel
gpasswd -a nginx laravel
chown -R :laravel ./storage
chown -R :laravel ./bootstrap/cache
“`

出力されるログ・ファイルのパーミッションを変更

“`/config/logging.php
‘daily’ => [
‘driver’ => ‘daily’,
‘path’ => storage_path(‘logs/laravel.log’),
‘level’ => ‘

Laravel 多対多のテーブル設計と中間テーブルについて(初学者向け)

## はじめに
Laravelの学習中に、1対多のリレーションは組むことができたけれど、多対多の場合のテーブル設計はどう考えれば良いのか、また中間テーブルについてイメージが掴めなかったため、自分なりにまとめてみました。

## 作成するテーブル
以下の映画テーブルと俳優テーブルを例に考えてみます。

#### 映画テーブル
| id| タイトル (title) |公開年 (release_year) |
|:-:|:-:|:-:|
| 1 | インセプション | 2010 |
| 2 | タイタニック | 1997 |
| 3 | アベンジャーズ | 2012 |

#### 俳優テーブル
| id | 名前 (name) |性別 (gender)|
|:-:|:-:|:-:|
| 1 | レオナルド・ディカプリオ |male|
| 2 | ロバート・ダウニー・Jr |male|
| 3 | スカーレット・ヨハンソン |female|

1つの映画に複数の俳優が出演します。また1人の俳優は複数の映画に出演します。
つまり2つのテーブルの関係性は、多対多とな

単純交換法(バブルソート)

## 単純交換法(バブルソート)とは

データを並べ替える整列アルゴリズムの一つ。
隣り合ったデータを交換する処理を繰り返して、全体を整列する。
実行速度は遅い。

### 対象データ

以下の配列を昇順に並べ替える

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

### フローチャート

変数`i`は比較する要素のうち右側の要素の添字を表す変数。
変数`k`は既に確定した要素の添字。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733055/e9d0e64b-8539-7b23-1b6f-3fa5374540a4.png)

#### 手順

①右端の要素から順に、隣り合ったデータを昇順に並べ替える
②左端の要素から一つずつ順番に、データが昇順に整列していく

単純選択法(選択ソート)

## 単純選択法(選択ソート)とは

データを並べ替える整列アルゴリズムの一つ。
一番小さなデータを選択して、先頭から順に並べ替えていく。

### 対象データ

以下の配列を昇順に並べ替える

“`php
$array = [12, 13, 11, 14, 10];
“`

### フローチャート

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2733055/c88b3f08-a06d-6137-52ee-79a01f9a52c5.png)

#### 手順

①探索範囲の最小値を探す
②探索範囲の最小値を先頭要素と交換する

PHPでiPhoneユーザーとAndroidユーザーを自動判別するサンプルコード

PHPでiPhoneユーザーとAndroidユーザーを自動判別してリンク先を分けるシステムを作成することは可能です。以下にその実装方法を示します。

PHPコード
以下の例では、User-Agent ヘッダーを解析して、ユーザーがiPhoneまたはAndroidデバイスを使用しているかどうかを判別し、それに基づいてリダイレクトするコードを示します。

“`PHP

WP Offlaod Media Lite S3で画像アップロードが出来なかった…。

# WP Offlaod Media Lite S3で画像アップロードが出来なかった…。 ~php-gd~

AWS初心者向けのハンズオン形式の講座で、WordPress上の画像をS3に保存する処理がありましたが、どういうわけだかS3にアップロードできませんでした。

「AWS:ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得」
~~蛇足:AWSのコンソールやWP Offload Mediaの設定画面がハンズオン動画と異なるので苦労します…。~~
https://www.udemy.com/share/101Yby3@7BjNdcYUfFZEZkJbOQ2PFRKD2znhh2E07weMeqSegaewGTSl6u29J1MBsfp7HyIBPw==/

以下の投稿を参考に見直したところ、php関連パッケージのインストールで不足分が判明しました…。

https://qiita.com/kyusyu_syoyu/items/a1c183e4afb59788a67a

## php-gd
結論、

今回
山田 田中