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

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

How to post in this

What is Lorem Ipsum?
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry’s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more re

元記事を表示

PHP8.2までの環境で簡単にEnumからtryNameFromしたいよね

`PHP8.3`までは動的かつ簡単に`enum`から`tryNameFrom`する事は出来ません。
と言う事でお手軽に`tryNameFrom`しようじゃあないか。

:::note warn
注意

次の例の通りPHP8.3からは動的なenumアクセスが出来るのでこの記事は不要となります。

“`php
enum HogeBackedEnum: string
{
case Fuga = ‘ふが’;
}

enum HogeEnum
{
case Fuga;
}

$name = ‘Fuga’;

var_dump(
HogeBackedEnum::{$name}, // enum(HogeBackedEnum::Fuga)
HogeEnum::{$name}, // enum(HogeEnum::Fuga)
);
“`
実行例:[PHP Playground](https://php-play.dev/?c=DwfgDgFmBQ0KYDsCuBbABACQPYHM4CEBDAYwGs4ATAUWRQC40BnAFwCcBLB

元記事を表示

LibXL PHP ExtensionでExcelシートを非表示にする

## まえがき
LibXL PHP ExtensionというライブラリでExcelシートを非表示にしようとしたら大変苦戦したので、後学の為と自分の覚書の為にメモに残しておきます。

## ほんだい
…前置きが長いとストレスにつながると思うので、いきなり本題ですが、簡潔に書くと下記のようになります。
“`PHP:qiita.rb

//↓ この部分は一例です。各記法に従ってください
$excelBook = new \ExcelBook();
$excelSheet = $excelBook->getSheet(0); //この0はsheet1

//略

//シートを非表示にする
$excelSheet->setHidden(true);

“`
## あとがき
私はLibXL PHP Extensionが使われているシステム開発をしており、ExcelにデータをPHPから書き込み後、そのシートをユーザーに見せないようにしたかったので、非表示にする方法をずっと探していました。(計5日間ほど…)

このLibXL PHP Extensionについての情報を検索してみると、日本語英語に

元記事を表示

【PHP】キャッシュの制御

エンジニア歴1年弱の新米エンジニアです。
普段の業務ではフロントエンドはReact、バックエンドはPHPを使用しています。

ググって調べて出てきたコードをコピペすれば問題自体は解決しますが、それだと身につかないと思ったので今回も備忘録として残したいと思います。

## 起きていた問題
顧客管理システムをローカル環境でメンテナンス中 **ユーザーA** のアカウントでログインログアウトし、今度は **ユーザーB** でログインしたところ前回ログインしたユーザーの情報 **(ユーザーA)** の情報が引っ張られてしまう

## 試したこと
ログイン処理を行っているPHPファイルに対して様々な記事を参考に
“`
header( ‘Cache-Control: no-store, no-cache, must-revalidate’ );
header( ‘Cache-Control: post-check=0, pre-check=0’, FALSE );
header(‘Pragma:no-cache’);
“`
を追記しましたが変わらず…

## 解決策
“`
header( ‘

元記事を表示

クエリビルダーの whereAll() および whereAny() メソッドが Laravel 10.47 に追加

2024/03/06にリリースされたLaravel 10.47から、新しいクエリビルダーとして `whereAll()` と `whereAny()` メソッドが追加されました。

# 使い方
1つの値を複数のカラムと比較する検索のロジック等を作成する場合があります。
例えば、名、姓、電子メール、電話番号でユーザーを検索する場合は、これまで以下のような書き方をしていました。

“`php:Controller
User::query()
->where(function ($query) use ($search) {
$query
->where(‘first_name’, ‘LIKE’, “%$search%”)
->orWhere(‘last_name’, ‘LIKE’, “%$search%”)
->orWhere(‘email’, ‘LIKE’, “%$search%”)
->orWhere(‘phone’, ‘LIKE’, “%$search%”);
});
“`
これだと大量の`o

元記事を表示

PHP oci_connect SELECT テンプレ Smarty .tplで出力

### ■ 開発環境
・PHP7.4
・Smarty 2.xxx
・RedHat7.9
・oracle 19

### ■ ソース概要
・OCIで、oracleへ接続
・接続後、SELECT文で値を配列へ格納
・上記で取得した値を、foreachで回して、別々の配列へ格納

— ここから Smarty .tpl
・PHP側で取得した値を出力

### ■ PHPソース
“`php index.php

function GET_KASOU_KUBUN()
{

// OCI
$conn = oci_connect(DB_USER, DB_PASSWORD, DB_CONNECTION_STRING, DB_CHARSET);

if (!$conn) {
$e = oci_error();
self::fnDispError(DB_ERROR, $e[‘message’], true, DEBUG_MODE);
}

$sql = “SELECT カラム01, カラム02 FROM テーブル01 WHERE カラム01 < 3"; $sti

元記事を表示

PHPでフォルダ内にある画像ファイル一覧を取得

「product」というフォルダの中に複数の画像ファイルが入っていたとする。
その中の.jpgファイルだけ取得してimgタグにて書き出す方法。

“`php

eof;
}
}
?>
“`
grobで特定の拡張子だけ選ぶ方法

“`php
//.jpgだけ選ぶ
$filelist = glob($dir . ‘*.jpg’);

//.pngだけ選ぶ
$filelist = glob($dir . ‘*.png’);

//.txtだけ選ぶ
$filelist = glob($dir . ‘*.txt’);

glob — パターンにマッチするパス名を探す
glob(string $pattern, int $flags = 0): array|false

Specia

元記事を表示

AWS ClouldFormationの静的解析ツールcfn-lintコマンドをインストール

## はじめに

CloudFomationのcfn-lintコマンドを使いたくてインストールを試みました。
色々、試みた結果。
PHP利用者は大抵`brew`コマンドがインストールされていると思うので(偏見)、それ使ったら一発だよ!って教えてあげたかっただけです。

## インストールコマンド

“`:ターミナル
brew install cfn-lint
“`

“`:ターミナル
which cfn-lint

// この情報はVScodeと連携するときに使用します
/opt/homebrew/bin/cfn-lint
“`

## VScodeの拡張機能にをインストールし、設定する

まず、拡張機能からインストールしていきましょう。

![スクリーンショット 2024-03-06 21.26.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667254/45b79a32-6511-8717-1866-c6bb7a52adb7.png)

次に拡張機能を使用するために設定をしていきま

元記事を表示

RSSを取得する方法

### はじめに
本記事は、JavaScript・HTMLでRSSの取得・表示を試みたときの簡単な備忘録です

### RSSを取得する方法
#### 結論
Javascriptで他所のサーバーのRSSを取得しようとするとCORSエラーが発生するためうまくいきませんでした
サーバーサイドで処理をすればCORSエラーを回避できるので、PHPを用いることによってRSSを取得することができました

#### ソースコード例
任意のRSSを取得・表示する最低限のソースコードを以下に記述します

“`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式のいいところ6選

# 初めに
**こんにちは!元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日目
### 【要件定義】
設定されたビジネス要件を満たすために、どのような機能が必要か、画面はどのように作成し

元記事を表示

OTHERカテゴリの最新記事