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

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

【Laravel】Illuminateにある主要メソッド Cookie編

## はじめに
Laravelでよくでてくる“Illuminate\~\~“って結局何だ?!と思いメソッドをまとめました。

### 言語
– Laravel8

## Illuminateとは
– Laravelが提供する様々なサービスやコンポーネントを構成するための基盤を提供している。
– サービスやコンポーネントは“Illuminate“名前空間内に整理されている

### どこにあるか?
**“プロジェクトディレクトリ\vendor\laravel\Framework\src\Illuminate\~“**

## Illuminate\Cookie
– クッキー操作を管理するためのクラスがある。
:::note
Cookieとは、、、
初めてアクセスしたWebサイトに、訪問したユーザーを識別できる情報が保存されること
:::

## Illuminate\Cookie\Cookiejar
– “Cookiejar“クラスでクッキーの作成、取得、削除などの操作を行うメソッドがある

### “make($name, $value, $minutes = 0,

元記事を表示

PHPコア開発者になって半年経ったので、php-srcでの活動を振り返る

こんにちは!PHPとCを主に書いています、Sakiです。日中はBASE株式会社さんでお仕事させていただいています。早朝と夜間にphp-srcでの活動をしています。PHP8.4のリリースマネージャーもやってます。

2024年からありがたいことにPHPコア開発者として採用していただき、半年とちょっとになりました。ちょうど一区切りということで、これまでの活動を簡単にまとめたいと思います。細かいものや、最終的に成果が出なかった(議論がまとまらなかったなど)ものは除外しています。
# 2023年、コア開発者になる前
実は私はphp-srcどころかOSSの経歴がかなり短いです。
## はじめてのコントリビュート
PHP8.1から、PDO MySQLでmysqlndをドライバとして使用し、`PDO::ATTR_EMULATE_PREPARES`が`true`の場合、PHPのネイティブタイプで値が返される、というように仕様が変更されました。従来の動作を望むなら`PDO::ATTR_STRINGIFY_FETCHES`を`true`にしてね、とドキュメントには記載されています。

ところが、(すでにM

元記事を表示

押さえておきたいセキュリティと対策!

こんにちは!もうすぐ3年目を迎える受託系企業で働くガッキーです。
2年目のうちに知っておかなきゃいけない知識とか実装とか焦りながら考えていたら、
まず思い浮かんだことがセキュリティだったので書いてみました!

# なぜセキュリティを守らなければならないのか!?

そもそもなぜセキュリティを確保しなければならないのか?

– 第三者への情報漏洩
– 情報の改ざん
– 第三者による不正な利用

これらを確保せずアプリケーションを確保すれば、
利用者への被害が拡大しアプリの信頼が失われ、会社経営への影響が出てきてしまうのです。

さっそく押さえておきたいセキュリティを見ていきましょう!

# 1.SQLインジェクション

:::note info
SQLインジェクションとは?

入力フォームにSQL文を入力し送信することでデーターベースの改ざんや取得がされてしまうものです。
:::

不正なselect・delete・update文を入力することで、
そこから個人情報が流失し、ユーザー情報が改ざんされ様々な問題に発展します。

例えば、ログイン画面のID・PWフォームに以下のような値を

元記事を表示

laravelでthe stream or file /var/www/html/storage/logs/laravel.logエラーが出たときの対処

# docker環境でローカルホストを開いたときに`the stream or file /var/www/html/storage/logs/laravel.log`(以下略)というエラーが表示された

# エラーの意味
大まかな意味としてはlaravel上でログファイルへの書き込みが失敗していますよ〜という意味らしい。

# 考えられる原因

・**パーミッションの問題**:ログファイルのパーミッションが正しく設定されていない。Webサーバーのユーザー(例えば、ApacheやNginxなど)が書き込み権限を持つ必要がある

・**ログファイルが存在しない**:そもそもログファイルが存在していない場合。

上記の2点が原因として考えられると思いますが今回はエラーメッセージに`permission denied`と表示されていたのでパーミッションの問題かと考えられます。ログファイルも(storage/logs)にしっかりと存在していました。

# 対処法

### 1.ターミナル(プロジェクト直下)で`sudo chmod o+w ./storage/ -R`を入力

### 2.続け

元記事を表示

【Laravel】Illuminateにあるメソッド Auth編

## はじめに
Laravelでよくでてくる“Illuminate\~\~“って結局何だ?!と思いメソッドをまとめました。

### 言語
– Laravel8

## Illuminateとは
– Laravelが提供する様々なサービスやコンポーネントを構成するための基盤を提供している。
– サービスやコンポーネントは“Illuminate“名前空間内に整理されている

### どこにあるか?
**“プロジェクトディレクトリ\vendor\laravel\Framework\src\Illuminate\~“**

## Illuminate\Auth
– 認証システムを管理するためのクラスがある。

## Illuminate\Auth\AuthManager

– “AuthManager“クラスは認証の設定とドライバの管理を行う

### “guard($name = null)“
– 指定した認証の方法を取得する
“`Laravel
$user = Auth::guard(‘admin’)->user();“
“`

##

元記事を表示

【PHP】2024年のPHP開発者を支える中心人物たちを勝手に紹介するよ

PHPの隆盛を支えてきた開発者は非常にたくさん存在しますが、その中でも最近のPHPを支えている中心の有力者たちを紹介します。

選択の基準ですが、[PHP Foundation](https://thephp.foundation/)の[Structure](https://thephp.foundation/structure/)に載っている人です。
他にも紹介したい人はたくさんいるのですが、きりがないですし、そもそも私はPHP言語開発者たちやコミュニティと一切関わりのない全く無関係な人間なので勝手に選抜するのもなんだかなあということでやめておきます。

# PHP Foundationとは

まずPHP Foundationって何なのかという話ですが、ここ数年PHP言語の発展を支えている団体です。

実は長らくの間PHP言語は、言語自体を支えている団体がおらず、ボランティアの個人が集まって開発が進められていました。
これは言語としてはかなり特異な状態であって、たとえばPHPと同列に語られがちなLLを見てみると、Rubyには[Ruby Association](https://ww

元記事を表示

PHPでSSL関連のエラーでハマった件

CentOS7からUbuntu24.04にサーバーを入れ替えたところ、以下のエラーで悩んだ!
`Warning: getimagesize(): SSL operation failed with code 1. OpenSSL Error messages:
error:0A000086:SSL routines::certificate verify failed in ・・・/tcpdf_images.php on line 166`

php.iniの[openssl]セクションに
`openssl.cafile=/etc/ssl/certs/SectigoRSADomainValidationSecureServerCA.crt`を追加してもダメ
`/usr/lib/ssl/openssl.cnf`にlegacy_sect追加してもダメ

散々ググって、やっと[これ](https://serverfault.com/questions/1118578/ubuntu-cannot-verify-sectigo-certificate)見つけて解決

`# cp /et

元記事を表示

【Laravel】抽象メソッドとは

## 抽象メソッドとは
抽象クラスの中で定義されるメソッド。
抽象クラスは、他のクラスに継承されることを前提としている。
子クラスは必ず抽象メソッドを実装しなければならないため、特定のメソッドが常に存在することを保証できる。

`abstract`は「このメソッドは抽象メソッドである」という意味。

具体的なロジックはこの抽象メソッドを実装するサブクラスに委ねられる。
“`php
abstract class Animal {
//抽象メソッドを定義
abstract public function makeSound();
}

class Dog extends Animal {
public function makeSound() {
return ‘Bark’;
}
}
“`

## 使う場面
– 共通のインターフェースを強制し、子クラスが必ず特定のメソッドを実装する必要がある
– 共通の基本機能を持ち、それを派生クラスで具体的に実装する必要がある

元記事を表示

php8+phalcon5+nginx+windows10 環境構築メモ

初見のphalcon環境構築時に少々手こずったので備忘として残します。
まずphalconの情報が思いのほか少なかった(シェアがそこまでないからかも)
私自身の経験不足が原因と捉えていますが、似たようなエラーに苦戦中の方の救いになればと思います。
#### 本件に関係しそうな環境諸々は以下の通り
– php 8.1.8
– phalcon/devtools 5.0.x-dev
– nginx 1.27
– mysql 5.7
– windows10
– docker desktop 4.31.1
– git for windows 2.43.0
#### docker インストール
“`
$ docker-compose -f .docker/docker-compose.yml up -d –build
$ docker exec -it xxxxx bash
$ composer install
“`
※必要最低限のみ記載するので適宜変更してください。
#### phalconインストールで問題発生
Dockerfileは以下の通り(ChatGPTに聞けば出てくるような内容な

元記事を表示

初めての個人開発

## 概要
このプロジェクトは、タスク管理と生産性向上を目的としたウェブアプリケーションです。ユーザーは、タスクの作成・管理ができ、ポモドーロタイマーを使用して作業時間と休憩時間を効果的に管理することができます。ログインすることで、タスクや設定の情報を長期的に保持でき、統計情報の取得もできます。ログインせずに、ゲストユーザーとしても使用できます。また、Youtubeのプレイヤーが埋め込まれており、お気に入りの再生リストを再生することが可能です。

## 背景
私の友人は休日に個人開発を行っています。一人で作業する環境では作業と休憩が曖昧になりがちです。作業の途中で他のことに目移りしてしまったり、休憩の時間が長引いてしまったりと集中力の維持が難しくあります。特に作業中でも休憩中でも、動画を流し好きな音楽を聞いていたりすると途中で動画サイトが気になりいつの間にか動画を見続けてしまうこともあります。 私も現在一人での学習時間が多いため、共感できる部分が多くありました。そのため、これらの問題を解決することで効率よく作業を進められるようにしたいと思ったからです。

## 要件
* タスク管理機能

元記事を表示

配列同士の共通部分を見つける

## array_intersect()

– 配列の共通部分を見つけるために使用される
– 複数の配列を渡すことで、それらの配列全てに共通する要素を抽出できる
– 結果の配列のキーは、最初の配列のキーを保持する

### 使用例

“`php
// 配列を定義
$array1 = array(“a” => “green”, “b” => “brown”, “c” => “blue”, “0” => “red”);
$array2 = array(“a” => “green”, “0” => “yellow”, “1” => “red”);

// 共通する値を持つ要素を取得
$result = array_intersect($array1, $array2);

// 結果を出力
print_r($result);

“`

### 出力
“`php
Array
(
[a] => green
[0] => red
)
“`

## array_intersect_key()

– 2つ以上の配列のキーに基づいて交差(共通するキーの要素)を返す
– 最初の

元記事を表示

【Laravel】CSVファイルの中身にバリデーション(maatwebsite/excel)

以前にCSVファイルをインポートする記事を書きましたが、今回はCSVファイルの中身にバリデーションチェックをかける方法について書きたいと思います。

前回のCSVファイルインポートの記事はこちらです。

https://qiita.com/programmer502/items/1c624d494392d2e37083

## やりたいこと

前回と同様に、下記のようなCSVデータをアップロードします。

“`
企業名,郵便番号,住所,電話番号,代表者名,担当者名,備考
テスト02株式会社,2203456,埼玉県上尾市井戸木,090-4736-0924,佐藤,中島,テストです
“`

– 備考以外はすべて必須項目
– 企業名は一意な値としたい

## Importクラスの作成

– インターフェイスにwithValidationを追加(useで読み込みを忘れずに)
– rulesメソッドでバリデーションのルールを設定
– customValidationMessagesメソッドでメッセージをカスタマイズする

以上を反映させたコードが下記です。

app/Imports/Compa

元記事を表示

【PHP】PHP7.4から8.1にバージョンアップしてみた

## はじめに

プロジェクトのPHPのバージョンを7.4から8.1にバージョンアップする作業を行いました。

今回のバージョンアップ作業で学んだ手順や考慮するべき点についてまとめていきたいと思います。

## この記事でやること

PHP7.4から8.1にバージョンアップする。

## 環境
– EC2を利用しています
– OSイメージ:Amazon Linux 2 Kernel 5.10
– PHPのバージョン: PHP 7.4.33 (cli)
– PHPUnitのバージョン: 9.5.28
– CakePHPのバージョン: 4.2.12
– nginx: nginx/1.22.0
– php-fpm: PHP 7.4.33 (fpm-fcgi)

## 事前調査・準備

### バージョンアップに関する情報を集める

#### PHP

PHPの各バージョンはリリースから3年間サポートされます(2年間のアクティブサポート+セキュリティサポート1年)が、PHP7.4はセキュリティサポートが2022年11月28日で終了しているため、今後の保守を考えてPHP8.1へのバージョ

元記事を表示

【PHP】Enumでの検証を簡単にする

## PHPのEnumでの検証
以下のようなEnumがあるとしたとき
“`php
enum Test: string
{
case Test1 = ‘test1’;
case Test2 = ‘test2’;
case Test3 = ‘test3’;
}
“`
検証の際いちいち
“`php
if ($test === Test::Test1) {}
“`
みたいなことを書くと可読性が悪くなる気がしたので

以下のようなトレイトを用意して
“`php
trait EnumIsTrait {
public static function tryFromName(string $name)
{
foreach (self::cases() as $case) {
if ($case->name === $name) {
return $case;
}
}
return null;
}

p

元記事を表示

【PHP】Fizz Buzz (paizaランク C 相当)をやってみた

https://paiza.jp/works/mondai/c_rank_skillcheck_sample/fizz-buzz

以下に、与えられた問題に基づくPHPプログラムを作成しました。このプログラムは、1からNまでの整数を順に表示し、条件に応じて特定の文字列を表示します。

“`php

元記事を表示

【PHP】正規表現でハッシュタグを抽出したい

### 環境
“`
$ php -v
PHP 8.3.8 (cli) (built: Jun 4 2024 14:53:17) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.8, Copyright (c) Zend Technologies
with Zend OPcache v8.3.8, Copyright (c), by Zend Technologies

$ php artisan –version
Laravel Framework 11.10.0
“`

### 困ったこと
趣味で開発しているアプリでハッシュタグを扱いたい!となり、文章から正規表現でハッシュタグを抽出する処理を実装するにあたりたくさんのサイトを参考にさせていただきました。

例えばこんな感じ。
“`php
$value = ‘#思い出 この本は図書館で大人気でした。 #ウォーリーを探せ ’;
$matches = [];
preg_match_all(
‘/(?<=\s|^)#\S+/', $value,

元記事を表示

Laravelにおけるサロゲートキーと自然キーについて

## 1. はじめに

ふとしたことで自然キーとサロゲートキーについて知る機会がありました。Laravelではどのような扱い方をしているのか気になって調べてみました。

## 2. 対象読者

– Laravel利用者
– テーブル設計者

## 3. 目次

– [1. はじめに](#1-はじめに)
– [2. 対象読者](#2-対象読者)
– [3. 目次](#3-目次)
– [4. 自然キーとは](#4-自然キーとは)
– [5. サロゲートキーとは](#5-サロゲートキーとは)
– [6. Laravelにおけるサロゲートキー](#6-laravelにおけるサロゲートキー)
– [6-1. カスタムサロゲートキーの設定](#6-1-カスタムサロゲートキーの設定)
– [6-2. サロゲートキーを使用しない場合の主キーの設定方法](#6-2-サロゲートキーを使用しない場合の主キーの設定方法)
– [7. さいごに](#7-さいごに)
– [8. 参考サイト](#8-参考サイト)

## 4. 自然キーとは

自然キーとは、業務上の意味を持つデータ項目を使用してレコードを一

元記事を表示

【Laravel】メソッドインジェクションを利用してCookieの値を偽装する

前回の続きです。

https://qiita.com/KyongminS/items/c9be3334cc8a6189f25e

今回紹介するユースケースとしては、

**テストしたいCookie処理を含むメソッドがサービスファイルに存在しており、そのメソッド使用しているcontrollerのURLを呼ぶと色々副作用がありそうで面倒くさそうなので、そのメソッド単体を呼び出せるようにしてテストしたい**

というケースです。

Cookie関連の処理を含むメソッドは、Cookieの特性上、URLリクエストを通してテストする必要があります。

この方法で取得されるCookieは暗号化されているので、暗号化処理のミドルウェアを無効にします。use で WithoutMiddleware をインポートすると他のミドルウェアも無効になってしまうので、以下の記述を対象のテストケースの先頭に書きます。

“`php
$this->WithoutMiddleware(\App\Http\Middleware\EncryptCookies::class);
“`

テストしたいメソッドは以下です。

元記事を表示

【Laravel】メソッドインジェクションを利用してRequestを偽装しよう!

Laravelでリクエストを受け取ってゴニョゴニョしているメソッドをテストしたいとき、役に立つのが**メソッドインジェクション**です。
ここでは詳しく話しませんが、「サービスコンテナ」で調べると色々情報が出てきます。

https://laravel.com/docs/11.x/container

(Laravel8ですが)

https://readouble.com/laravel/8.x/ja/container.html

今回はこのメソッドインジェクションを利用して、`Request::xxx()` 系の処理をテストする方法を紹介したいと思います。

## Request::root

`Request::root()` と `request()->root()` の出力は一緒です。

“`php
$this->assertEquals(
request()->root() . “/sample”,
Request::root() . “/sample”
);
# => OK
“`

## Request::get

リクエスト偽装の方法として、`Re

元記事を表示

WordPressで自前のAPIを作成する方法

# 結論
`rest_api_ini` フィルタを使おう。
ついでに勝手に使われるといけないので以下のフィルタを使って、認証処理も実装しましょう。
– `determine_current_user`
– `rest_authentication_errors`

# 作成するエンドポイント
“`
https://ブログドメイン/wp-json/myapi/v1/helloWorld
“`
# コード
“`php:完成系
// 使いたいAPIの中身を書こう
function helloWorld()
{
echo ‘Hello World!’;
}

// 自作のAPIを作る
add_action(‘rest_api_init’, function () {
register_rest_route(‘myapi/v1’, ‘/hello’, array(
‘methods’ => ‘GET’,
‘callback’ => ‘helloWorld’,
‘permission_callback’ => function ()

元記事を表示

OTHERカテゴリの最新記事