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

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

PHP: SMTP over SSL でメールの送信

こちらのプログラムを改造しました。
[PHP: PHPMailer の使い方](https://qiita.com/ekzemplaro/items/de40de3ac7f66a3e2a1b)
>Port は、465 です。

## プログラム

“`php:phpmailer_smtp_ssl.php
#! /usr/bin/php

元記事を表示

php.netの「Upcoming conferences」に「PHPカンファレンス福岡2024」も掲載してほしい

今年は「月刊PHPカンファレンス」といった感じで、[1月を皮切りに6月まで毎月どこかでPHPカンファレンスが開催される](https://qiita.com/akase244/items/c3f9855275ac77be39b3)ことをご存知でしょうか?

LaravelでGuzzleを使ってSpotifyAPIを叩く

# はじめに
LaravelでSpotifyのAPIを叩いた時にGuzzleを使ってみたので、備忘録的な感じでまとめておきます。

今回は、ユーザーに事前にSpotifyの認証を行ってもらい、各種Tokenを取得した上で処理を行なっているため、認証部分の処理は割愛させていただきます。(気が向いたら書くかも)

# Spotify APIとは
Spotifyが用意して公開してくれているもので、楽曲に関する詳細なデータを取得することができます。
登録が必要なので、事前に登録を済ませておいてください。
詳しくは、[こちら](https://developer.spotify.com/documentation/web-api)を参照してください。

# 手順
1. SpotifyのDeveloperに登録を行い、Appを作成し、Client IDを取得する。
1. Client IDを使い、ユーザーに認証を行ってもらい、Access Tokenを取得する。
2. 取得したアクセストークンを使い、プレイリストの曲を取得する。

# 実際に書いてみた

:::note warn
必要最低限のコー

元記事を表示

[PHP]PHPの基本まとめ

## はじめに
学習したことを自分用の参考書のようにまとめていきます。

## PHPとは
PHP (PHP: Hypertext Preprocessor を再帰的に略したものです) は、動的にWebページを生成することができるサーバーサイドのスクリプト言語です。

## 環境構築

PHPではPC内に動作環境を用意してあげなければなりません。
動作環境を構築するために、Macの方は下記URLより「MAMP」をインストールしましょう。

– MAMP公式

https://www.mamp.info/en/mac/

– MAMP インストール・操作方法 参考サイト

誰でもできる!MAMPのインストール方法【初心者向け】

## PHPの始め方

1. MAMPフォルダの中から”htdocs”という名前のフォルダを開く
2. htdocsフォルダの中に”php_test”というフォルダを新たに作成する
3. 作成したフォルダの中に”index.php”という名前のファイルを作成する
4. 作成したindex.phpを編集する
5.

元記事を表示

class.upload.php の XSS 脆弱性について

先日、CVE-2023-6551 として PHP のファイルアップロードライブラリ「class.upload.php」のクロスサイトスクリプティング脆弱性が発表されたので、使用しているプログラムを今一度確認しました。
幸い、外部ユーザーがアップロードする箇所では使用していなかったし、ちゃんと検証していたので、特に問題はありませんでした。

この脆弱性は、MIME タイプを評価するクラスが適正に機能しないことがあるというものです。

例えば、
“`php
$handle = new Upload($file, ‘ja_JP’);
$handle->allowed = array(‘image/gif’);
“`
と設定していても、中には悪意のあるファイルが通過してしまうことがあります。
.html などがアップロードされてしまうと、開いたときに中に書いてあるスクリプトが実行されてしまう可能性があります。
※ プログラムはまだ読んでいません(おい)

## 対処法
まだ詳細は調査中とのことですが、とりあえず記載されていた対策をまとめておきます。
### レスポンスに想定される MIME

元記事を表示

PHP入門 – 他言語からPHP触った時用

# 概要
他言語からPHPを触った時に戸惑うPHP独特の変数宣言や代入、処理についてまとめ

# 宣言関連
## 変数の宣言, 代入, 定数
“`
// 宣言
$a;

// 代入
$a = b;

// 定数
const $a = b;
“`
※ 変数名はアルファベット, もしくわアンダーバーから始まる必要がある

文字列は`’`か`”`で囲う

## boolean
“`
$bool = true
$bool = FALSE
“`
※ 小文字, 大文字は区別しない

## 配列, 連想配列
### 配列
“`
$array = [
‘要素1’,
‘要素2’,
‘要素3’,
‘要素4’
];
“`

### 連想配列
“`
$array = [
“id” => 1,
“name” => “日本 太郎”
];

// keyでの要素呼び出し
$array[“id”]
“`

## オブジェクト
“`
class object {
public $id = 1;
public $name = “日本太郎”

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~参照可能ファイル編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/535811002aaee3134db3)の記事でファイルのダウンロード方法をまとめました。
今回はFlowにおける静的ファイルなどの参照可能なファイルの扱いについてまとめます。

# 事前知識
今回の記事は以下の記事に関連する内容を扱います。
必須ではないですが、必要に応じてご覧ください。

[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルアップロード編~](https://qiita.com/nnhkrnk/items/f06f40bf8e1159eff80d)
[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルダウンロード編~](https://qiita.com/nnhkrnk/items/535811002aaee3134db3)

# Flowにおけるファイル管理
前提として、Flowではファイルを保存する領域が2つ存在します。

|領域|用途|
|–|–|
|Storage|アップロードされたファイルが保存される領域|
|Target|

元記事を表示

スマホでペット用監視カメラを作ってみた

# はじめに
スマートフォンを使った監視カメラシステムを作ってみました
作ろうと思い立ったきっかけですが、昨年ワンちゃんを一頭飼い始めて
最近もう一頭増えたのと、その子が保護犬ということでなかなか目が離せないということもあり、スマホを使って外出先から自宅のワンちゃんの様子を確認出来る仕組みを作ってみようと思ったのがきっかけです

| 1頭目 | 2頭目 |
|:-:|:-:|
| 01_choco.jpg | 02_coronet.jpg

元記事を表示

Laravelのリレーションがやっとわかったので備忘録(え、いまさら?)

# 今回作成するモデル
“`mermaid
erDiagram

User{
id int
username string
email string
password byte
}

Profile {
id int
user_id int
name string
description string
}

User||–o|Profile:””

“`

# Modelの書き方

“`(親側)User.php

元記事を表示

ルーティングを間違えるとコントローラにはアクセスできない

## はじめに
Laravelでテストコードを実装していた時、ルーティングを間違えたせいでコントローラにアクセスできず、しばらくブロックされていました。

基本的な所ではありますが、自戒も込めて対応法をまとめておきます。

## 環境
Laravel 9.52.16

## 問題
* 問題となったテストコード

“`php: SalesOrdersControllerTest.php(一部略)
public function test_sales_destroy(): void
{
// テスト用のユーザを作成
$user = User::factory()->create();

$formData = [
‘category_id’ => 1,
// 以下略
];

// フォームデータを保存
$response = $this->actingAs($user)->post(‘/my/sales/store’, $formDat

元記事を表示

値をPOSTされた時のみ処理を行う PHP

## はじめに
値を受け取った時のみ処理を行うコードです、POSTのみに限りませんが備忘録として置いておきます。

## 使ってみる
post.phpとFunc.phpがあります。
func.phpはPost.phpから送られたmessageをテキストに追加していきます。
“`php
//post.php



“`
“`php
//func.php

$message = filter_input(INPUT_POST, ‘message’);
$message = $message ?? ‘値が空です’;

$fp = fopen(‘messages.txt’, ‘a’);
fwrite($fp, $message . “\n”);
fclose($fp);
“`
このコードだと手入力でlocalhost:8080/Func.phpとすると「値が空です」とテ

元記事を表示

良いコード悪いコードで学ぶ設計入門を読んで(その①)

# 前置き
今年の目標に小規模~中規模のリファクタリングができるようになることを設定しました。まずコードの良し悪しの判断基準が明確に分からなかったので名著である『良いコード悪いコードで学ぶ設計入門』の内容を纏めることで今後のphp,Laravelのアプリケーションの開発に生かしたいと思いました。

## 1章 悪しき構造の弊害を知覚する
– 技術駆動命名や連番命名をしない

“`sample.php
class MemoryStateManager{
void changeIntValue01(int $changeValue){
$intValue01-=$changeValue;
//以下略
}
}
“`
MemoryStateManagerみたいな関数の技術駆動命名結構してたかもしれない
他者から見ると意図がわかりにくいのか、知らなかった。注意する。
– 条件文の巨大なネスト

ネストが深くなると仕様変更などに時間がかかるという話

– 様々な悪魔を招きやすいデータクラス

“`DataClass.php
public cla

元記事を表示

網羅率とテストスイートの質との関係

## 概要
網羅率が低いテストスイートの質が悪いことを示せても、網羅率が高いテストスイートの質がいいことは証明できない

## 定義
> **網羅率(coverage)とは、テストスイートに含まれているテストケースが実行するプロダクションコードの割合のことです。**
>
> _単体テストの考え方/使い方 p11_

## コード網羅率(テスト網羅率)の落とし穴
“`math
コード網羅率 = \frac{実行されたコードの行数}{総行数}
“`

下記のテストはコード網羅率100%になるが、実際にはテストされていない振る舞いがある($inputの長さが5以上の場合)

“`php
function isStringLong(string $input): bool
{
return strlen($input) > 5;
}

function test入力文字の長さが5以下の場合falseが返る()
{
$result = $this.isStringLong(3);
}
“`

## 分岐網羅率
“`math
分岐網羅率 = \frac{経由された経路の数

元記事を表示

【Laravel10】変数展開の際に気をつけること(エラー対処:syntax error, unexpected token)

Laravelのビューファイル(拡張子「.blade.php」)にif文を記述したところ、構文エラーが発生するなどの問題が発生してしまいました。
初歩的な内容ではありますが、対処方法の備忘録として作成した記事です。
# 問題
* 「syntax error, unexpected token “<"」というエラーが発生。 * 記述した関数がそのままブラウザに表示される。 # エラー発生時のコード ※$items:itemsテーブルから取得したデータ。 ```php:resources\views\item\example.blade.php {{-- 省略 --}} @foreach ($items as $item)

{{ $item->id }}
元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルダウンロード編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/f06f40bf8e1159eff80d)の記事でファイルのアップロードについてをまとめました。
今回はFlowを用いてファイルダウンロードの実装方法についてまとめます。

# 事前知識
この記事はFlowにおける基本的なDB操作ができることを前提に記載しています。
以下の記事を読んでから読むことをおすすめします。
[【PHP】マイナーフレームワーク「Flow」を試してみる~API作成編~](https://qiita.com/nnhkrnk/items/2b9f647d6130a098345f)
[【PHP】マイナーフレームワーク「Flow」を試してみる~DB接続&データ登録編~](https://qiita.com/nnhkrnk/items/739ac12036c858525e23)

また、この記事は以下の記事の続きです。
[【PHP】マイナーフレームワーク「Flow」を試してみる~ファイルアップロード編~](https://qiita.com/nnhkrnk/items/f06f40

元記事を表示

【バックエンド】駆け出しエンジニアが目指すジュニアレベルのエンジニアとは【2024年版】

# はじめに
こんにちは。
普段はフロントエンドの開発をメインでやっておりますmamiと申します。
最近バックエンドの方の勉強や、少しずつですがDB設計やAPI作成などの業務もやらせてもらえるようになったので、自分のエンジニアとしてのレベル感や、この先目指すべき道筋を明確にしたいな〜という思いでこの記事を書いております。

これは自分のための記事であると同時に、同じように駆け出し中のエンジニアさんや、ミドル層を目指す手前のエンジニアさんにも刺さる内容になっているかと思います。
今、**自分がどのようにキャリアアップしていく**べきなのか、どのような道筋で**スキルを磨いていけばいい**のか。そんなふうに悩んでいる方は是非読んでみてください。

※内容はバックエンドエンジニアが対象になりますが、フロントエンドの方もなにか通じるものがある…かもしれません。
ちなみにですがフロントエンドの方の記事は下記で執筆していますので、興味のある方はぜひ読んでみてください。

https://qiita.com/mamimami0709/items/c9657367a8e7dfdca070

#

元記事を表示

PHPでのSQL文の実行時の注意 – 備忘録(´・ω・`)

# 何この記事
その名の通り備忘録。
みんなが知っているSQLインジェクション対策で同じように間違えないように、、、
# 短い本編
初心者と経験者と分けて説明します。
今回使うテーブルにはサザエさん一家を使います。
テーブル名:Family
| ID | Name |
|:-|:-|
|1|フグ田サザエ|
|2|磯野波平|
|3|磯野フネ|
|4|フグ田マスオ|
|5|磯野カツオ|
|6|フグ田タラオ|
|7|磯野ワカメ|
|8|タマ|

### 初心者
PHP触りたてほやほやの人が書きそうな文
“`PHP
$ID = 1;
$sql = “SELECT*FROM `Family` WHERE ID = ‘” . $ID . “‘;”;
$stmt = $dbh->query($sql);
“`
おや?SQL文が簡単そうですね。では、実行してみましょう。
#### 結果
| ID | Name |
|:-|:-|
|1|フグ田サザエ|

IDが1の人がヒットしました。さて、皆さんはお気づきかもしれませんが、この文では攻撃が簡単にされてしまうんです。
では、攻撃をしてみましょうw
`

元記事を表示

LaraveでCSSをresourcesディレクトリ内に配置する

# はじめに
今まで’***public/css***’ ディレクトリ内に配置していたが、’***resources/css***’ ディレクトリ内に配置する方法をまとめる

# 開発環境
Laravel 8
Node.js

# ‘***public***’ と ‘***resources***’ ディレクトリの違いについて

| ディレクトリ名 | 説明 |
|:-|:-|
| public | 外部から直接アクセス可能なファイルを格納するための場所 |
| resources | アプリケーションのリソースやソースコードを格納するための場所
Laravel Mixなどのビルドツールを使用して最終的な成果物が ‘***public***’ ディレクトリに配置される |

# Laravel Mixの設定
‘***webpack.mix.js***’ ファイルを編集し、どのCSSファイルをコンパイルし、どのJavaScriptファイルをバンドルするかを指定する
“`JavaScript:webpack.mix.js
mix.js(‘resources/js/app.js’,’

元記事を表示

備忘録:メール送信機能の実装(Laravel8)

## はじめに
備忘録として、メール送信機能の実装方法についてまとめた

## 開発環境
Laravel 8
Laravel-permission
※宛先判定のため、Laravel-permissionパッケージを導入

## 実装したいこと
ブラウザ上で送信したい本文を入力し、指定する宛先に送信する

## 環境構築
**.env**ファイルにメールサービスの設定を追加する。
“`php:.env
#Gmailを使用する例

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=from@example.com
MAIL_FROM_NAME=”${APP_NAME}”
“`

## Markdown Mailableクラスの作成
*Mailable*クラスを作成
同時に*Markdown*を使用することを指定する
“`ph

元記事を表示

OTHERカテゴリの最新記事