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

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

エロ画像検出APIを用いてエロ画像のアップロードを阻止してみる【後編】

こんにちは!すぎちゃんです!

今回は前編に引き続き、Fargateコンテナと連携をした「エロ画像防止機能」をlaravelで作っていこうと思います! :muscle:

こちらの記事にも「いいね :heart: 」よろしくお願いします!

:::note info
[エロ画像検出APIを用いてエロ画像のアップロードを阻止してみる【前編】](https://qiita.com/sugichaaaan/items/738867e4bc3a1a0077d9)
:::

## :file_folder: ディレクトリ構造

今回の実装で使用する、クラス、bladeファイルを一挙公開いたします!

srcを起点にtreeを起動してしまうと枠に収まりきらなくなるので、直下のappディレクトリ、resourcesディレクトリでそれぞれコマンドを叩きファイル構造を可視化しました。

`(省略)`と末尾についているディレクトリについては、今回のエロ画像検出機能とは関係がないので配下のディレクトリ、及びファイルの表示は控えさせていただきます:sweat_drops:

### [src/ap

元記事を表示

Laravel8 新規作成したプロジェクトのMySQLにログインする方法

# 前提
以下のコマンドを実行し、Laravel8のプロジェクトを作成していること
“`
composer create-project laravel/laravel {プロジェクト名} “8.*” –prefer-dist
“`

# MySQLのサーバー起動
“`
$ sudo mysql.server start
“`

# ログインコマンド実行
“`
$ sudo mysql -u {ユーザ名} -h {ホスト名} -p
“`
.env の初期値から特に変更していないため、ユーザ名は「root」ホスト名は「localhost」を指定
正しいパスワードを入力するとログインに成功する
“`
$ sudo mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.1.0 Homebrew

Copyright (c) 200

元記事を表示

Laravelのソート操作:usort、sortBy、orderByの違い

Laravelでは、データの並べ替え(ソート)を行うためのいくつかの方法があります。
– PHPのusort関数
– Laravel独自のsortByメソッド
– クエリビルダのorderByメソッド

本記事では、それぞれの使い所を紹介します。

## usortとは?
usortは、PHPの組み込み関数であり、ユーザー定義の比較関数に基づいて配列をソートするために使用されます。シンプルなソートから複雑なカスタムロジックに基づくソートまで、柔軟に対応できるのが特徴です。

### usortの基本的な使い方
“`php
usort($array, ‘callback’);
“`

– **$array:** ソート対象の配列、usortはこの配列を直接変更します
– **’callback’:** 2つの要素を比較するためのユーザー定義の比較関数。この関数は次の値を返します:
– 負の整数($a < $b の場合) - 正の整数($a > $b の場合)
– 0($a == $b の場合)
### usortを使った例
配列内のオブジェクトを特定のプロパテ

元記事を表示

XserverでPHPのバージョンを上げる時に困った話

# はじめに

こんにちは、エンジニアのkeitaMaxです。

今回はXserverでPHPのバージョンが上げられなくて困ったことについて備忘録として書きます。

# 困ったこと

XserverのサーバパネルでPHPのバージョンを上げたが、コマンドでPHPのバージョンを確認したら上がってなくて困りました。

![スクリーンショット 2024-08-29 13.06.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/1c1fb5e8-5c3e-b435-a167-83680c8350e0.png)

“`
$ php -v
PHP 8.1.22 (cli) (built: Aug 15 2023 11:02:44) (NTS)
“`

# 解決策

`/usr/bin/`にあるphpのシンボリックリンクを修正したら直りました。

“`:/usr/bin/
$ unlink php
$ ln -s /usr/bin/php8.2 php
“`

“`
$ php -v
PH

元記事を表示

php-fpmの設定ファイルの場所を探す

`php-fpm -t` コマンドで探す

“`
$ docker run php:8.3-fpm php-fpm -t
[01-Sep-2024 19:57:29] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
“`

“`
$ docker run php:8.3-fpm ls /usr/local/etc/php-fpm.conf
/usr/local/etc/php-fpm.conf
“`

見つかりました!

## 補足

“`
$ docker run php:8.3-fpm php-fpm -h
Usage: php [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p ] [-g ] [-c ] [-d foo[=bar]] [-y ] [-D] [-F [-O]]
-c | Look for php.ini file in this directory

元記事を表示

①Laravelのクエリビルダー

## クエリビルダーとは
SQLの命令文(クエリ)を作成して実行するための機能

## やりたいこと
・各月ごとに投稿されたブログ数の集計

まず

“`
$blogCounts = DB::table(‘blogs’) 
“`
Laravelのクエリビルダーを使用してblogsテーブルに対してクエリを構築します

“`
->select(
DB::raw(“DATE_FORMAT(created_at, ‘%Y-%m’) as month”),
DB::raw(“COUNT(*) as blog_count”)
)
“`
DB::raw 生のSQLを直接クエリへ組み込むために使用します
created_atを’2024-09-01 12:34:56’→’2024-09’として、monthというエイリアスにし、
その月のブログ投稿数をカウントして、blog_countというエイリアスにします

※DATE_FORMAT 関数を使用すると引数に指定した日付を
指定のフォーマットで整形した文字列にして取得することができます

“`
->groupBy(DB

元記事を表示

投稿アプリで本人以外が記事を削除できなくする (Laravel)

## はじめに
Laravel学習の一環でBreezeを利用した簡単な記事投稿アプリを作成しました。
その際、投稿した本人以外が記事を編集・削除できないようにする機能を実装してみたので、備忘のため記事に残します。

## 完成イメージ
投稿した本人の場合 → 編集・削除ボタンが表示される
![スクリーンショット 2024-09-01 19.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362317/93182f55-f314-b928-a983-3545a0367a58.png)

投稿した本人**以外**の場合 → ボタンが表示されない
![スクリーンショット 2024-09-01 19.19.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362317/e37fb7a5-5de7-9d3e-3985-30f83564ccd5.png)

## 実装フロー
1. ビューに記事の投稿者を確認するロジッ

元記事を表示

steamのAPIを使用して積みゲーを調べてみた.

まず前提条件としてsteamのAPIを使用するにはsteamの商品をある一定の金額以上購入している人しか使えないみたい.
APIの登録は下記のリンクから可能です.

https://steamcommunity.com/dev/apikey

登録が終わったら登録したドメインから下記のソースコードを実行します.
なお、コンフィグ値はご自身にあった値へ変更してください.

https://github.com/taoka3/steam

“`php:steam.php
APIKEY,
‘steamid’

元記事を表示

Laravel × Vue チュートリアル with PokeAPI(ポケモン)

# はじめに
初心者向けのチュートリアルとして Laravel 11 と Vue 3 を組み合わせたアプリケーションを作成する方法を説明しています。

また、本記事では Vue 3 の記法として Options API を用いて記述しております。
Options API は Vue 2 の記法と同じであり、少し手順を変更すれば Vue 2 を用いたチュートリアルとしても活用できると考えたためです。

# 完成イメージ
ポケモンのデータを取得できる無料のAPI「PokeAPI」を用いて、ポケモンの一覧を表示します。また、お気に入りのポケモンを登録/解除できる機能を作成し、気になるポケモンに目印を付けることを可能とします。

# 前提条件
– Docker が使用できる状態であること

# 用いる技術
– PHP 8.3

元記事を表示

【Laravel】ファイル拡張子のバリデーションを実装する際の注意点

# はじめに
Laravelでアップロードされたファイルの拡張子をバリデーションする`mimes`ルールに
ついて、誤った認識をしていたため忘れないよう記事にしました。

# 結論
`mimes`ルールは拡張子をみているわけではなくファイルの内容を読み取って取得したMIMEタイプをみているため注意が必要。

(ドキュメントをしっかり確認するべきでした。。)
>ファイルは、リストする拡張子のいずれかに対応するMIMEタイプを持っていることをバリデートします。

# 実験
.txtファイルを許可するバリデーションに、SQLが書かれた`hoge.sql`をアップロードして`$validator->errors()->first(‘file’)`にエラーメッセージが入っているか確認します。

“`php:TestRequest.php
class TestRequest extends FormRequest
{
public function rules()
{
return [
‘file’ => [

元記事を表示

【Laravel】【PHP】トレイト(Trait)を活用して実装を再利用する

# はじめに

今回はPHPに実装されている
 **トレイト(Trait)**
と呼ばれる仕組みについて記載してみました。

# トレイト(Trait)とは

以下、PHP公式ドキュメントでの説明が下記となります

> PHP は、コードを再利用するための「トレイト」という仕組みを実装しています。
>
> トレイトは、PHP のような単一継承言語でコードを再利用するための仕組みのひとつです。 トレイトは、単一継承の制約を減らすために作られたもので、 いくつかのメソッド群を異なるクラス階層にある独立したクラスで再利用できるようにします。 トレイトとクラスを組み合わせた構文は複雑さを軽減させてくれ、 多重継承や Mixin に関連するありがちな問題を回避することもできます。
>
> トレイトはクラスと似ていますが、トレイトは単にいくつかの機能をまとめるためだけのものです。 トレイト自身のインスタンスを作成することはできません。 昔ながらの継承に機能を加えて、振る舞いを水平方向で構成できるようになります。 つまり、継承しなくてもクラスのメンバーに追加できるようになります。

https

元記事を表示

Windows11でLaravelの環境構築してみた()

## 導入
こんにちは、こんばんは、おやすみなさい、**Twil3akine**です。

今回、純粋なWindows (=Dockerとかを使わず) にLaravel環境を構築(超助けてもらいながら)したので、備忘録と誰かの助けになればいいなと思い、残しておきます。

1. **php** の インストール
2. **Laravel** の インストール

という感じで行こうと思います。

## 1. php の インストール
1. phpのインストール

https://windows.php.net/download#php-8.3 に飛んでもらい、スレッドセーフの方で自身のバージョンにあうもの (= x64 or x86) を選んでダウンロードし、そのままダウンロードしたものを解凍してほしいのですが、個人的なおすすめは `C:\php` というディレクトリを新しく作ってそこに解凍するのをおすすめします。

2. PATH通し

PCの検索欄からコントロールパネル ->
コントロールパネルの右上の検索欄に「環境変数」で出てくる「システム環境変数の

元記事を表示

Laravel忘備録-カラムの文字数を変更するマイグレーション-

カラムの文字数を変更するマイグレーションファイルを作成する機会があったため忘備録として記録に残そうと思います。

# 想定するデータ

usersテーブル

“`
+—————+———————+——+—–+———+—————-+
| Field | Type | Null | Key | Default | Extra |
+—————+———————+——+—–+———+—————-+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| created_at |

元記事を表示

インクリメンタルサーチを実装してみた。

# はじめに
インクリメンタルサーチは、ユーザーが検索ボックスに入力するたび、検索結果がリアルタイムで更新される機能です。これにより、ユーザーは検索結果を即座に確認できるため、よりスムーズな検索体験を提供できます。本記事では、LaravelとjQueryを使用してインクリメンタルサーチを実装する方法を紹介します。

### 1. データベースの設定
まず、検索対象となるデータベーステーブルを準備します。今回は、usersテーブルを例に、ユーザー名やメールアドレスを検索対象とします。

### 2. ルートの設定
検索リクエストを処理するために、routes/web.phpにルートを追加します。

“`php
use App\Http\Controllers\UserController;

Route::get(‘/search’, [UserController::class, ‘search’])->name(‘user.search’);
“`
このルートは、検索処理を行うコントローラーにリクエストを転送します。

### 3. コントローラーの設定
次に、検索処理を行うコン

元記事を表示

多次元配列(多次元連想配列)をJSONに変換した際に想定外の変換がされる

## 事象
Ajax経由でテーブルから取得した多次元連想配列を`JSON`に変換したが、想定外の形式になってしまった。

## 変換する配列
`default_flg`の設定値を基準に、グループ化してから変換したい。
“`
Array
(
[0] => Array
(
[id_name] => aaa
[content] => aaaaaaaaaaaaaa
[default_flg] => 0
)

[1] => Array
(
[id_name] => bbb
[content] => bbbbbbbbbbbb
[default_flg] => 1
)

[2] => Array
(
[id_name] => ccc
[content] => cccccccccccccc

元記事を表示

142日目 PHP特有の記号まとめ 社畜♀

最近初めてPHPに触れる機会があり、見たことはあるけどどういう意味なんだろうと感じていたPHP特有の記号をまとめておきたいと思います。

PHP特有の記号を理解できたらPHPへの理解度も上がり、コードも読みやすくなると思います。

## 第2話《PHP初心者が学ぶPHP特有の記号》

### **`$`(変数)**

・**用途**:PHPでは、すべての変数が`$`記号で始まります。変数はデータを格納するために使用されます。

“`php:例:
$name = “John”; // 文字列型の変数
$age = 30; // 整数型の変数
“`

### **`::` (スコープ解決演算子)**

・**用途**:クラスの静的メソッドやプロパティ、定数にアクセスするために使用します。また、親クラスの静的メンバーにアクセスする際にも使われます。

“`php:例1:静的メソッドにアクセス
class Math {
public static function add($a, $b) {
return $a + $b;
}
}

e

元記事を表示

僕なりの Laravel のTips

# プロジェクト作成

sailで作成する(最新バージョンで作成される)

“`bash
curl -s https://laravel.build/プロジェクト名 | bash
“`

composerで作成する(バージョン指定するならこっち)

“`bash
composer create-project laravel/laravel プロジェクト名 –prefer-dist “^10.0”
cd プロジェクト名
composer require laravel/sail –dev
php artisan sail:install
sail up -d
“`

> バージョン9とBreezeは一緒に使わない。レイアウトがバグる。

以下のようなエラーが出る時があるが、composerのバージョンを最新にしてあげると解決する場合が多い

“`bash
The “https://repo.packagist.org/p2/carbonphp/carbon-doctrine-types~dev.json” file could not be downloaded: F

元記事を表示

WordPressをMVCモデルで構築する

## 動機
WordPressの特性上、ビルドイン関数で簡単に操作できるとはいえ、一つのファイルに全て詰め込んでしまうのもいかがなものかと感じたのがきっかけです。

テンプレートファイルを触っている時に、いつの間にか機能改善や追加などで膨れ上がっていることがあります。修正するのも一苦労で、どこにどういった処理が書かれているのかわからなくなることもあります。

そのようなことにならないよう、責務をしっかり分けたディレクトリ構成にしたいのが目標です。

## なぜMVCモデルなのか
アーキテクチャとして理解しやすかったからです。
それぞれ役割を分けファイル分割することでコードの見通しと責任が明確になります。

:::note
Viewについては、WordPressテンプレートファイルとみなします
:::

– **Model**
DB操作、ビジネスロジックを担う
– **Controller**
Viewへのデータ引き渡し、Modelへのデータ処理指示を担う
– **View**
ユーザーインターフェイス側(表示させる画面)を担う

## ディレクトリ構成
Viewについては各テンプレート

元記事を表示

PHPリフレクションを用いた動的メソッド呼び出し

# はじめに
業務でリフレクションを用いることがあったので、備忘録としてリフレクションの実装例を紹介する記事です。
PHPではリフレクションというものを利用することで、クラスのメソッドやプロパティに動的にアクセスすることが可能です。クラスやメソッドを動的に操作でき、状況に応じて異なるメソッドを呼び出したい場合に非常に役立ちます。

# リフレクションとは?
リフレクションは、クラスやメソッド、プロパティについてのメタ情報(プログラムの構造、特性、および挙動)を取得し、それを操作するPHPの機能です。PHPでは ReflectionClass や ReflectionMethod を使って、実行時に動的にクラスやメソッドを操作できます。

# 実装をしてみる
早速実装していきます。
本記事では、サービスとリポジトリを分割し、リフレクションを用いた動的メソッド呼び出しを実装する例を紹介します。

まず、リポジトリクラスで具体的なメソッドを定義し、それをサービスクラスからリフレクションで呼び出す設計を実装してみます。

#### リポジトリクラス
“`php

元記事を表示

【PHP】VS Codeで関数の一覧を表示させておく

## やりたいこと
関数が多くて探したい関数がすぐに見つからない!

phpの関数の一覧をVS Codeの左側に出しておいて
クリックしたらその関数に飛ぶようにしましょう。

## 拡張機能「PHP Intelephense」をインストール

[PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client
) をインストール

![スクリーンショット 2024-08-29 122106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3686263/97a3c049-aa16-7005-3f18-c131d98c5cd0.png)

## VS Codeの設定を調整

VS Codeの設定画面で「outline」と検索。
以下の画像でチェックが付いているもの以外はチェックを外す。

このチェックを外さないといらないデータが一覧に混ざってきます。

![ima

元記事を表示

OTHERカテゴリの最新記事