- 1. PHPでSQL文を書いて実行するとなんかエラーが出ていた話
- 2. PostgreSQLにPHPで通信してみた
- 3. Laravelプロジェクトでの写真圧縮 — Intervention Imageライブラリの使い方に関する備忘録
- 4. サーバーのOSと開発環境でのフレームワーク等のバージョニングに関する備忘録
- 5. LaravelとLivewireでの日報管理システム開発に関する備忘録
- 6. 初心者向けLaravel入門ガイド:基礎から学ぶMVCとデータベース操作
- 7. PHPのオブジェクト指向プログラミング: トランプゲームを作成する過程で学んだこと
- 8. WordPressのSmart Custom Fieldsが、多言語サイト作成プラグインBogoで翻訳した固定ページに設定できない件の対策
- 9. PHPを使ってXFFの値をアクセスログに出力する方法(Xserver編)
- 10. 【PHP8.4】round関数で任意桁数の切り捨て切り上げができるようになる
- 11. 新人PGのLaravel備忘録~ユーザー認証時の項目追加~
- 12. 関数をphpunitでテストするサンプル
- 13. マイジオ(MyGeo)を作ってみた。(Youは、自分が作ったGeoデータをどうやって外出先のスマホ・タブレットで見る?)
- 14. オブジェクト指向の世界に入門② ポリモーフィズムについて
- 15. PDOってよくわからず使ってない?
- 16. PHP オブジェクト指向覚書き「超基礎」
- 17. 【覚書き】PHPStanのレベル0では、関数に渡す引数の不足は確認するが超過は確認できない
- 18. サーバーをまたいでPHPからnode.jsを動かすサンプルコード
- 19. Laravelで “A facade root has not been set.” というエラーが出た場合の対処法
- 20. PHPで日本語の文字数を正しくカウントする方法
PHPでSQL文を書いて実行するとなんかエラーが出ていた話
## はじめに
前にPHPでSQL文を変数に代入して実行しようとしていると、SQL文はあっているはずなのになぜか“`HTTP ERROR 500“`が返ってきていました。##### 原因のコード
“`php:PHP
$sql = “INSERT INTO sample_table (id,name,age,birthday) VALUES ({$_POST[‘id’]},”{$_POST[‘name’]}”,{$_POST[‘age’]},”{$_POST[‘birthday’]}”)”;
“`## 原因
原因はおそらく、“`”{$_POST[‘name’]}”“`のダブルクォーテーションがあることで、この時点で変数の値が終了しているという判定になったからだと考えられます。## 解決方法
“`”{$_POST[‘name’]}”“`や、“`”{$_POST[‘birthday’]}”“`のダブルクォーテーションをシングルクォーテーションに置き換えることで解決しました。“`PHP:PHP
$sql = “INSERT INTO samp
PostgreSQLにPHPで通信してみた
## はじめに
インターンで環境構築したサーバーを使ってデータベースと通信する機会がありました。PostgreSQLを用いてデータベースを作成する作業は以前[記事](https://qiita.com/akito-0520/items/041ec30f01128ad0b3e3 “PostgreSQLを使ってみた”)にまとめたので、この記事ではその先の実際に通信する作業をまとめたいとおもいます。
初めての経験だったので無駄なことやおかしなことを言っているかもしれませんがもしあった場合はコメント欄で優しく指摘していただけると幸いです。### 実行環境
– OS: AlmaLinux 8.10
– PostgreSQL: 12.20
– PHP 8.0.30## 実際に使ってみる
前回でPostgreSQPにデータベースを作成することはできたので今回はPHPに入りたいと思います
まずはrootディレクトリから“`/var/www/html/“`ディレクトリにPHPファイルを作成します。“`cd“`コマンドを使用して“`html“`ディレクトリに移動して、今回は“`te
Laravelプロジェクトでの写真圧縮 — Intervention Imageライブラリの使い方に関する備忘録
### 概要
Laravelでの写真アップロード機能において、画像の圧縮はストレージの節約とパフォーマンス向上に重要です。この記事では、PHP用の画像操作ライブラリ「Intervention Image」の使い方について、私が開発中に経験した内容を備忘録としてまとめます。今回は、PHPのバージョンの関係で最新バージョン3ではなく、2.7を使った具体的な実装例を紹介します。
### 1. Intervention Imageライブラリとは?
Intervention Imageは、PHPで画像操作を簡単に行えるライブラリです。このライブラリを使用することで、画像のリサイズやトリミング、フィルターの適用など、様々な画像操作が可能になります。今回のプロジェクトでは、特に画像の圧縮とリサイズに焦点を当てて使用しました。
– **使用したバージョン**: `intervention/image` バージョン `2.7`
– 最新バージョンではなく、PHPの互換性(PHP 8.2がサポートされていない)と他の依存関係のため、バージョン `2.7` を選択しました。### 2.
サーバーのOSと開発環境でのフレームワーク等のバージョニングに関する備忘録
### 概要
サーバーのOSや開発環境で使用するフレームワークやライブラリのバージョン管理は、プロジェクトの安定性と互換性を保つために非常に重要です。今回の開発では、AWSのAmazon Linux 2を使用しており、PHP 8.2をインストールできない問題や、使用するライブラリのバージョン制限に直面しました。この記事では、こうしたバージョニングに関する注意点について備忘録としてまとめます。
### 1. 開発環境とサーバー環境のバージョン管理の重要性
開発環境とサーバー環境で異なるバージョンのOSやフレームワークを使用すると、依存関係の問題や互換性の問題が発生する可能性があります。特に、以下の点に注意が必要です:
– **PHPやNode.jsのバージョンの互換性**
– **使用するライブラリやフレームワークのサポート状況**
– **OSバージョンに依存するパッケージのインストール可否**### 2. Amazon Linux 2とPHPのバージョン互換性問題
今回のプロジェクトでは、AWSのAmazon Linux 2を使用していましたが、PHP 8.2のインスト
LaravelとLivewireでの日報管理システム開発に関する備忘録
### 概要
日報管理システムの開発では、リアルタイムなユーザーインターフェースを提供することが求められました。LaravelのLivewireを使用することで、フロントエンドとバックエンドのコードを統合し、効率的な開発が可能になりました。ここでは、開発中に学んだポイントを備忘録としてまとめます。
### 1. Livewireを使ったリアルタイムなUIの実現
Livewireを使うことで、ページのリロードを必要とせずにリアルタイムでデータを更新できます。以下は、私が日報作成画面で使用したLivewireコンポーネントの一部です。
“`php
namespace App\Livewire;use Livewire\Component;
use App\Models\DailyReport;
use App\Models\User;
use App\Models\Scheduled;class DailyReportForm extends Component
{
public $reportDate;
public $userId;
publi
初心者向けLaravel入門ガイド:基礎から学ぶMVCとデータベース操作
## **1. はじめに**
### **Laravelの概要と本記事の目的**
LaravelはPHPで構築されたフレームワークで、開発の効率を高めるための豊富な機能とシンプルな構造を提供します。本記事では、Laravelの基本構成について学びながら、簡単なToDoアプリを具体例としてその理解を深めます。
### **Laravelの特徴や利点**
– **シンプルなルーティング**: 明確で直感的なルート定義
– **強力なEloquent ORM**: データベース操作が簡単
– **Bladeテンプレートエンジン**: 効率的なビュー作成
– **豊富なドキュメント**: 初学者にも優しい## **2. 環境構築**
### **必要なツール**
– **Composer**: PHPの依存管理ツール
– **PHP**: サーバーサイドスクリプト言語
– **Laravel**: PHPフレームワーク### **Laravelプロジェクトの作成(簡潔に)**
以下のコマンドを実行して、新しいLaravelプロジェクトを作成します。
“`bash
co
PHPのオブジェクト指向プログラミング: トランプゲームを作成する過程で学んだこと
## **はじめに**
この記事では、PHPのオブジェクト指向の概念を理解するために、トランプゲームのクラスとインスタンス、メソッドとプロパティをどのように実装し、それらの技術要素がどのように連携してゲームを構築するのかについて共有します。
## **オブジェクト指向の基礎**
### **クラスとインスタンスの例: デッキとトランプカード**
“`php
class Card {
public $suit;
public $value;
function __construct($suit, $value) {
$this->suit = $suit;
$this->value = $value;
}
}class Deck {
public $cards = [];
function __construct() {
$suits = [‘Hearts’, ‘Diamonds’, ‘Clubs’, ‘Spades’];
$values = [‘2’, ‘3’,
WordPressのSmart Custom Fieldsが、多言語サイト作成プラグインBogoで翻訳した固定ページに設定できない件の対策
WordPressの便利なプラグインである、
非常に直感的に多言語サイトが作れる多言語化プラグイン「Bogo」と、
設定したカスタムフィールドを必要に応じて繰り返し使える機能が無料で使える
カスタムフィールド作成プラグイン「Smart Custom Fields」ですが、
併用した場合に、固定ページを複製した翻訳ページへは、
管理画面からSmart Custom Fieldsで設定したカスタムフィールドを設定することができません。
(※カスタム投稿タイプ、および通常の投稿ページの翻訳ページには、元の投稿に設定されたカスタムフィールドがそのまま反映されます)###### 固定ページを作成
![スクリーンショット 2024-09-11 23.17.47.png](https://qii
PHPを使ってXFFの値をアクセスログに出力する方法(Xserver編)
### 概要
レンタルサーバー環境(Xserver等)では、Apacheのアクセスログフォーマットを自由に変更できない場合が多くあります。クライアントのIPアドレスとしてX-Forwarded-For(XFF)の値を記録したい場合、標準ログの代わりにカスタムログを出力する必要があります。本記事では、PHPを使ってXFFの値を含むカスタムアクセスログを生成する方法を紹介します。
### なぜXFFが重要なのか
WAFやCDNを利用している場合、サーバーが直接受け取るIPアドレス(`REMOTE_ADDR`)はプロキシやCDNのものになることが多く、実際のクライアントIPを取得できません。XFFヘッダーは、そのような環境でクライアントの実際のIPアドレスを取得するために使われます。
### 実装手順
#### 1. logディレクトリの作成
ログファイルを保存するためのディレクトリを作成します。SSHやFTPを使用する方法もありますが、今回はXserverのコントロールパネルから「ファイルマネージャー」を使用します。
![CleanShot 2024-09-16 at 17
【PHP8.4】round関数で任意桁数の切り捨て切り上げができるようになる
[round](https://www.php.net/manual/ja/function.round.php)は四捨五入する関数です。
PHP8.4以降、この関数で小数の切り捨て切り上げができるようになります。あれ?[ceil](https://www.php.net/manual/ja/function.ceil.php)・[floor](https://www.php.net/manual/ja/function.floor.php)は?
実はceil・floorは桁数指定ができないんですよね。
必ず整数値にさせられてしまい、小数点3桁で切り捨てみたいなことができないのであまり役に立ちません。ということで以下は該当のRFC、[Add 4 new rounding modes to round() function](https://wiki.php.net/rfc/new_rounding_modes_to_round_function)の日本語訳です。
なお、この後[Correctly name the rounding mode and make it an E
新人PGのLaravel備忘録~ユーザー認証時の項目追加~
# はじめに
こちらは筆者がLaravelに関する知識の定着を図るための投稿です。
以下の点にご注意ください
* この記事の読者は私と同じ実務歴半年~1年程度の新人PGの方を想定しています
* 記事内において間違いや冗長な説明が多々あることをご容赦ください
* 公式ドキュメントと相違がある場合はそちらを参考にしてください
* 公の場で記事を引用していただく場合は予めご連絡ください
* コメント大歓迎です!!出来るだけ返信しようと思っております!!
# 今回のテーマ
Laravelではユーザー認証機能を簡単に実装できるようにいくつかの無料パッケージを提供しています。今回はその中の一つであるLaravel Breezeパッケージを使用してユーザー認証を行った際にメールアドレスとパスワード以外の項目もログイン認証に用いる方法を紹介します。:::note warn
今回はLaravel 11で実装しています。他バージョンでの実装時は[公式ドキュメント](https://laravel.com/docs/11.x/authentication#main-content)も参照してください
:
関数をphpunitでテストするサンプル
AIくんに聞いてみた
“`
マイジオ(MyGeo)を作ってみた。(Youは、自分が作ったGeoデータをどうやって外出先のスマホ・タブレットで見る?)
【マイジオ】
https://office-shirado.com/mygeo/「Youは、自分が作ったGeoデータをどうやって外出先のスマホ・タブレットで見る?」
そんな素朴な疑問を自分に投げかけ、「あっないかもw」ということで、新しいWeb地図を作成しています。
![画面イメージ01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67836/534a9cd2-bdfa-11c3-6ee8-a199bda299cb.png)
![画面イメージ02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/67836/1eef94b8-abeb-63ca-263b-5693583a406d.png)いつも通り、「自分が使うWeb地図」を目指しています。
Web地図(WebGIS)のベースは、MapLibreで、データはMySQLのテーブルに入れています。技術的なことを簡単に言うと、ローカルファイル(SIMA・GeoJS
オブジェクト指向の世界に入門② ポリモーフィズムについて
# はじめに
以前、書いた記事の続きです。
オブジェクト指向の実践において大事な考え方であるポリモーフィズムについての記事になります。※今回も記事内の言語はPHPで書いています。
# この記事の目的
オブジェクト指向って結局何なの?ということで、「Clean Architecture(Robert C. Martin)」を読んでみるとどうやら「ポリモーフィズムを使用することで、システムにあるすべてのソースコードの依存関係を絶対的に制御する能力」であるらしく、継承やカプセル化に比べて、ポリモーフィズムは特に大事な概念のようです。
今回は、このポリモーフィズムってそもそも何なの?ということを記事にしてみようと思います。# ポリモーフィズムって何?
ポリモーフィズム(多態性)とは、**「異なるクラスでも、同じメソッドを使って異なる処理を実行できる仕組み」** ことを意味します。ポリモーフィズムを使うと、コードの柔軟性や再利用性が向上し、クラスやメソッドが特定の実装に縛られることなく、異なる型のオブジェクトを扱うことができるのですが、どういうことか具体的な例を見てみましょう。例え
PDOってよくわからず使ってない?
## はじめに
PDOについて理解せず使っていたので今回PDO学びました。
使い方というよりPDOって何なのかを記事にしております。基本ブラックボックスで使って問題ないものなので初学者は飛ばしてもいいと思います
自分も初学者でインプット目的で書いてるのであしからず。
ただ(細かくを書くことはできないが)参考にしていただけたら幸いです。## そもそもPDOって何?
PDOは、PHP Data Objects の略で、
`「PHPでDBに接続するためのオブジェクト指向プログラム」`※自分の解釈なので間違っているや、こういう解釈の方がいいなどあればご教授くださいまし。
脆弱性や柔軟性、拡張性がよいのでよく使われる。
脆弱性・・・SQLインジェクションをプリペアドステートメントを使うことで防ぐことができる。
柔軟性・・・DBが変わっても一部変更すればDBの切り替えに対応できる。
拡張性・・・エラーハンドリングなどのオプションを追加変更が容易## PDOは、PHPのライブラリ
PDOはPHPのライブラリとして提供されているので
PHPのドキュメントに書かれている。
[PD
PHP オブジェクト指向覚書き「超基礎」
## はじめに
プロパティやメソッドなどの超基本についてだけまとめました。
全部頑張って書こうと思いましたが
カプセル化、継承、staticなど先が見えず心が折れ、
とりあえず書いたところまでの投稿です。
初学者はまずここまで理解しようということで。## オブジェクト指向とは
オブジェクト指向は
クラス(class)という設計書の中に
プロパティやメソッドなど(部品)をひとまとめにして
この設計書を元に作ったもののことをインスタンスという。
プロパティは変数、
メソッドは関数と認識して今のところは問題ない。
※自分が最初理解するのにわかりづらかったことは
何をオブジェクトと呼ぶのか?
この記事最後に話そうと思う。## 基本的な使い方(プロパティ、メソッド)
“`diff_php
【覚書き】PHPStanのレベル0では、関数に渡す引数の不足は確認するが超過は確認できない
# 初めに
PHPStanを使っている際、関数やメソッドに渡す引数が超過している場合にエラーを出してくれないという事象に当たりました。
備忘のためアウトプットします。# PHPStanのレベル0
まず、レベル0の説明はこちら。> basic checks, unknown classes, unknown functions, unknown methods called on `$this`, wrong number of arguments passed to those methods and functions, always undefined variables
> 基本的なチェック、不明なクラス、不明な関数、不明なメソッドの呼び出し$this、それらのメソッドと関数に渡される引数の数が間違っている、常に未定義の変数
`メソッドに渡せれる引数の数が間違っている`とあるので、引数の数が多い場合でもエラーを出してくれるのかと思っていました。
# レベル0では引数の超過を確認できない
検証のために以下のコードを作成し、解析にかけてみました。“`php
cl
サーバーをまたいでPHPからnode.jsを動かすサンプルコード
## 備忘録メモとして
レンタルサーバーに設置したフロントエンドから、別サーバー(VSP)に置いてあるNode.jsを動かしてデータを返すサンプルコードテスト環境:XAMPP
### ファイル構成
“`
サーバー1(レンタルサーバー)
C:\xampp\htdocs\test1
call_run_node.php
index.phpサーバー2(VPSサーバー)
C:\xampp\htdocs\test2
run_node.php
script.js
“`
サンプルでは特に外部モジュールを使用していませんが、必要なモジュールがあればサーバー2側にインストールします。## サーバー1
index.php:フロントエンド表示部分と実行ボタン
“`php
サーバー2のNod
Laravelで “A facade root has not been set.” というエラーが出た場合の対処法
## 概要
– Testを作成中に遭遇したことのないエラーが発生し、手間取ったため備忘録として記載する## 原因
“`php
@dataProvider
“`
こちらを利用する方法を誤っていた## 一通りの対策
https://qiita.com/aminevsky/items/784573234d071c769288
:::note info
少し古い記事ですが、`@dataProvider` を利用していない場合は一度こちらを試したのちに試す方が良いかもしれません
:::## 対策
“`php
/**
* @test
* @dataProvider provideValidConditions
*/
public function testValidConditions($condition, $expectedResult)
{
// 省略
}public static function provideValidConditions()
{
return [
// 省略
];
PHPで日本語の文字数を正しくカウントする方法
## 概要
– バリデーションのテストをおこなったところ、日本語に対する正しい判定を行えていないことが分かった
– 正しい判定方法を備忘録として残しておく## 理由
“`php
if (strlen($name) > 50) {
“`
もともとこのようにバリデーションを行っていたが、「あ」を50回繰り返したところエラーが発生してしまった>function strlen(string $string): int
文字列の長さを得る
>
>与えられた string の長さを返します。
>
>https://www.php.net/manual/function.strlen.php
>
>@param $string: 長さを調べる文字列。
>
>@return string の長さをバイト単位で返します。原因は単純で、バイト単位でカウントするため2倍カウントされてしまっていることが原因であった
## 解決方法
>function mb_strlen(
string $string,
string|null $encoding = null
): i