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

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

Laravel 11🐲🐉がリリースされたのだ🎉【Laravel 11 新機能・変更点】

https://twitter.com/taylorotwell/status/1764760671311335798

Laravel 11がきました!ぺちぱーとララベラー歓喜!新機能を紹介します

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

# Laravel 11のインストール
Laravel 11はPHP8.2以上が必要です
“`bash
composer create-project –prefer-dist laravel/laravel hello-world dev-master
cd hello-world
“`

# 合理化されたアプリケーション構造

Laravel 11 では、既存のアプリケーションに変更を加えることなく、新しいLaravel アプリケーション向けに合理化されたアプリケーション構造が導入されています。新しいアプリケーション構造は、Laravel 開発者がすでによく知っている概念の多くを保持しながら、より無駄がなく、より現代的なエクスペリエンスを提供することを目的としています。以下では、Laravel の新

元記事を表示

Boolean-based Blind SQL Injectionについて

# 背景

先日参加したCTFでこの脆弱性を使用して解く問題が出たのでこれを機に記事を書きます。

# Boolean-based Blind SQL Injectionとは

`Blind SQL Injection`の一つで、真偽値を使用して情報を取得する攻撃を指す。

https://jvn.jp/ta/JVNTA99929369/

https://www.acunetix.com/websitesecurity/sql-injection2/

# 具体的な攻撃手法

CTFの問題を再現しつつ手法を解説していきます。

CTFの問題
>adminユーザーのパスワードを特定せよ。

## 脆弱なアプリケーション

SQLインジェクションの脆弱性があり、ログインが成功した場合は`Login successful!`、失敗した場合は`Login failed!`を返すアプリケーションです。
今回`admin`のパスワードは`Th1s_is_4dmin_flag!`になっています。

“`
mysql> select * from users;
+—-+———-+-

元記事を表示

【PHP】”switch”の代わりに”match式”を使おう!match式のいいところ5選

# 初めに
**こんにちは!元Javaエンジニアの駆け出しPHPerです!**

最近、PHPには**match式**なるものがあることを知りました。switchよりも便利だと感じたので、今回はmatch式についてまとめていきます。

# match式とは
PHP8.0で追加された**式**です。
switchと似たような使い方ができます。

“`php
$food = ‘cake’;

match ($food) {
‘apple’ => print ‘This food is an apple’,
‘bar’ => print ‘This food is a bar’,
‘cake’ => print ‘This food is a cake’,
};

// This food is a cake
“`
https://www.php.net/manual/ja/control-structures.match.php

# match式のいいところ
続いてmatch式のいいところを紹介します。
switchと比較しながら見ていきましょう。

## 1

元記事を表示

Livewire: Multiple root elements detected.

Livewireで開発中、wire:clickを設定したボタンが全く反応しない。
開発者ツールを見ても、普通だったらEVENTが付くはずが付かない。
(Firefoxの開発者ツールだと、「livewire:ほにゃらあ」を設定すると、JSのEVENTが設定される)

開発者ツールのコンソールを除くと

“`
Livewire: Multiple root elements detected. This is not supported.
See docs for more information
https://laravel-livewire.com/docs/2.x/troubleshooting#root-element-issues
“`
と出ていた。
 複数のroot要素?
 それはサポートされていません?

なんとなくこれ系のエラーはlivewireに担当させるblade側のHTMLのしでかしだな・・と
(livewireに担当させるblade = render()内のreturn view()で指定したblade)
思ったので、HTMLタグをキレイにタブでインデント

元記事を表示

エンジニア未経験が初めてイベントに参加した話 〜SimDev WebApp by DONUTS〜 備忘

## 概要
DONUTSと一般社団法人未完の共同開催のオフラインイベントに参加してきました
学習したこと・感想などの備忘録的です

参加したイベント

https://connpass.com/event/309297/

##

## イベント概要
ビジネス要件をもとに参加者で要件定義〜開発までのフローを体験できるハンズオン研修で要件定義・設計(DB設計、画面設計)、開発を2〜3名のグループに分かれて要件に沿った開発を進めていこー的な内容でした。
作成するものは、勤怠管理システムで言語はphp、研修は2日間の開催で参加者8名でした。
イベントを見つけた時に、phpでの学習経験が無かったり開発の学習はやっていたものの1年くらいしてなかったことやイベント自体参加したこと無かったので躊躇していましたが、開発体験できるっぽいし現役のエンジニアさんが教えてくれるみたいだし初学者向けの内容みたいだし、何より楽しそう!と深夜テンションのノリで参加を決めました!

## 学習内容 1日目
### 【要件定義】
設定されたビジネス要件を満たすために、どのような機能が必要か、画面はどのように作成し

元記事を表示

エックスサーバーの無料独自SSLをサイト移転前に設定する方法

エックスサーバー・スターサーバーの無料独自SSL設定をサイト移転前に設定し、SSLで接続できなくなる問題を回避する方法を紹介します。

※スクリーンショットはスターサーバーの管理画面ですが同じ業者であるエックスサーバーでも同様に設定可能です。

※ これは2019-01-01に個人ブログで公開した記事を移植したものです。

## サイト公開しないと無料独自 SSL 設定ができない

当ブログはMixHostからスターサーバーへ移転しました。移転時に一番問題だと感じたのが、サイトをスターサーバーで公開しないと無料独自SSL設定ができないため、一定時間SSLが使用できないというダウンタイムが存在してしまうことでした。

スターサーバーにドメイン追加後、SSL設定より「無料独自SSL追加」を行ってもエラーが発生したと表示され設定ができません。

![スターサーバー管理画面の無料独自SSL追加時にエラーが発生](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/16fa4e63-498a-c278-c4af-

元記事を表示

初めてのPHP #1

昨日勉強した内容のアウトプット目的です。昨日paizaのスキルチェックテストをプレイして2時間くらいかけて正解しました。

`fgets`は複数の意味のある変数? 分解?してやる必要あり上記画像では`$ai`で
`$ai`を出力すると配列だったので`explode`関数を用い値を返しました
“`php
$unti = explode(“,” , $ai) //← ”,” これが第一引数(だいいちひきすう) 配列を何で区分するかということ
“`
`$ai`の部分が分解する対象 そういう感じ しらんけど。

問が 配列の合計値が`$imput_line`以下の場合OK、そうでない場合はNGと出力せよだったので
以降はif構文を使い条件を指定

“`php
if($uniti[0] + $unti[1] + $unit[2] > $inmut_line)
{ echo “NG” ; }

else{ echo “OK” ; } // となる感じの問題。
“`

鬼門はfgetsのニュアンスを理解できていなかったことだったかも。

補足としてfor構文もおさらいしとく

“`

元記事を表示

私のWordPressサイトはどうして落ちるのか

# はじめに

私の管理しているWordPressサイトが静かに落ちる。
リソースに問題はないはずなのに静かに落ちる。
監視グラフとログとにらめっこして原因を探って対策をしましょう。

# システム構成

下図のように Cloudflare + Linux(Ubuntu 22.04) + nginx + PHP-FPM の構成になっています。
間にCDNを挟んでいるのでアクセス過多ではなさそうですが、いったい原因は何でしょう?

![ccc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2066798/0be7894d-1bc9-b079-914f-c96e2575867a.png)

# wp-cron.phpの実行エラー

調査のためにトップページのHTTPS応答時間をZabbixで1分おきに計測しました。
すると最大で1時間に6回ほど応答時間が遅くなっています。

![02-29_03_01.png](https://qiita-image-store.s3.ap-northeast-1.amaz

元記事を表示

【Laravel】PHPstanをGitHub上で動かす

# はじめに

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

前回の続きです。

前回の記事

https://qiita.com/keitaMax/items/a63e3a93f1d2f2d10473

下記の記事を参考に、PHPstanをGitHub上で動かして、自動でテストするものを作成します。

https://qiita.com/hidao/items/8576729e3a253a2cd1ea

# ymlファイルを作ってGitで動かしてみる

参考元のymlファイルを参考にして以下のように作成しました。

“`yml:phpstan.yml
name: LaraStan
on: [pull_request]

jobs:
phpstan:
runs-on: ubuntu-latest
steps:
– uses: actions/checkout@v2
with:
fetch-depth: 0
– name: Setup PHP
uses: shivammathur/s

元記事を表示

【PHP】PhpSpreadsheet なんかより fast-excelでいいじゃんっていう話

# PHPで大量のデータのインポート/エクスポートがしたい
って話があったので、PHPバブちゃんな投稿者が色々とやってみた結果を備忘録として残してみた。

### 困ったときのGoogle先生は?
真っ先に検索されたのが「PhpSpreadsheet」と「PHPExcel」だったので、
とりあえず記事の数的にもPhpSpreadsheetのほうが多くて何か安心だねってことで調べながら使ってみたんだけど、
この子がたかだか数万件のレコードを処理するだけなのにメモリと時間をアホみたいにモグモグして実用性に欠けたので、
検索文言変えまくって出てきた[avadim/fast-excel-templator](https://packagist.org/packages/avadim/fast-excel-templator)を使ってみたよって話。
※PhpSpreadsheetでキャッシュとか使えって話ですが、使うための設定とかがめんどくさかったので、ノー設定でいけるのが欲しかった

## とりあえず環境をDockerで作ってみた
※前に投稿したPHP(Apache入り)の環境+α
– PHP

元記事を表示

Vagrant(VirtualBox)でディスクアクセスが遅い問題の対処法

Windows + Vagrant + VirtualBoxでLaravelを動かすと、ローディングにかなりの時間がかかって仕事が進まなかったという問題の対処方法を紹介します。NFSを使用する方法です。

※ これは2020-02-01に個人ブログで公開した記事を移植したものです。

## Virtual Box の共有フォルダ機能は遅い

ホスト側とゲスト側でプログラムファイルなどを共有するためにVirtualBoxには共有フォルダ機能が存在しますが、デフォルトの共有方法を用いるとかなり遅くなります。

仕事でLaravelを使ったWebサイトをVirtualBoxで構築していたところ、Windows環境やMac環境でも1ページ読み込むのに5秒ほどかかり、まともに仕事ができない状態になってしまいました。

![Laravelのデバッグツールのスクリーンショット、Bootingに1.15s、Appに1.03sかかっている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/ac106095-9e40-

元記事を表示

PHP Fatal error: Uncaught Error: Call to a member function prepare() on null

phpでtodoアプリを作っていたら
`
PHP Fatal error: Uncaught Error: Call to a member function prepare() on null
`
というエラーに出くわしたので原因と解決策を記録に残します。
結論から言うと自分の場合は`$pdo = db_connect();`の部分で$pdoオブジェクトが null だったためにこのエラーが発生していました。
# 全体コード
db_connect.phpでDBに接続するコードを書いています。
login.phpでDB接続用の関数を呼び出しています。
“`db_connect.php

元記事を表示

【Laravel】PHPstanを使う

# はじめに

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

静的解析ツールのPHPStanのLaravel版のlarastanを使用していこうと思います。

静的解析ツール「Larastan」を導入してみた

この記事を参考に進めていきます。

# larastanをインストールして実行する

まずは下記コマンドでLaravelにlarastanをインストールします。

“`
composer require nunomaduro/larastan –dev
“`

次にcomposer.jsonと同じ階層に`phpstan.neon`を作成します。
“`neon:phpstan.neon
includes:
– ./vendor/nunomaduro/larastan/extension.neon
parameters:
paths:
– app
# The level 9 is the highest level
level: 5
ignoreErrors:

元記事を表示

【PHPフレームワークFlow】パッケージを分けてモジュラーモノリスみたいにしてみる

# 初めに
PHPフレームワークFlowは大規模エンタープライズ向けのWebフレームワークと公式ドキュメントに記載されています。大規模向けと聞くと、モノリシックなソースをイメージしますが、Flowはパッケージを分けることでモジュラーモノリスのような運用も可能なのかなと想像してます。
運用したことがないので想像ベースですが、今回はFlowでパッケージを分ける方法と、そのメリットについてまとめようと思います。

# モジュラーモノリスとは
モジュラーモノリスとはソフトウェアのアーキテクチャの1つです。モノリシックとマイクロサービスの中間に位置し、マイクロサービスのようにランタイムが分かれているわけではないけど、責務や機能ごとにリポジトリ内でモジュールを分割して管理しやすくするというアーキテクチャになります。

以下の記事が分かりやすかったです。

https://r-kaga.com/blog/what-is-modular-monolith

# Flowにおけるパッケージ
Flowでは、パッケージの種類が以下の3つに分けられます。

| 種類 | 説明 |
|:-:|:-:|
| A

元記事を表示

【Docker】PHP(Apache上で動かす)環境を作ってみる

## Dockerの勉強始めた経緯
で、色んなプロジェクトをやってると、
同じ言語やツールでもバージョンが違うとかで、
環境変数を変えたりツールを複数インストールしたりなどで、
PC内がゴチャゴチャしちゃうときってあるよね。
※片付けられない大人なので

### とりあえずPHP環境をDocker化してみる
これまでXAMPP入れてとりあえずで作業してたけど、プロジェクト毎にPHPのバージョンが違ったり、confの設定が違ったり、そもそも本番環境はLinuxなことが多かったりで、Windowsで開発してたりするとなんか違う部分が多いので、当初Hyper-Vで仮想環境作ってとかやってたんだけどISOファイル落として設定してとかっていうのがめんどくさくなったので、Docker流行ってるみたいだし使ってみるかってなったのが経緯。

## とりあえずcompose.yamlを作ってみる
### フォルダ構成
root/
 ├compose.yaml
 ├docker/(他にもNodeとかDBとか入れることを考慮して分けるため)
 │ ├server/
 │ │ ├Dockerfile
 │ │

元記事を表示

PDO(PHP Data Objects)とは?

# PDOとは
PDO(PHP Data Objects)とはデータベースにアクセスするための拡張モジュール、クラスのことです。
PDOを使うことによって、異なる種類のデータベースに対して一貫した方法でアクセスすることが可能になります。
例:MySQL,PostgreSQL,SQLite

# PDOはSQLインジェクションの対策になる
PDOの特徴として**SQLインジェクションを防ぐ**ことができます。
なぜPDOを使うことでSQLインジェクションの対策になるのかよくわからなかったので調べてみました。

PDOを使ったコード例
“`
$pdo = db_connect();
try{
$sql = ‘select * from users where name = :name AND password = :passowrd’;
$stmt = $pdo->prepare($sql);
$stmt->bindParam(‘:name’, $name);
$stmt->bindParam(‘:password’, $password);

元記事を表示

肥大化したバリデーションクラスをちっちゃくしようと改善してみた話

**「なんだかこのクラスめっちゃ触るの嫌だよね」**
という状況よくあると思います。
(もし無いなら良い環境にいらっしゃるんだと思います)

いろんな現場先でいろんなコードを見てきましたが、
非常に修正コストのかかるプログラムがあるのはどこに行っても常にありました。

今回、縁があってそんなプログラムの改善活動をさせていただけたので備忘録的に残しておこうと思います。
フレームワーク的にはLaravelですが他のフレームワークにも応用効く内容じゃかなと思ってます。

# (前提の話)FormRequestってそもそもなんだっけ?
今回の改善対象であるFormRequestクラスについてまずは軽く触れさせてください。

Laravelにはリクエスト内容をバリデーションする仕組みとしてFormRequestを提供しています。
詳しくは公式やreadouble見てもらいたいのですが、
要はバリデーションに関するルールなどをFormRequestをextendsしたクラス内で行うことで
責務を分割しようという仕組みです。

https://readouble.com/laravel/10.x/

元記事を表示

MailHogを使ってユーザーに招待メールを送信する

MailHogの動作確認をしたので、そのメモを残します。

まず、ターミナルを立ち上げ、「mailhog」を実行。

そして、アプリのメール送信画面に移動する。
![スクリーンショット 2023-05-02 10.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/1a402616-3a22-68b0-084b-6963b60e6d56.png)

相手のメールアドレスを入力。
例として、user@gmail.comと入力。
![スクリーンショット 2023-05-02 10.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/5249bb15-3413-4c25-dc92-c9a1288782b9.png)

「送信する」ボタンを押下したら、メールが完了したメッセージを表示させる。
![スクリーンショット 2023-05-02 10.09.17.png](https://

元記事を表示

【phpMyadmin】Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.

## 経緯

Laravelで開発をする準備をしていました。
docker-compose.ymlファイルを編集し、DockerのphpMyAdminにログインしようとしたら、エラーでログインできませんでした。

## エラー内容

![スクリーンショット 2024-02-28 21.41.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/91ac19a9-203b-c35f-ebeb-0bf86269cde6.png)

:::note alert
Google翻訳
セッションCookieの設定に失敗しました。 phpMyAdmin へのアクセスに HTTPS ではなく HTTP を使用している可能性があります。
:::

## 対応

色々と調べて試したことをまとめていきます

– Googleの拡張機能を確認
まだエラー出でいる…

– Laravel Sailを起動する際に –ssl オプションを使用してHTTPSを有効にしてみる
まだエラー出でいる…

– Doc

元記事を表示

intl拡張モジュールが無い環境でCodeIgniter4を動かす方法

# はじめに

CodeIgniter4の動作要件の1つとして、PHPのintl拡張モジュールが有効化されていることが挙げられますが、CodeIgniter4ベースのシステムをレンタルサーバで運用する際、intl拡張モジュールが無い問題にしばしば遭遇します。

intl拡張モジュールが有効化されたレンタルサーバやVPS/IaaSを選択すれば解決しますが、諸般の事情により他サービスを選択できないケースもあり、非常に悩ましい問題であったりもします。(CodeIgniter4に限らず、CakePHPやLaravel等の他のフレームワークやCMS等をレンタルサーバ上で運用する際においても、しばしば悩まされます)

今回、CodeIgniter4のソースコードを書き換えることで、intl拡張モジュールの無い環境でCodeIgniter4を動作させることが出来ましたので、以下に手順を記載します。

# CodeIgniter4のバージョン

CodeIgniter 4.4.6

https://github.com/codeigniter4/CodeIgniter4/releases/tag/v4

元記事を表示

OTHERカテゴリの最新記事