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

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

Laravelを日本語対応させる方法

Laravel Breezeなどでログイン機能を実装したはいい物の、日本語の設定方法がわからず困っている方に必見です。

【前提条件】
Laravel Breezeのインスチールをお願いします。

方法は2種類あり、それぞれ解説しますが2つ目の方がおススメです。

# 1つ目
①config/app.php を修正して、言語と時間を日本に変更しておく。
“`config/app.php
// ‘UTC’から’Asia/Tokyo’に変更
‘timezone’ => ‘Asia/Tokyo’,

// ‘en’から’ja’に変更
‘locale’ => ‘ja’,

// ‘en_US’から’ja_JP’に変更
‘faker_locale’ => ‘ja_JP’,
“`

②langディレクトリの作成
“`
# Laravel sailで環境構築をしている人向けコマンド
$ ./vendor/bin/sail php artisan lang:publish

# Laravel sail以外で環境構築をしている人向けコマンド
$ php ar

元記事を表示

PHP の clone について、後輩に口頭で説明したのに理解して貰えなかったので記事で説明する

別に記事での説明も上手ではないんですけど…説明スキルが欲しいです

# PHP の clone について

PHP の clone はシャローコピー(浅いコピー)です!

シャローコピー(浅いコピー)って何だ!?

## シャローコピー(浅いコピー)とディープコピー(深いコピー)

### シャローコピー

プリミティブプロパティの値(int, string, float, bool, …etc)は新しいオブジェクトに複製し、別アドレスを指します。

オブジェクトプロパティの値は clone 元のオブジェクトと同じアドレスを指します。つまり、clone 先のオブジェクトプロパティの値が書き換えられると、clone 元のオブジェクトプロパティの値も書き換わります。

### ディープコピー

プリミティブプロパティの値もオブジェクトプロパティの値も新しいオブジェクトに複製して、別アドレスを指します。

文字だけだと口頭と同様で意味わからないため、下記サンプルコードです。

### サンプルコード(clone 元のクラス)

“`php
namespace App\ValueObje

元記事を表示

エラーが怖い?それならSyntax Errorを「起こす」ことから始めよう

# はじめに
こんにちは! @RyoSakon001 です。[Fignny株式会社](https://fignny.co.jp/)でPython, PHP, TypeScriptのエンジニアとして働いています。
エンジニアとして業務を始めたての頃は、エラーにとにかく悩まされがち。そんなあなたにピッタリの情報をお届けできればと思います。

## こんな人に読んでほしい
– 駆け出しエンジニアの方
– 駆け出しWebデザイナーの方
– 育成担当ベテランエンジニアの方

## エラーの大半って、実はコレ
人括りに「エラー」と言っても、色々な種類があります。超〜アバウトに、大別してみます。

1. **Syntax Error**
1. **Undefined**
1. **その他**

その中で、1, 2番がおよそ8割を占めていると思います。そして、実は本当に難しい(可能性がある)のは3番だけで、1, 2番は初心者の方でも簡単に解決できてしまうのです。

## エラーへの恐怖心をなくすには、自分で「わざと」起こしてみること
**「最初は怖いけど、やってみると大したことなかった」** という経

元記事を表示

QRコード

“`php
use ZipArchive;
use Illuminate\Support\Facades\Storage;

public function createAndDownloadZip()
{
// ZipArchiveを作成してzipファイルを開きます
$zip = new ZipArchive;
$zipFileName = ‘archive.zip’;
$zipFilePath = storage_path(‘app/work/’ . $zipFileName);

if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
// QRコードのデータ
$qrCodeData = ‘https://example.com’;

// QRコードをjpgファイルとして作成して直接zipに追加します
$qrCodeFileName = ‘qrcode.jpg’

元記事を表示

バリデーションについて

Formを送信した際に内容が空だとエラー画面に移動してしまう際の対策

# バリデーションとは
テストとその後の生産で実行される手順、プロセス、または活動が、すべての段階で望ましいレベルのコンプライアンスを維持していることを証明する文書証拠を確立するプロセス。

https://en.wikipedia.org/wiki/Validation_(drug_manufacture)

https://readouble.com/laravel/11.x/ja/validation.html#quick-writing-the-validation-logic

大まかに言えば、内容が正しいかチェックすること
“`php
$validatedData = $request->validate([ルール],[カスタムメッセージ]);
“`

# コントローラー内にバリデーション追加
### ルールの追加
第1引数は、各フィールドに対するバリデーションルールの配列。
バリデーションの方法は数種あるが今回は簡単なcontrollerに直接書き込む方法でしてみる。
この方法だとcontroll

元記事を表示

webアプリ開発で意識したこと

# 初めに
https://qiita.com/opatu07/items/be0d5e38710ba0854fb4

この記事で書いていたWebアプリが完成したので、その開発過程で意識したことを紹介します。

# ソースコードと使い方
https://github.com/opatu07/portfolio

# webアプリ開発で意識したこと

## webアプリの品質を担保するために

テストケースを作成しました。

https://qiita.com/opatu07/items/ceba265b439e20839ab9

この記事から読めます

## エラー解決について

https://qiita.com/opatu07/items/117192d3c829903c846e

https://qiita.com/opatu07/items/d0ac1cf830e6145165e5

開発過程で出たエラーをqiitaにまとめるように意識をしています。

元記事を表示

PHP 8.3の新規機能と改善

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527282/5ae7029c-df9c-56d9-12e6-29a8afbf4f57.png)

# この記事について

PHPは、毎年恒例となっている新しいメジャーまたはマイナーバージョンのリリースを続け、2023年11月23日にリリースされたPHP8.3も例外ではありません。この新バージョンは、多くの新機能と改善を加え、PHPの汎用性と進化する言語としての地位をさらに固めています。

この記事では、PHP8.3に導入された注目すべき新機能を紹介します。

# 新機能

### クラス定数の型付け
クラス定数に型をかけるようになりました。

“`php

// valid
class TestClass {
const string MY_TEXT = ‘my text’;
}

// valid
interface TestInterface {
const string MY_TEXT = ‘my tex

元記事を表示

webアプリ開発 テストケース作成

# 初めに
webアプリ開発でデプロイする前に入力フォームが正しく動作するのかを確認するためにテストケースを作成しました。

# テストケース
## 1. 入力ができるかを確認
これは使われそうな入力内容で本当に入力できてデータベースに登録されるのかを確認するために実施しました。

実施箇所は
– ユーザー登録
– ログイン
– パスワードリセットメール登録
– パスワードリセット画面
– プロフィール情報の変更
– パスワード更新
– アカウントの削除
– 新規記事登録
– 記事の変更
– コメント

## 2. SQLインジェクション対策
入力フォームを使うのでSQLインジェクション対策で各項目に(INSERT INTO users VALUES (‘1’, ‘タカシ’);を入れてデータベースに不正なデータが入れられないかを確かめました。

実施箇所
– ユーザー登録
– ログイン
– パスワードリセットメール登録
– パスワードリセット画面
– プロフィール情報の変更
– パスワード更新
– アカウントの削除
– 新規記事登録
– 記事の変更
– コメント入力

## 3.XSS

元記事を表示

PHPにおけるシグネチャ

PHPにおけるシグネチャは、主に以下の2つの意味があります。

**1. 関数シグネチャ**

関数シグネチャは、**関数の名前、引数の型と数、返り値の型**を定義する情報です。関数シグネチャは、以下の構文で記述されます。

“`php
function 関数名(引数リスト): 返り値の型 {
// 関数本体
}
“`

**例:**

“`php
function calculateSum(int $num1, int $num2): int {
return $num1 + $num2;
}

$sum = calculateSum(10, 20);
echo $sum; // 30
“`

関数シグネチャは、以下の役割を果たします。

* **関数の識別:** 関数名を指定することで、関数を識別することができます。
* **引数の型チェック:** 引数の型を指定することで、引数の型が正しいことをチェックすることができます。
* **返り値の型チェック:** 返り値の型を指定することで、返り値の型が正しいことをチェックすることができます。
* **コードの可読性向上

元記事を表示

PHPにおけるセッションの仕組み

PHPにおけるセッションは、**サーバ側でデータを一時的に保存し、複数のページにわたって共有する仕組み**です。具体的には、以下の流れで処理されます。

1. **セッション開始:**
– `session_start()` 関数を呼び出すことで、セッションを開始します。
– セッションが開始されると、セッションIDと呼ばれる一意の識別子が生成されます。
2. **セッションデータの保存:**
– `$_SESSION` スーパーグローバル変数を使用して、セッションデータにアクセスできます。
– `$_SESSION` 変数には、キーと値のペアでデータを格納することができます。
3. **セッションデータの取得:**
– セッションデータは、`$_SESSION` 変数を使用して取得できます。
– キーを指定して、対応する値を取得することができます。
4. **セッションの終了:**
– `session_destroy()` 関数を呼び出すことで、セッションを終了します。
– セッションが終了されると、セッションデータ

元記事を表示

PHPにおけるビルトイン関数とユーザー定義関数

### ビルトイン関数

PHPには、あらかじめ用意されている関数が多数存在します。これらは**ビルトイン関数**と呼ばれ、言語仕様の一部として定義されています。開発者は、これらの関数を自由に利用することができます。

ビルトイン関数は、以下の利点があります。

* **すぐに使える:** インストールや設定などの手間をかけずに、すぐに利用することができます。
* **標準化されている:** すべてのPHP環境で同じように動作するため、移植性が高いです。
* **幅広い機能:** 文字列処理、数値処理、ファイル操作、データベース操作など、様々な機能を提供しています。

代表的なビルトイン関数としては、以下のようなものがあります。

* `strlen()`: 文字列の長さを取得する
* `strpos()`: 文字列中の部分文字列を検索する
* `file_get_contents()`: ファイルの内容を読み込む
* `mysql_connect()`: MySQLデータベースに接続する

### ユーザー定義関数

ビルトイン関数に加えて、開発者自身が**ユーザー定義関数**を作

元記事を表示

FuelPHP の migrate Task

# 概要
FuelPHP では Database の Migration は `migrate` Task を用いて行う
`migrate` Task にはいくつかのコマンドとオプションが用意されている

また FuelPHP の Migration File は `fuel/app/migrations/nnn_xxx.php` のフォーマットとなっており
`nnn` にはバージョン番号、`xxx` には Class 名が入る
基本的には `nnn` も `xxx` も同じ値は利用してはならない

もし被ってしまった場合
`nnn` は `php oil refine migrate:current` や `php oil refine migrate –catchup` を利用することで同じバージョンでも実行可能
`xxx` は `php oil refine migrate:up` や `php oil refine migratre:down` で1件ずつ処理するなどして、同じ Class を読み込まないようにすることで実行可能

またバージョン (`nnn`) は3桁である

元記事を表示

【覚え書き】AlmaLinux9.3でのLAMP環境構築手順(Apache+MariaDB+PHP)

## はじめに
CentOS Linux 7 は、2024 年 6 月 30 日にサポート終了 (EOL) となります。この後継としてAlmalinuxを選ぶことが多くなってきました。そこで現時点の最新のAlmalinux9のインストール後の初期設定とLAMP環境構築手順を、備忘録的に記しておきたいと思います。

## 構築するLAMP環境
L: AlmaLinux 9.3 (Shamrock Pampas Cat)
A: Apache/2.4.57 (AlmaLinux)
M: mysql Ver 15.1 Distrib 10.5.22-MariaDB
P: PHP 8.3.6

## この手順を始める前の前提
* 物理サーバーもしくは仮想サーバーへは、AlmaLinux9.3 がインストール済みであること
* インストール時に、言語を「日本語」に設定済みであること
* インストール時に、ネットワーク設定済みであること
* インストール時に、NTP設定済みであること

## 1. dnfまわり
### 1-1. メタデータキャッシュの作成
“`ba

元記事を表示

dependabot の pull request が作成されない事象の対応(PHP)

## 記事対象者
dependabot の 諸々の設定は完了しているが、 Pull request が作成されない状況になっている方

## 解決方法

composer.json に phpのバージョン情報が記載されていない可能性がある。

composer.json に以下のようにphpのバージョン指定を行う。

“`
“require”: {
“php”: “^8.1”,
.
.
“`

参考: https://github.com/dependabot/dependabot-core/issues/5301#issuecomment-1851597423

元記事を表示

ウィキペディアのAPIを取得するPHP雛形

### ウィキペディアのAPIを取得するPHP雛形です.
ご自由にコピペ可変してお使いいただければと思っています.
なお、制作するに当たって下記を参考にしています.

https://qiita.com/yubessy/items/16d2a074be84ee67c01f

“`php:classWikipediaApi.php
‘記事タイトルを入力してください’], JSON_UNESCAPED_UN

元記事を表示

PHPでundefinedになる組み合わせをChatGPTに聞いて表形式でまとめてもらう。

# 経緯
PHPでundefinedになるパターンをいつも頭の中では何となくしか覚えていない状態でした.
そこで今回ChatGPTで表形式にしてもらいました。
※ChatGPT4による回答のためある程度精度が高いとは思いますが間違っている場合もありますので、ご了承ください。

## undefinedになる組み合わせ
| ケースタイプ | コード例 | 結果 |
|——————————-|—————————————|————————————-|
| 未定義の変数にアクセス | `$value;` | Notice: Undefined variable: value |
| 配列の未定義の

元記事を表示

【WordPress】wp_enqueue_scriptにtype=moduleやasyncを追加する方法

# はじめに

wp_enqueue_scriptを使うと、scriptタグの書式が固定されてしまいます。
type=module/async/deferなどを追加する方法を解説します。

# 解決方法

下記をfunctions.phpに追記しましょう。
下記の例だと、hogeとpiyoのみmoduleで読み込むことができます。
スクリプトタグの修正箇所にasyncなどの文字列を追加して、別のパラメーターを付与することもできます。

“`functions.php

// スクリプト読み込み
wp_enqueue_script(‘hoge’, __DIR__ . ‘js/hoge.js’, [], ‘1.0.0’, true);
wp_enqueue_script(‘fuga’, __DIR__ . ‘js/fuga.js’, [], ‘1.0.0’, true);
wp_enqueue_script(‘piyo’, __DIR__ . ‘js/piyo.js’, [], ‘1.0.0’, true);

function add_type_attribute($tag, $han

元記事を表示

laravelのsailでseeder作成/実行してデータを投入する

# 環境
php 8.3.6
laravel Framework 11.4.0
composer 2.7.2

# seeder作成
“`
./vendor/bin/sail php artisan make:seeder MasterAiChatSeeder
“`
/database/seeders/MasterAiChatSeeder.phpのファイルを修正
“`
‘reactは勉強中です’],
[‘chat’ => ‘laravelもやっています’],

元記事を表示

Laravel × MongoDB

# 初期設定

1. ComposerでMongoDBのドライバをインストールします。

“`plaintext
$ composer require jenssegers/mongodb
“`

2. config/database.phpファイルで、connectionsへMongoDB接続用の新しい接続を追加します。

“`php
‘mongodb’ => [
‘driver’ => ‘mongodb’,
‘host’ => env(‘MONGO_DB_HOST’, ‘localhost’),
‘port’ => env(‘MONGO_DB_PORT’, 27017),
‘database’ => env(‘MONGO_DB_DATABASE’),
‘username’ => env(‘MONGO_DB_USERNAME’),
‘password’ => env(‘MONGO_DB_PASSWORD’),
],
“`

3. `.env`にMongoDBへの接続情報を書き加えます。\
“`plainte

元記事を表示

【Laravel】日付処理で混乱した話

# 概要
EloquentモデルのオブジェクトをtoArray()すると **日時が9時間前になってしまう**

Hogeテーブル

id

..

updated_at

1

2021-06-24 17:50:31

2

2021-06-24 17:50:31

3

2021-06-24 17:50:31

“`php:コード例
$result = HogeModel::first()->toArray();
var_dump($result); // “updated_at” => “2021-06-24 17:50:31″を想定
“`

“`php:実行結果
array(1) {
[“updated_at”]=>
string(27) “2021-06-24T08:50:31.000000Z” //

元記事を表示

OTHERカテゴリの最新記事