PHP関連のことを調べてみた2023年01月25日

PHP関連のことを調べてみた2023年01月25日

[CTF] OvertheWire Natas 0 to17 Writeup

ウェブセキュリティを扱った[OvertheWire Natas](https://overthewire.org/wargames/natas/)のLevel 0 ~ 17までの解法

## natas0

開発者ツールでソースを確認するだけ

“`html:index.html

natas0

You can find the password for the next level on this page.


“`

## natas1

右クリックが禁止されているが、F12キーで開発者ツールを開ける

“`html:index.html

natas1

元記事を表示

AWSのEC2でとりあえずPHP Laravelを動かす

今回はこのEC2インスタンスにPHPとnignxをインストールしてLaravelを動かすまで持っていく。

環境
PHP 7.3
Laravel 5.8
Amazon Linux 2
PHP, nginx, php-fpm のインストール
AWSでLaravelを動かすには当然PHPをインストールする必要がある。また、HTTPリクエストを受け付けるために nginx をインストールし、nginx から PHP を起動するための php-fpm というモジュールをインストールする必要があるので、まずこれらをインストールする。

これらものジュールをインストールする方法はいくつかある

(1) ansibleなどの構成管理ツールを利用する (2) サーバー構築後に直接コマンドを叩いてインストールする (3) CloudFormation の UserData を利用してインストールする

一番理想なのは (1) のansibleなどを利用する方法だが、ちょっと試すには重すぎるので、今回は (2) の直接コマンドを叩いてインストールする。最後に CloudFormation を利用する方法も

元記事を表示

【Laravel】初心者向けプロジェクト作成

composerから以下コマンドで「sample-project」というLaravelプロジェクトを作成しようとすると、
エラーが出た。
“`terminal:プロジェクト作成コマンド
composer create-project laravel/laravel sample-project –prefer-dist
“`
“`terminal:エラー内容
The zip extension and unzip/7z commands are both missing, skipping
“`
#### 対応方法
php.iniファイルを開いて、「;extension=zip」となっているところを「extension=zip」に変更する。

元記事を表示

【自分用】ミドルウェアとは? / APサーバーとは? / PHPはなぜAP鯖が不要?

# ミドルウェアって何だっけ?
– OSとアプリケーション(WordPress / 業務アプリとか)の間で動き、
アプリケーションの土台となっている。

– OSとアプリケーションの橋渡し的な役割を担うソフトウェアである。

– アプリケーションへのリクエストを処理する。(AP)
\- プログラミング言語で構築されたアプリを実行する。(AP)
Ex. ミドルWeb鯖(動的コンテンツくれ) -> ミドルAP鯖(了解) -> アプリ実行(プログラム)
Ex. クライアント/ブラウザ(静的コンテンツくれ) -> ミドルWeb鯖(了解:静的コンテンツ)

– 特定の機能に特化してOSとアプリケーションを補助している。

– アプリケーションがよく利用する高度で専門性が高い機能をパッケージ化し、
別のソフトウェアとしてまとめたもの。
\- アプリケーションがよく利用する機能とは:
  アクセス管理、トランザクション管理、セキュリティ管理、ユーザー認証、DB接続など

– ミドルがあることによって、アプリは開発の手間を削減できる。
ミドルの機能を呼出して使うことができるから。無かった

元記事を表示

【PHP】カンマ区切りを配列に変換する

**「DBの関係でカンマ区切りでデータを保存する」**
ということはよくあります。
カンマ区切りを配列に簡単に変えられたら・・・となりますね。

そんな時に便利な関数です。

## explode 文字列を文字列により分割する

explode() を使うと、好きな文字列で区切り文字がある文字列を配列にできます。

“`
$str = “アムロ,シャア,ブライト”;
$str = explode(“,”, $str);
// $str = [“アムロ”, “シャア”, “ブライト”];
“`

### URLから必要な情報を取得する時におすすめです

URLから特定の情報が欲しい時に使えます。
URLに持たせている情報で判別したいことはよくあるので。

「/」で区切りたい時は、「https://」を除いてから使うと良いでしょう。
もしくは、「?」かもしれませんね。

### さいごに
カンマ区切りを配列に変換するPHP関数 explode() の紹介でした。

explode() とセットで使いたいのは、implode() です。
配列を文字列で連結してくれます。
つまり、配列をカ

元記事を表示

【Laravel】 General error: 1215 Cannot add foreign key constraint 【エラー】

# はじめに

この記事では、Laravelの学習中に発生したエラーとその解決方法を覚え書きしておきます。

# 環境
Laravel 5.8
MAMP 5.7
phpMyAdmin 4.9.3

# 今回の状況
マイグレーションファイルをいくつか作成、“php artisan migrate“を実行した際、下記のエラーが発生。

“` :発生したエラー
General error: 1215 Cannot add foreign key constraint
“`

## 先に結論

外部キー制約では、参照元のカラムと参照先のカラムの型が一致する必要がある。
→それぞれの型に違いがあったためエラーが発生していた。

# 対処方法
各カラムのデータ型を揃えることで解決。

## ざっくり手順
“php artisan migrate:rollback“

マイグレーションファイルを修正

“php artisan migrate“
で無事マイグレーションできた。

## 具体的な対応
▼外部キー制約を設定するマイグレーションファイル
“`php:2023_01_2

元記事を表示

生のPHPでフリマサービスを作る_part2

### この記事のシリーズ
– [生のPHPでフリマサービスを作る_part1](https://qiita.com/daichi_hasegawa_stars/items/22f12b7c9aa019781b27)

## フリマサービス作成の流れ
1.機能を洗い出す
2.画面設計(今回はPHPの深掘りがメインなので割愛します)
3.テーブル設計
4.クラス設計 ← 今回はここ
5.実装

## クラス設計
色々とクラス設計のやり方や考え方はあると思うが、、
今回はとにかく可能な限りクラスを作ることにする。

※この段階だと最初に思いつく範囲でしか出てこないので、必要に応じて増やしたり減らしたりします。

##### まずは、エラー発生時の処理やDB接続などのなくてはならないものからクラス化

– Errorクラス
– エラー発生次の対応
– Databaseクラス
– DBへ接続
– Varidateクラス
– バリデーションをまとめたクラス
– Constクラス
– 定数などをまとめたクラス

##### 各機能ごとにクラス化

– Re

元記事を表示

エンジニアインターン5日目

今日も前回と同じようなsql文を修正する作業をした。今日は調子が上がらず、苦労した。完全にメンタルで負けた。そこで、先輩エンジニアは自分に1つの課題に手こずっていると徐々に視野が狭くなり、解決とは遠くなってしまう。そういう時はいっかい頭をリセットさせると効果的。とのことだった。自分は昼休憩をして頭の思考をフレッシュにした。その効果はすぐに得ることができ、いろんなアイディアまで浮かんだ。エンジニアは常にエラーと戦う職業である。だからこそメンタルがとても大事になってくる。長い時間うまくいかなかったら1回その課題から距離を置き、頭をスッキリさせて解決できるように試みよ。そして、何回もチャレンジしよ。そしたら少しずつエラーに対して良いメンタルで迎えられると思う。だからこそ何もできない今が大事だ。エラーを解決することに慣れよう。いろんな思考回路を持とう。良いエンジニアはみんなこの道を通っている。継続して自分も良いエンジニアになれるように努力しよ。

元記事を表示

PHPで陳素数を求める

# はじめに
この記事では、陳素数をPHPで求める方法について触れています。
とある面談で「陳素数をPHPで求めてください」とお題があり、行き詰まったのがきっかけで記事を書いています。
別言語でも基本的なロジックは変わらないはずですので、カスタマイズしてもらえれば良いかと思います。

# 陳素数とは
[wikipedia](https://ja.wikipedia.org/wiki/%E9%99%B3%E7%B4%A0%E6%95%B0)より引用
>素数 p が陳素数(ちんそすう、Chen prime)であるとは、p + 2 が素数または2つの素数の積(=半素数)であることを意味する。例えば 19 は素数であり、2 を加えた 21 は 3 × 7 と2素数の積で表されるので陳素数である。この名前は、そのような素数は無限に存在すると証明した陳景潤による。
>陳素数を小さい順に列記すると次の通り。
>2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 47, 53, 59, 67, 71, 83, 89, 101, …

つまり、陳素数(ここで

元記事を表示

CakePHP4 での setTemplates の勘違い

CakePHP4 での setTemplates で若干ハマったので記事として残しておきます。
CakePHP4+setTemplates で検索すると多くの文献では、

“`php
$this->Form->setTemplates([
‘inputContainer’ => ‘{{content}}’,
‘label’ => false,
]);
“`

のように不要なオプションを出力しない書き方として false にて指定していることが多く見つけられます。
が、これは型宣言があいまいなPHP8より前のPHPバージョンでのみ動く書き方で、型宣言が厳密になったPHP8以降では動作せず \src\View\StringTemplate.php でエラーがでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/687945/e651b70c-1565-4fd4-a23e-9bb2a8d999d6.png)

開発者に確認したら上記説明に加えて、setTemplatesで

元記事を表示

Mapbox地図内のクリックした地点で、町丁目ポリゴンと人口データを取得し、表示させてみる

## はじめに
今回は、Mapbox地図内でクリックした任意地点で、町丁目ポリゴンと人口総数データをリクエストし、地図上に表示させてみました。主な技術要素・使用しているものは以下になります。
– Mapbox および Mapbox GL JS
– JavaScript
– PHP
– TerraMap API(区画ポリゴンや統計データ等を提供するWeb API)

※今回使用している人口総数データは、令和2年国勢調査(2020年国勢調査)の結果に基づいております。

https://www.mapmarketing.co.jp/terramap-api?grid=qiita&utm_source=qiita.com&utm_medium=referral&utm_campaign=qiita_mapbox_click_point_area_210bb89a6f24f09fc8a1_01

## 完成イメージ
今回の完成イメージは、以下の動画のようになります。
地図上の任意地点で、商圏分析の基礎データとも言える町丁目ポリゴンと人口総数データをリクエストし、表示させました。また表示したポリ

元記事を表示

【Laravel】validateメソッドを使ったバリデーション処理

# はじめに
validateメソッドを使ったバリデーション処理について説明します。
Laravelのバージョンは9.43.0です。
# 使い方
validateメソッドは、コントローラの基底クラスに組み込まれている`ValidateRequests`というトレイト(メンバーをまとめてクラスに追加するもの)に用意されている機能です。
第1引数にチェックする項目、第2引数に検証する設定情報を配列にまとめたものを渡します。

“` php
// contorollerファイル
public function post(Request $request) {
// 検証ルール
$validate_rule = [
‘inputタグのname’ => 検証ルール1|検証ルール2,
];
// validateメソッド呼び出し
$this->validate($request, [検証ルールの配列]);
}
“`

# 使用例
コントローラは下記になります。
validateメソッドの第1引数にチェック項目(今回はリクエスト)、第2引数にバリデーションルールを渡しま

元記事を表示

【最低限】Laravel Sailを使った開発環境構築

## Laravel Sail って何?
Laravlの開発環境をさくっと簡単に作成でき、
軽量CLIインターフェースでLaravelへのコマンド操作を行えます。

今回はMac&Dockerで環境を構築します
Dockerがインストールされている前提で進めます

## プロジェクトの作成
“foo-project”というプロジェクト名で作成する場合は以下のコマンドをターミナルで実行します
“`bash
curl -s “https://laravel.build/foo-project” | bash
“`

だいたい5分くらいかかった後でMacのパスワードを求められました。

“`bash
Please provide your password so we can make some final adjustments to your application’s permissions.

Password:
“`

正しいパスワードを入力できればsailコンテナのビルド完了です
“`bash
Thank you! We hope you build something

元記事を表示

Laravel8でCSSが効かない→nginxのdefault.conf設定ミスだった

# 環境
Docker 20.10.14
PHP 8.0.27
Laravel 8.83.27

# 状況
– 以下のサイトを元にDocker + Laravelの環境構築
https://www.torat.jp/laravel-docker-lemp/
– headタグ内に以下の通り記載しているが、CSSが読み込めない
“` “`

# 解決
– 以下のサイトを参考に、nginxのdefault.confに記載を追加
https://teratail.com/questions/376936
(今回はCSSを読み込む目的だったが、JavaScriptについても、いずれ使うと思ったため記載)
“`
location ~ \.css$ {
add_header Content-Type text/css;
}
location ~ .js$ {
add_header Content-Type application/x-javascript;
}
`

元記事を表示

PHPでアプリを作成してみた【掲示板】

## XAMPP 環境構築

公式サイト:[XAMPP](https://www.apachefriends.org/jp/index.html)

①Headerにある『ダウンロード』をクリックする。

②『Launchpadは使用しないでください。Launchpadではショートカットメニューにアクセスできません。』と表示されたので、Controlキーを押しながらアプリケーションアイコンをクリックして、ショートカットメニューから「開く」を選択し、「開く」をクリック。

③インストールする。

## スーパーグローバル変数

全てのスコープで使用できる組み込みの変数の事。
PHPの定義済みの変数の中には、『スーパーグローバル』というものがあり、スクリプト全体を通して全てのスコープで使用可能な変数の事。

## htdocsにファイルを作成

作成したファイルをVScodeにドラッグ&ドロップする
“`index.php

元記事を表示

PHPerが学ぶGo言語③ 例外処理

っす。豚野郎です。
今回は例外処理を書いていきます。

Go言語は例外処理構文(try、catch等)がありません。
その中で例外処理を実行していきます。

※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。

**go version go1.19.4 darwin/amd64**

# 1. fmt.Errorf()
“`sample.go
package main

import “strconv”
import “fmt”

// fmt.Errorf()で例外情報作成
// fmt.Errorf()の戻り値の引数はerrorにする。
func Calculation(num int) (string, error) {
if num != 1 {
// Go言語では、エラー情報を2番目に返すことを推奨されている
return “”, fmt.Errorf(“1ではありません。”)
}
num += 1
return “1 + 1 =

元記事を表示

Laravel9でアプリを作成してみた【ゴミ箱付きToDoリストアプリ】

## ファイル構成
“`
docker-config
├─ mysql
├── data //データの保存
└── my.cnf
├─ nginx
├── Dockerfile
└── default.conf
├── php
├── Dockerfile
└── php.ini
“`
“`
docker-compose up -d
docker ps

“`

## 参考サイト
[【シンプル解説】Laravel9でゴミ箱付きToDoリストアプリを作る](https://www.youtube.com/watch?v=HHHN76dHrv0&t=1144s)

元記事を表示

コンストラクタインジェクションを紐解く

# コンストラクタインジェクションとは

**依存先のモジュールを自ら生成せずに、コンストラクタの引数としてもらうようにすること**です。

はい。イメージつきにくいですよね…。

# コンストラクタインジェクションしていない例

Carクラス内で、Engineクラスのインスタンスを作成しています。
“`php
class Car
{
private $engine;

public function __construct()
{
$this->engine = new Engine();
}

public function move()
{
$energy = $this->engine->run();
}
}
“`

# コンストラクタインジェクションしている例

Carクラス内で、Engineクラスのインスタンスは作成していません。
引数としてEngineクラスのインスタンスを受け取っています。

“`php
class Car
{
private $engine;

元記事を表示

生のPHPでフリマサービスを作る_part1

## フリマサービス作成の流れ

1\.機能を洗い出す
2\.画面設計(今回はPHPの深掘りがメインなので割愛します)
3\.テーブル設計
4\.クラス設計
5\.実装

### 機能を洗い出す
**今回の作るフリマサービスの機能は以下の通り**
– ユーザー登録
– ログイン
– ログアウト
– 退会
– プロフィール登録
– プロフィール編集
– パスワード変更
– パスワードリマインダー
– 決済(余裕があれば)
– コンテンツ登録
– コンテンツ編集
– コンテンツ削除
– コンテンツ一覧表示
– コンテンツ詳細表示
– コンテンツ検索
– コンテンツ毎の掲示板表示
– コンテンツ毎の掲示板へのメッセージ登録
– お気に入り登録

### テーブル設計
以下のように設計する
![スクリーンショット 2023-01-22 0.31.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461162/6f8d7e0d-29f0-93a3-5b42-bef4fa9ac15c.png)

###

元記事を表示

【Smarty】JavaScritpを別ファイルに書くときの読み込みパス

# Smarty使用時にJavaScritpを別ファイルに書くときの読み込みパス

## 発端
* javascriptをjs専用のフィアルに書いてそれをSmartyで読み込みたかったがうまく読み込めずハマったので備忘録。

## 原因
* Smartyからのパスを書いていた。

## 解決方法
* そのテンプレートファイルを呼び出しているPHPからのパスを書く。

## 詳細
* ディレクトリ構造
“`
test–
|-layout
| |_resource
| | |_javascript.js
| |_layout.tpl
|
|-module
| |_module.php
|
|-template_c
“`
* module.phpでlayout.tplを読んで画面に表示させているとき、layoutに記述したinputタグの内容についてjavascriptで処理をしたいとする。

“`html:layout.tpl

元記事を表示

OTHERカテゴリの最新記事