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

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

WordPress ショートコードで自サイトの他の記事をそのまま挿入

WordPressのショートコードを用いて自サイトの他の記事をそのまま挿入する方法を紹介します。

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

## functions.php へコードを追加

まず、テーマの `functions.php` に次のコードをコピペします。`functions.php` にすでにコードが追加されている場合は `` が二重にならないようお気をつけください。WordPressがエラーで起動できなくなってしまう場合があるためバックアップしてから保存してください。

“`php
0),$atts));
if(get_post($id)!=null)return wpautop(do_shortcode(get_post($id)->post_content));
}
add_shortcode(‘insert’,’shortcode_insert’)

元記事を表示

CSSで勝手に英語大文字になってしまう原因と対処法

WordPressでタイトルが勝手に英語大文字になってしまう原因と対処方法を紹介します。

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

## 現象

とあるWordPressテーマを適用すると、タイトルの英語部分が勝手に大文字になってしまいました(画像はイメージです)。

![記事のタイトルが管理画面に入力したとおり表示されている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/f1e40f31-31cb-98c3-587b-0969a7d418b7.png)

![記事のタイトルの英字がすべて大文字になっている](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/f48caebb-2187-a0e7-eb40-1025ccc0d6f4.png)

## 対処方法

CSSによって大文字に変更されています。よって、テーマのCSS上に存在する、下記2つのスタイルをすべて削除す

元記事を表示

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.2’ …原因調査

# MySQLへの接続が拒否に関するエラー
appコンテナとdbコンテナの接続において、
`php artisan migrate`コマンドを実行したところ下記のエラーが出た。
“`
root@a0aefa03324d:/app/laravel# php artisan migrate

Illuminate\Database\QueryException

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.2’ (using password: YES) (SQL: select * from information_schema.tables where table_schema = database and table_name = migrations and table_type = ‘BASE TABLE’)
“`
`access denied…`どうやらmysqlへの接続が拒否されているようだ。
docker-compose.ymlファイルと.envファイルの環境変数を確認し

元記事を表示

MAMPを使ってブラウザ上にPHPファイルを表示させる

# はじめに
この記事は、MAMPを使ってブラウザ上にPHPファイルを表示させる方法を記録したものである。PHPでお問合せフォームを作ろうと思い、実行環境としてMAMPをインストールした。MAMP起動後、PHPファイルに書き込んだ内容をブラウザ上に表示する段階で躓いたため、この問題を解決するために試したことを記録しようと思う。

# 環境・前提条件
– 使用ブラウザはGoogle Chrome
– エディタはVSCode
– MacPCにMAMPをインストール(※MAMP Proは使わない)
– MAMPの設定
– Webserver: Nginx
– PHP-Version: 7.4.33
– ポート番号: 8888

# 試したこと
まず、PHPが実行できる状態であるかどうかを確認する。MAMP起動後、起動ボタンの隣にある`WebStart`ボタンを押す。MAMPのスタートページが表示される。スタートページのURLを`localhost:8888`に変更してアクセスする。Welcome to MAMPというページが表示される。ページ内にPHPのバージョンに関

元記事を表示

PHP 高速かつ省メモリなCSVダウンロード機能の作り方

高速かつ省メモリなCSVダウンロード機能の作り方です。

一時ファイルを生成せずに、標準出力に垂れ流すことで、オーバーヘッドを減らしています。

ただし、headerにContent-Lengthを含めることができないので、ダウンロードまでの残り時間をブラウザに表示させることができなくなります。

# データ生成の方法

## yieldを使う方法
yieldを使うと、メモリを節約できます。
ただし、こんなふうに直接固定データを返す実装は少なく、多くのケースでは、SQLで、データを取りにいき、その結果をCSVとして返すという実装が多いことと思います。
その場合、問い合わせ回数が増えるので、遅くなる可能性があります。

“`php
‘1’, ‘name’ => ‘田中一郎’];
yield [‘id’ => ‘2’, ‘name’ => ‘山田二郎’];
yield [‘id’ => ‘3’, ‘name’ => ‘佐藤三郎’];
}
“`

## 普通に配列を返す方法
この

元記事を表示

「service “web” is not running container #1」というエラーが出た

Dockerを使ってPHP,nginx,MySQLの環境構築でwebサーバーとなるnginxのコンテナ作成をしていた時に
`service “web” is not running container #1`というエラーに遭遇したので、その解決策を備忘録として残します。

# やっていたこと
[DockerでPHP(Laravel)+ nginx + MySQLのLEMP環境を構築する](https://qiita.com/hinako_n/items/f15646ea548bcdc8ac6c)
こちらの記事を参考に環境構築に取り組んでいました。
PHPのコンテナを立ち上げるところまでは順調でしたがnginxのコンテナを立ち上げるときにエラーに遭遇しました。
# エラーログを確認

![スクリーンショット 2024-03-05 19.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655001/59847f9d-4ad9-0deb-70d2-f1701e044f10.png)
本来であれ

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事