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

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

PDO(PHP Data Objects)とは?

# PDOとは
PDO(PHP Data Objects)とはデータベースにアクセスするための拡張モジュール、クラスのことです。
PDOを使うことによって、異なる種類のデータベースに対して一貫した方法でアクセスすることが可能になります。
例:MySQL,PostgreSQL,SQLite

# PDOはSQLインジェクションの対策になる
PDOの特徴として**SQLインジェクションを防ぐ**ことができます。
なぜPDOを使うことでSQLインジェクションの対策になるのかよくわからなかったので調べてみました。

PDOを使ったコード例
“`
$pdo = db_connect();
try{
$sql = ‘select * from users where name = :name AND password = :passowrd’;
$stmt = $pdo->prepare($sql);
$stmt->bindParam(‘:name’, $name);
$stmt->bindParam(‘:password’, $password);

元記事を表示

肥大化したバリデーションクラスをちっちゃくしようと改善してみた話

**「なんだかこのクラスめっちゃ触るの嫌だよね」**
という状況よくあると思います。
(もし無いなら良い環境にいらっしゃるんだと思います)

いろんな現場先でいろんなコードを見てきましたが、
非常に修正コストのかかるプログラムがあるのはどこに行っても常にありました。

今回、縁があってそんなプログラムの改善活動をさせていただけたので備忘録的に残しておこうと思います。
フレームワーク的にはLaravelですが他のフレームワークにも応用効く内容じゃかなと思ってます。

# (前提の話)FormRequestってそもそもなんだっけ?
今回の改善対象であるFormRequestクラスについてまずは軽く触れさせてください。

Laravelにはリクエスト内容をバリデーションする仕組みとしてFormRequestを提供しています。
詳しくは公式やreadouble見てもらいたいのですが、
要はバリデーションに関するルールなどをFormRequestをextendsしたクラス内で行うことで
責務を分割しようという仕組みです。

https://readouble.com/laravel/10.x/

元記事を表示

MailHogを使ってユーザーに招待メールを送信する

MailHogの動作確認をしたので、そのメモを残します。

まず、ターミナルを立ち上げ、「mailhog」を実行。

そして、アプリのメール送信画面に移動する。
![スクリーンショット 2023-05-02 10.08.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/1a402616-3a22-68b0-084b-6963b60e6d56.png)

相手のメールアドレスを入力。
例として、user@gmail.comと入力。
![スクリーンショット 2023-05-02 10.08.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2876907/5249bb15-3413-4c25-dc92-c9a1288782b9.png)

「送信する」ボタンを押下したら、メールが完了したメッセージを表示させる。
![スクリーンショット 2023-05-02 10.09.17.png](https://

元記事を表示

【phpMyadmin】Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.

## 経緯

Laravelで開発をする準備をしていました。
docker-compose.ymlファイルを編集し、DockerのphpMyAdminにログインしようとしたら、エラーでログインできませんでした。

## エラー内容

![スクリーンショット 2024-02-28 21.41.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459296/91ac19a9-203b-c35f-ebeb-0bf86269cde6.png)

:::note alert
Google翻訳
セッションCookieの設定に失敗しました。 phpMyAdmin へのアクセスに HTTPS ではなく HTTP を使用している可能性があります。
:::

## 対応

色々と調べて試したことをまとめていきます

– Googleの拡張機能を確認
まだエラー出でいる…

– Laravel Sailを起動する際に –ssl オプションを使用してHTTPSを有効にしてみる
まだエラー出でいる…

– Doc

元記事を表示

intl拡張モジュールが無い環境でCodeIgniter4を動かす方法

# はじめに

CodeIgniter4の動作要件の1つとして、PHPのintl拡張モジュールが有効化されていることが挙げられますが、CodeIgniter4ベースのシステムをレンタルサーバで運用する際、intl拡張モジュールが無い問題にしばしば遭遇します。が使えないレンタルサーバは)

intl拡張モジュールが有効化されたレンタルサーバやVPS/IaaSを選択すれば解決しますが、諸般の事情により他サービスを選択できないケースもあり、非常に悩ましい問題であったりもします。(CodeIgniter4に限らず、CakePHPやLaravel等の他のフレームワークやCMS等をレンタルサーバ上で運用する際においても、しばしば悩まされます)

今回、CodeIgniter4のソースコードを書き換えることで、intl拡張モジュールの無い環境でCodeIgniter4を動作させることが出来ましたので、以下に手順を記載します。

# CodeIgniter4のバージョン

CodeIgniter 4.4.6

https://github.com/codeigniter4/CodeIgniter4/r

元記事を表示

(Mac ARM) ODBCドライバーを利用してPHPでSnowflakeに接続する

# ODBCドライバーについて

Snowflakeへの接続方法としては下記の選択肢があります。

https://docs.snowflake.com/ja/developer-guide/php-pdo/php-pdo-driver

https://docs.snowflake.com/ja/developer-guide/odbc/odbc-mac

私がPHPでSnowflakeに接続しようとした当時(2023-04-13)は、M1 MacでPDOドライバーを利用するにはバグがり、M1 MacユーザーはODBCドライバーを使ってアクセスする必要がありました。
ただし、現在では[release 2.0.0からはARM Macにも対応しているとのこと](https://github.com/snowflakedb/pdo_snowflake/issues/308#issuecomment-1748833910)です!(まだ試していませんが)

ですので、通常はPHP PDOドライバーを利用すれば良いと思いますが、本記事は備忘録として残したいと思います。

# ODBCドライバー

元記事を表示

MAMPが予期しない理由で終了しました。

以前までは普通にMAMPが使えていたのに久々に開いたら
「MAMPが予期しない理由で終了しました。」
!?!?
![スクリーンショット 2024-02-29 8.35.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3655001/3518f01a-33c4-8864-3622-1556adb54daf.png)

# MAMPを再インストールしよう!
macOSがSonomaかつMAMPのバージョンが6.6だとクラッシュする可能性があるらしい?のでMAMPを再インストールしてみたら見事に解消されました。
めでたし。めでたし。
https://x.com/ZeroPlus_Japan/status/1709762126796165192?s=20

元記事を表示

PHP LaravelでRESTful APIを試す

## はじめに
Larvel PHPでRESTful APIのテストをしたときの備忘録です。CRUDの内容は参考URLの通り。

Laravel8で実施しようかとやろうと思いましたが、Laravel10でも同じ書き方でできるのかなと思い、テスト的にLaravel10で実施しています。

## 環境

・Windows11, XAMPP PHP v8.2
・composerのインストール(EXEファイルによりインストール)

https://getcomposer.org/

~~~ powershell:PowerShell
$ php -V
PHP 8.2.12

$ composer -V
Composer version 2.7.1
~~~

## Laravel10 インストール

・Laravel10のインストール
~~~ powershell:PowerShell
$ composer create-project “laravel/laravel=10.*” –prefer-dist (フォルダ名)
~~~

・実行して確認してみる
~~~ powershell:Pow

元記事を表示

CakePHP の beforeSave() で失敗した際、それを何とか検知したい

# はじめに

この前、弊社 CakePHP4 プロジェクトにて beforeSave() で失敗してしまう不具合がありましたが「見かけ上は save() で失敗しているのに Entity の errors には何のエラーも保存されていない…」という困った状態でした。

しかも beforeSave() の処理そのものは Behavior に書いており、 Table クラスには何も書いてなかったので、beforeSave() の存在に気付くのも遅れました。

なので beforeSave() での失敗を何とか検知したいなと思って調べた結果をメモ。

## cookbook を読んでみる

CakePHP4 の [cookbook](https://book.cakephp.org/4/ja/orm/table-objects.html#beforesave) によると

> ### beforeSave
> Cake\ORM\Table::beforeSave(EventInterface, EntityInterface, ArrayObject)
> Model.beforeSa

元記事を表示

サーバー監視アプリを作ろう

## PHP版サーバー監視アプリ

#### はじめに
データセンターのサーバー監視ツールとは「どのようなもの」、
「どのようなことを」をするのか学習させるためにPHPで監視アプリを作ってみました。
最初はWindowsのXAMPPを使用し、データはMysqlで保存、その後Linuxへ移植しています。

#### 必要な機能は
* 監視対象ホストの状態を一目でわかるビジュアルな画面にできる
* イベント発生のログを出力およびメールで通知できる
* 監視対象ホスト群のレイアウトの画面構成がカスタマイズできる
* 監視対象ホストの追加、変更ができる
* Ping死活監視のほか、SNMP監視ができる
* 統計資料としてのグラフが作成できる

#### カスタマイズ例
![visualmonitor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714448/e4911d15-1917-3acb-1919-ebd45a312d1a.png)

#### 画面フレームは
* ヘッダフルーム
上辺部に画像、時計、

元記事を表示

AWS Cloud9でメールを送る方法

# 結論: SESを使え
「Cloud9 メール」でググると、Cloud9はGmailしか送れない、という情報が真っ先に出ると思います。
そう信じて、ローカル環境はGmailでメールを送っていた時期が僕にもありました。

でもそれはAWSに買収される前の話であって、AWSのメールサービスであるSESが使えないわけないだろ、と最近の私は思い直し、
改めて調査してみたところ、SESでもメールが送れました。
# 実装
PHPMailerを使うことで、SESを使ってsmtpプロトコルでメールが送れます。
“`php:_lib/MailSender.class.php

元記事を表示

CodeIgniter3でAWS SESを使ってメールを送る方法

# はじめに
https://qiita.com/qwe001/items/b340628c2aaffbb12e7a

以前、上記の記事を書いたのはCI3でSESを使ってメールを送る方法がわからず、調べる時間もなかったためでした。
phpMailerで送れるならCI標準機能でも送れるはずだと思って、改めて調査しなおしました。
# 実装
以下のようにすれば、CodeIgniter3の標準機能を利用してSESからメールが送れます。
“`php:application/config/email.php
‘CodeIgniter’,
‘protocol’ => ‘smtp’, // AWS SES の場合は smtp を指定すること
‘mailpath’ => ‘/usr/sbin/sendmail’, // Sendmail への

元記事を表示

unset関数を使用して引数の値を消そう

## はじめに
unset関数を使用すれば引数で渡した変数の値を消すことができます。(未定義扱いになります。値がnullになることはありません)

## 使ってみる
“`php
$num = 12345;
var_dump($num);
unset($num);
var_dump($num);
“`
“`
int(12345)
Warning: Undefined variable $num in sample.php on line
NULL
“`
値がないと警告がでました。3行目にNULLが出力されていてなぜかと調べてみると値がない場合NULLを格納してくれるそうです。

ということは値の無い変数を使用してif文を実行した場合elseが処理されるはずです。
“`php
if($num){
echo ‘trueです。’;
}else{
echo ‘falseです。’;
}
“`
“`
Warning: Undefined variable $num in sample.php on line
falseです。
“`
nullが入っている扱いなのでe

元記事を表示

Diving into the World of PHP Web Development

PHP, or Hypertext Preprocessor, is a powerful open-source scripting language that reigns supreme in the realm of web development. Its ability to seamlessly blend with HTML code empowers it to craft dynamic and interactive web experiences. This article delves into the essence of PHP web development, exploring its functionalities, advantages, and the exciting possibilities it unlocks.

## Unveiling the Magic: How PHP Works

Imagine a website that greets you by name, remembers your preferences, and

元記事を表示

PHPのcurl拡張モジュールでDNSやhostsを使わずに名前解決する方法

# はじめに
コマンドラインのcurlでは、`–resolve` オプションを利用することで、DNSやhostsを利用せずに指定されたドメイン(FQDN)の名前解決を行うことができます。

※`-H ‘Host: example.jp’` のようにリクエストヘッダとしてHostを渡すことでも同様の対応は可能ですが、HTTPSの場合SNIを考慮する必要がある(リクエストヘッダとしてHostを渡す方法だけではSNIを考慮することができない)ため、 基本的にはリクエストヘッダではなく `–resolve` オプションを使うのがベターです。

https://everything.curl.dev/usingcurl/connections/name

この方法は、本番環境移行時におけるDNS切替前のリリース前確認(バックエンド内のAPI通信の動作確認)のような場面において非常に役立ちます。また、DNSやhostsの変更が行えない開発環境・検証環境においても有効です(レンタルサーバ、PaaS/FaaS、自分が管理者ではないサーバ等)。

# PHPのcurl拡張モジュールで `–reso

元記事を表示

composer(phpdotenv)を使用せずPHPで指定した環境変数の取得

## はじめに
【対象】
– PHPでの開発がメインでない方、PHPで指定した環境変数を取得したい方
– composer(phpdotenv)をインストールせずに取得できる方法を探している方

## 環境
PHP:version 8.3.3

## 取得例
“`php:config.inc

“`
`config.incファイルですが、PHPで取得する場合はその形式で書くと取得できました。`
“`php:echoInc.php

“`
` . “\

元記事を表示

WebサーバーをCentOS 7からRHEL 9に移行した話

CentOS 7のサポートが2024年6月30日までとなったので、移行先のOSとしてRed Hat Enterprise Linux 9(RHEL 9)を選びました。備忘録として残します。

環境はGoogle Cloud Platform(GCP)のCompute Engine上で動いているWeb-DBサーバーです。

# 現在の構成
ロードバランサの後ろに本番Web-DBサーバーが1台と、メンテサーバーが1台あります。メンテナンス時はメンテサーバーのインスタンスを起動してロードバランサの振り分けをメンテサーバーに向けます。

“`plantuml
nwdiag {
internet [ shape = cloud];

network ロードバランサ {
internet;

本番Web-DBサーバーCentOS [address = “”];
メンテサーバー [address = “メンテ時に切り替え”];
}
}
“`

今回は本番Web-DBサーバーをCentOS 7からRHEL 9に移行します。

# ミドルウェア

元記事を表示

[Laravel10] Laravel Sailを使用せず、DockerComposeを自前で用意する

# はじめに

Laravel Sailを使用せず、自前でDocker Compose環境を構築します。

※ なお、公式ではLaravel Sailの使用が勧められております。

https://readouble.com/laravel/10.x/ja/installation.html

本記事は暫定版であり、今後、Laravelの実装学習が進むにつれ更新していく予定です。

# Laravel Sailについて

Laravelのプロジェクトを開始するにあたり、開発環境としてLaravel Sailを使用するか悩みました。

SailのPHPコンテナのDockerfileを確認してみると、`artisan serve`経由でPHPのビルトインサーバーを使用しているようで、apacheやnginxなどのWebサーバーのコンテナは存在しませんでした。

https://www.php.net/manual/ja/features.commandline.webserver.php

>このウェブサーバーは単一のシングルスレッドプロセ

元記事を表示

【PHP】配列からIDだけを取り出したい

# はじめに

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

今回はなにをやりたいかというと、
“`php
$array = [
[“id” => 1, “name” => “taro”],
[“id” => 2, “name” => “jiro”],
[“id” => 3, “name” => “saburo”]
];
“`
こんな配列からidの部分だけ抜き足して
“`php
$array = [1,2,3];
“`
みたいなidだけの配列にしたいということです。

# 試したこと① foreach

まずは無難なforeachで試してみました。

“`php
$array = [
[“id” => 1, “name” => “taro”],
[“id” => 2, “name” => “jiro”],
[“id” => 3, “name” => “saburo”]
];

$result = [];
foreach($array as $value){
array_push($result, $value[‘id

元記事を表示

Stackプログラミング言語を実行できるJSライブラリを作った

## 概要

こんにちは!
私がコミュニティで開発しているスタック指向型の強力なスクリプト言語「Stack」を、PHPみたいにHTMLに組み込んで動かせたら便利だと考えて、Webアセンブリ版Stackプログラミング言語を実行するJSライブラリを開発しました。

https://qiita.com/KajizukaTaichi/items/1c3e3ee08d102bfd576c

# コード紹介

“`javascript
import init, { run_stack } from ‘./pkg/web_stack.js’;

init().then(() => {
window.run_stack = run_stack;

// ページの読み込みが完了したら実行する処理
// class が stack である要素を全て取得
const stackElements = document.getElementsByClassName(“stack”);

// 各要素に対して処理を行う
for (let i = 0; i < st

元記事を表示

OTHERカテゴリの最新記事