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

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

PukiwikiプラグインがPHP8で動かなくなった問題

# 産業で説明

– dump2html.inc.php (と、それに依存する2つのphpソース)は、PHP8では動きません。
– 直し方をご説明します。

あれ?二行じゃん。

# PHP8で、classのコンストラクタの書き方が変わりました。

– 以前のPHPは、class名と同名のメソッドを書くとそれがコンストラクタになっていましたが、PHP8ではその書き方は完全に廃止され、呼ばれません。(エラメも出ない)
– PHP8では __construct() というメソッドがコンストラクタになります。
– classを継承して、親クラスのコンストラクタを呼ぶときも、parent::class名() ではだめで、parent::__construct() で呼ばないとだめです。(当然ですね)

# その他

– あともういっこありました。
“`
$配列名{0} —> $配列名[0]
“`
– なんで {} で配列の添え字が表現されてるんだろう・・・このソース。

このプラグインとは無関係ですが・・・
– create_function() も廃止されています。
– func

元記事を表示

Javascript+PHP+MySQLで面接室の予約システムを作ってみた

## 記事の概要
エンジニア未経験からの挑戦ということで企業様へアピールするためのポートフォリオを作成してみました。
作成手順と機能、工夫したところ、課題点を書き出してみようと思います。

### プロフィール
27歳 男性
ITは全くの未経験(前職は営業)
就労移行支援にて0からプログラミングを学ぶ。
**ポートフォリオ作成は期間2ヵ月~2か月半**(思ったより苦戦しました…)

## 目的
* JavascriptとPHPを![qiita.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3683991/e927061a-00bd-ac89-be98-edf8a97b8c34.gif)
使いつつDBとの連携も行えるよう経験を積む
* 今の自分のレベル感を企業に判断してもらう
* 素のJs、PHPでどこまで書けるかチャレンジ

# スペック
**言語**
Javascript (Vanilla Js)
PHP 8.0.19

**DBMS**
MySQL Ver 8.0.

元記事を表示

PHPのバージョンを7から8にした時の覚書

# PHPのメジャーバージョンアップ

PHPが、7.3.5から8.1.10へマイナーバージョンが上がることになった。
(*これを書いている数年前の話なので、少し古い)

それに伴って社内のみで稼働しているWebツールを改修することになった。

https://openstandia.jp/oss_info/php/version/

マイナーバージョンは軽微なものがおおいが、メジャーバージョンを更新するとなると結構コードの改修なんかが必要になることがある。

# PHPってなんだ

当時は、そもそもPHPというのを触ったのがほぼ初めてだった。
(初めての時、誰かの書いたコードを参考に、微修正するようなところから始まるのはよくあると思う。)

PHPは、サーバーで動くスクリプトで、動的にホームページを作成する言語だ。
チャットとか、掲示板とか、……というほど高度なことをしているわけではなかったが、社内でスケジュールの管理をするようなソフトである。
DBと連携はしているがやっていることはそんなに高度でもないし、影響範囲がせいぜい社内である。
(大事な仕事だけど、いざってときに迷惑をかける

元記事を表示

【CakePHP5】CodeSnifferを使用する

# はじめに

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

前回PHPStanを使用してGitHubにPushしてテストを実行させるところを作成しました。

https://qiita.com/keitaMax/items/6e354b9a0b7c54344fa1

今回はCodeSnifferを使用できるようにしたいと思います。

# インストール

すでにインストールされているので、新しくなにかをインストールしなくても大丈夫です。

# 実行

以下のコマンドで実行します。

“`
composer cs-check
“`

以下のように実行されます。

“`
root@4ab649b0155e:/app# composer cs-check
> phpcs –colors -p
………. 10 / 10 (100%)

Time: 137ms; Memory: 14MB

root@4ab649b0155e:/app#
“`
# 失敗させて自動修正してみる

`AppController`の`initialize(): void`この記述を`ini

元記事を表示

シーダーを作成するときにcsvを利用する方法

# データを一括で登録
備忘録です

# 手順
1. 以下のようなCSVファイルを用意する
“`:database/seeders/sample.csv
title,description,start_date,end_date
タイトル1,説明1,-20,-10
タイトル2,説明2,-10,-5
タイトル3,説明3,5,10
“`

1. シーダーファイルでCSVを読み込むようにする
“`php:database/seeders/SampleSeeder.php

元記事を表示

パーミッションエラーが発生したらとりあえずキャッシュクリア

# エラー内容
このようなエラーが発生しました。
“`
There is no existing directory at “/Users/hoge/workspace/SampleProject/storage/logs” and it could not be created: Permission denied
“`

# 対象方法
`.env`ファイルを修正後に間違えて`php artisan config:cache`を実行したことが原因でした。`php artisan config:clear`でキャッシュクリアしたところ直りました。

# メモ
“`:キャッシュクリアコマンド
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
“`

元記事を表示

Eloquentのローカルスコープ解説:効率よくクエリを管理しよう

:::note

AI要約

– PLaravelのEloquentにはローカルスコープとグローバルスコープがあり、この記事ではローカルスコープに焦点を当てる
– ローカルスコープはモデルのメソッドとして定義され、クエリの共通部分を再利用可能にする
– メリットにはコードの再利用性、可読性、メンテナンス性の向上があるが、過剰な抽象化や依存関係の複雑化のデメリットもある
– 定義したローカルスコープはモデルのクエリビルダ内で利用でき、アクティブユーザーの取得や特定のカテゴリのアイテム取得に使える
– ローカルスコープはモデルに対して定義され、そのモデルに基づくクエリに影響を与えるが、他のモデルから直接呼び出すことはできない

:::

## はじめに
LaravelでModelにクエリが集まったりして管理しにくいなーなんて思うようになって似たようなクエリを管理できるようにしたいと思った矢先にスコープという概念を知りました。
ローカルスコープ、グローバルスコープとありますが今回はローカルスコープについて解説してい

元記事を表示

SQLSTATE[HY000] [2002] Connection refusedの対象方法

# エラー内容
このようなエラーが発生しました。
“`
SQLSTATE[HY000] [2002] Connection refused
“`

# 対象方法
原因はenvの環境変数の値が正しく設定されていないことでした。
“`.env 初期の環境変数の値
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=forge
DB_USERNAME=forge
DB_PASSWORD=
“`

“`.env 修正後の環境変数の値
DB_CONNECTION=mysql
DB_HOST=test-db
DB_PORT=3306
DB_DATABASE=test_database
DB_USERNAME=test_root_user
DB_PASSWORD=test_password
“`
SQLSTATE[HY000] [2002] Connection refusedが発生する原因として、
– 環境変数の値が正しく設定されていない。
– config/database.phpと.envに記載されている環境

元記事を表示

今さらだけどLaravelのコンポーネントの整理

## はじめに
Laravelを使用し、画面をReact、Vueのようにコンポーネント対応ができるようになっているので、今一度整理しました。

1.レイアウトでのコンポーネントの使用($slotの使用)
2.1にコンポーネントの入れ込み
3.コントローラから画面のコンポーネントにデータセット

## 1.レイアウトでのコンポーネントの使用
`x-app-layout`コンポーネントを作成します。
このコンポーネントは、Bladeコンポーネントを作成し、テンプレートとして使用することで、アプリケーション全体のレイアウトを統一する目的で使用されます。

### `AppLayout` コンポーネントの作成

まず、`app-layout`コンポーネントを作成する必要があります。以下は、その手順です。

1. **コンポーネントファイルの作成**
`resources/views/components/app-layout.blade.php`に以下の内容を追加します。

“`app-layout.blade.html

【PHP】explode() と implode() どっちがどっちかわかりづらいよね。

どっちがどっちか曖昧でいつも使ってたので、今回整理しようと思いました。

結構、ごちゃごちゃになっている人多いはず…。

:::note warn
本記事は、`explode()` と `implode()`の解説記事ではありません。
:::

## 訳
### Explode
#### PHP公式
> 文字列を文字列により分割する。
文字列の配列を返します。
#### Google翻訳
> 爆発する

#### GPT4
> “explode” が「爆発する」という意味なので、文字列がいくつかの小さな部分に「分裂する」イメージ。文字列が爆発して小片に「バラバラになる」と覚えると良いでしょう。

#### 感想
結局整理してもしっくりこない。
どうにか落とし所を見つけたいですが、一旦`implode()`行ってみましょう。

### Implode
#### PHP公式
> 配列要素を文字列により連結する。
#### Google翻訳
> 爆裂する

#### GPT4
> “implode” が「内部崩壊」という意味なので、複数の小片が内部に引き寄せられて一つに「集まる」イメージ

元記事を表示

PHPのちょっとした問題集

# PHPエンジニアのためのWebサーバー基礎知識問題集
Webサーバーの仕組みやPHPの実行方式を理解することは、PHPエンジニアとしてパフォーマンスの高いWebアプリケーションを開発・運用する上で非常に重要です。この問題集を通して、WebサーバーとPHPに関する基礎知識を深め、実践的なスキルを身に着けましょう。

### 問題1: PHP実行方式の理解
PHPの実行方式には主に3つあります。それぞれを説明し、その利点と欠点を述べなさい。

Webサーバーの拡張モジュール:

PHPがWebサーバー(例: Apache)に直接組み込まれ、リクエストを処理する方式です。

:::note info
利点: 高速で設定が簡単です。
:::

:::note warn
欠点: セキュリティやスケーラビリティに課題があります。PHPのエラーがWebサーバー全体に影響を与える可能性があります。
:::

CGI(FastCGI):

各リクエストごとに新しいプロセ

元記事を表示

laravelで過去漏洩パスワードのバリデーションをかける

【前置き】
PwnedPasswordsというらしいですが、過去漏洩した記録を基に
入力した新しいパスワードを辞書索引し、
一致したらバリデーションとしてエラーを返し再入力を求めるというもの。
使っているLaravelのバージョンは6。

参考にした記事[Laravel de パスワードチェッカー](https://qiita.com/kyoya0819/items/3637cd4d0e7c5d48bb23)ではAPIで最新のデータと照合かけるみたいですが、なぜかあんまり精度が高くなく、[Pwned Passwords Validator for Laravel](https://github.com/valorin/pwned-validator)も同じく精度が低くセキュリティ的に通らなさそうなんでテストされるとわかってるjsonデータを元に対応。

#### 独自バリデーションルールをつくる

“`cmd:cmd
> php artisan make:rule SafePassword
“`
“`php:app\Rules\SafePassword.php

元記事を表示

初めてLaravelのJob Queueを触ったことをまとめてみる

## はじめに
**Qiita Engineer Festa 2024** が開催されているせっかくの機会なので、
最近の開発の際に初めて触った、Laravelの**Job Queue**について
まとめてみようと思います!!!

## 前提条件
MacBook Pro Apple M2
PHP 8.0.27
Laravel 9.52.15

## そもそもJob Queueとは
>Webアプリケーションの構築中に、アップロードされたCSVファイルの解析や保存など、通常のWebリクエスト中に実行するのでは時間がかかりすぎるタスクが発生する場合があります。幸運なことに、Laravelを使用すると、バックグラウンドで処理したい仕事をキューへ投入するジョブクラスが簡単に作成できます。時間のかかるタスクをキューに移動することで、アプリケーションはWebリクエストに驚異的な速度でレスポンスし、顧客により良いユーザーエクスペリエンスを提供できます。

公式ドキュメントにはこのように書いてあります:point_up:

今回業務で扱う前までは
会員登録後の確認メール送信なんかで使ってるんだっけ??

元記事を表示

【備忘録】fly.ioでLaravelデプロイメント:シンボリックリンクが機能しない問題の解決&マウント方法

# fly.ioでLaravelデプロイメント:シンボリックリンクが機能しない問題の解決

laravelのWEBアプリケーションで画像のアップロード機能などを搭載している場合、一般的にはstorageフォルダ下に保存すると思います。
ローカル環境であれば、アップロードされた画像などを参照する際には以下のようなシンボリックを設定を行うことが多いですが、fly.ioだと結構詰まるポイントがたくさんあったので共有したいと思います。

“`
php artisan storage:link
“`

# fly.ioとは
一部無料でアプリケーションをデプロイできる。
すげー

# シンボリックを設定する

`fly launch`を行うとルートディレクトリ下にDockerfileが生成されると思います。
そこに`RUN php artisan storage:link`を追加して記述してください。
これで、シンボリックが設定されます。
`fly ssh console`でssh接続をしコマンドを打つ方法もありますが、VMがアイドル状態になると自動的に停止され、何か新しいリクエストが送られ

元記事を表示

参加するプロジェクトのリポジトリクローンしてDB接続するのにハマったお話

# ハマるまでの概要と流れ
新しく参加するプロジェクト(PHP/Laravel10)のリポジトリをクローン→.envファイルに必要事項記載してDB接続しようとした際にmysqlが立ち上がらない沼り事案(MacbookM1使用)

# 結論と実施したこと
いろいろ細かな権限だの設定ファイルの修正だの必要な場合はあるのですが、**「結果的にこうやれば一発で行けたのか」** という流れが以下

1. mysqlアンインストール
`brew uninstall mysql`
2. mysqlインストール
`brew install mysql`
3. mysql接続
`brew services start mysql` ←これがポイント

### アンインストール→再インストール→`mysql.server start`で接続
![スクリーンショット 2024-06-17 15.33.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492127/929d6842-e49a-cf75-0f96-7d52

元記事を表示

Yii2フレームワークことはじめ その2 データベースを使ったユーザー登録と認証の実装

# イントロダクション
[前回の記事](https://qiita.com/Fu3nori/items/0d602634ae0592581ce6)でDBの作成と接続設定は完了しました。
さて、問題はデータベースを使ったユーザー登録とログイン・ログアウトの方法です。
デフォルトでYii2にはUserモデルとLoginFormモデル(app設置先/models)そしてcontrollers/SiteController.phpにloginアクションとlogoutアクションが用意されていますがこれはハードコードされたadminアカウントを返すだけなのでDBにUserテーブルを用意してユーザー登録とログイン、ログアウトを行うことができません。
また、認証周りは予約語が多く、変数の定義やカラムの定義でシステムが落ちる事もあり、ここもはまりどころです。

加えて公式ドキュメントにも認証についてのトピックスは合っても実際の実装方法までは書かれていないので、ニックネームとメールアドレス、パスワードを登録し、メールアドレスとパスワードでログイン認証を行うサンプルコードを記載します。

元記事を表示

初めてのチーム開発

## はじめに
今回、プログラミング初心者4人で行った初めてのチーム開発プロジェクトについての記事です。
テーマは『自分たちの役に立つものを開発する』

## チーム開発の流れ
1. アイデア決め
1. スライド作成、要件定義
1. 設計、タスク出し
1. 環境構築
1. 実装、プレゼン準備
1. プレゼン

## アイデア決め
まず、それぞれ一人が一つ抱えている課題のアイデアを出すことにしました。

私はFigmaを使うことを提案し、付箋を使ってアイデアを書き留め、その中から一つを選ぶことで決める流れになりました。
アイデアの課題、目新しさ、難易度で決めていく中で良い点、そうではない点がそれぞれにあり、賛同や衝突もありながら一つに決めるのが困難になりました。
そこで他のチーム開発ではどのようなアイデアがあったのかを見て、課題、目新しさ、実装難易度を改めました。
その後、4人の共通な新たな課題として「日々つけている日報をわかりやすく一目で振り返りたい。」ということが上げられました。
そこからはその課題を解決するためのアイデアがどんどん出てき方向性が決まっていきました。

ここで方向が

元記事を表示

【CakePHP5】PHPStanをGitHubActionsで使う

# はじめに

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

前回PHPStanをローカルでコマンドを打って実行したので、今回はPushした時にGitHub上で実行するようにしようと思います。

https://qiita.com/keitaMax/items/77df412e05a537571549

# GitHubActionsの設定ファイル

`.github/workflows`ディレクトリを作成し、`phpstan.yml`ファイルを作成します。

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

jobs:
phpstan:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./src
steps:
– uses: actions/checkout@v2
– name: dokcer-compose up
run: |
docker

元記事を表示

Laravelで行う依存性の注入(3層アーキテクチャでの実装)

# はじめに
今回は、Laravel11での依存性の注入(DI)を、3層アーキテクチャを採用して行ってみたのでその備忘録です。

# 環境
– Windows10
– Ubuntu
– Laravel11

また、フロント側は別アプリケーションにしているので、APIを用いての開発を行います。

# 今回用いたアーキテクチャ
今回は3層アーキテクチャを採用しています。
(Controller、Service、Repository)
まずリクエストがきたら、ルーティングの設定を通じて、適切なコントローラメソッドを呼び出します。

– **Controller層**
– ユーザーからの入力を受け取り、サービス層に処理を依頼する
– リクエストの検証やレスポンスの生成を行う
– **Service層**
– 業務ロジックを担当する
– ビジネスルールの適用やデータの加工を行う
– リポジトリ層からデータを取得し、必要な処理を行ってコントローラ層に結果を返す
– **Repository層**
– データアクセスロジックを担当する
– デ

元記事を表示

なぜ LAMP が使われるようになったのか

## LAMP が使われるようになった理由

LAMP は、Webサーバーを構築するためのソフトウェアスタックの略称です。

* **L**inux:オペレーティングシステム
* **A**pache:Webサーバー
* **M**ySQL:データベース
* **P**HP:プログラミング言語

LAMP が広く使われるようになった理由は、以下の通りです。

**1. 無料でオープンソース**

LAMP を構成するソフトウェアはすべて無料でオープンソースです。そのため、ライセンス費用を気にせずに利用することができます。これは、特に中小企業や個人事業主にとって大きなメリットとなります。

**2. 安定性と信頼性**

LAMP は長年にわたって多くのユーザーに利用されており、安定性と信頼性が証明されています。また、オープンソースであるため、多くの開発者がコードをレビューしており、セキュリティ面も比較的安全です。

**3. 拡張性と柔軟性**

LAMP はモジュール式のアーキテクチャを採用しており、必要に応じて他のソフトウェアを追加したり、設定を変更したりすることができます。そのた

元記事を表示

OTHERカテゴリの最新記事