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

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

PHPとPythonの比較勉強ー複数行にわたる入力 (paizaランク D 相当)

https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_std_in_out_step3

PHPを仕事であんまり使わなくなって今Pythonをやっているんですよね。
で、やらなくなっているとなんというか腕が鈍ってしまったりしまして。
それだとだめだなと思ったので今年から1日1回はPHPも解くようにしました。

ひとまずPythonで書いてみます

“`py

n = int(input())
for _ in range(n):
print(input())
“`
簡単ですね。
では次にPHP

“`php

“`
一応正解はしたのですが。
fgets(STDIN)で取得したものはtrimしないといけないみたいです。
なんでなのか調べたら、どうやら、入力されたときの改行を除去するため、という
意味があるそうです。
問題

元記事を表示

【Laravel】多言語化のための言語ファイルをコマンドで出力する

Laravel の多言語化対応をすることになったのですが、どうやら CakePHP とは違い標準で翻訳文字列を配列なり json なりで一括出力する方法は用意されていない模様。そんなことある…?

packagist で適当に「laravel trans」とか入れて検索し、適当にというか簡単に言語ファイルを出力できそうなパッケージを検索。それっぽいパッケージを見つけたので使いながらメモ。

## kkomelin/laravel-translatable-string-exporter

### インストール

通常、本番環境で使う事はないと思うのでオプション –dev でインストール

“`bash
composer require kkomelin/laravel-translatable-string-exporter –dev
“`

### 言語ファイルの出力

専用の artisan コマンドが使えるようになるので、そちらを実行する

“`bash
php artisan translatable:export

# example
# 英語の言語

元記事を表示

Laravel Sail – vscode devcontainer で xdebugを使う

## やりたかったこと

vscodeのdevcontainerでxdebugを使いたい(chrome)

## 備考

#### 読み手の対象:
すでにdevcontainerで開発している方
vscodeでxdebugを触ったことがある方

#### 環境:

“`
PHP 8.2.10 (cli) (built: Sep 2 2023 06:59:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.10, Copyright (c) Zend Technologies
with Zend OPcache v8.2.10, Copyright (c), by Zend Technologies
with Xdebug v3.2.1, Copyright (c) 2002-2023, by Derick Rethans
“`
Laravel Framework 10.23.1
Google Chrome バージョン: 120.0.6099.129(Official Build) (x86_64)
Dev

元記事を表示

【Laravel】サービスコンテナ・プロバイダ・依存性注入の仕組みを整理したさ

## #0 書いた背景

サービスコンテナやサービスプロバイダ、ファサードなどフレームワークの仕組みを特に意識することなく開発はでき、それがフレームワークの良さとも感じる、ただ、そろそろちゃんと理解しようと思ったとき色々な概念や単語が交錯して障壁を感じた。

これから書く内容は

「サービスコンテナはオブジェクト間の依存解決をやってくれますよ」
「サービスコンテナを使うにはこんなプロセスを経ますよ」
「サービスプロバイダとサービスコンテナの関係はこんなですよ」
「サービスコンテナの主なメソッドにはこんなのがありますよ」

という話を並べているであるが、ソースコードまで見ると以下のように出てくる概念や単語が多いので、整理しながらサービスコンテナの機能を追っていくというのが趣旨である。

– サービスコンテナ
– 依存性注入
– 依存関係の解決
– サービスプロバイダ
– シングルトン(singleton)
– バインド(bind)
– 登録(register)
– 解決(resolve)
– 抽象(abstrat)/具体(concrete)

よって結論とかは特にない。

前提として現在

元記事を表示

Factoryクラスに何も書かなくてもいいケース

## はじめに
Laravelでテストを実装中に「Class “Database\Factories\MessageRoomFactory” not found」というエラーに遭遇しました。

今回は、database/factoriesに新しくMessageRoomFactoryクラスを作成することで対処ができました。」

https://readouble.com/laravel/10.x/ja/eloquent-factories.html

## 環境
Laravel 9.52.16

## 問題
* 次のようなテストを実行したい

“`php: MessagesControllerTest.php(該当メソッドのみ)
public function test_Messages_store()
{
// テストユーザを作成
$user = User::factory()->create();
// メッセージルームを作成
$message_room = MessageRoom::factory()->cr

元記事を表示

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 }}
元記事を表示

OTHERカテゴリの最新記事