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

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

プログラムを書く時にやること

この記事は[記事は道メン(身内向け)アドベントカレンダー](https://adventar.org/calendars/6306)の12/24の記事です。
# 導入
最近、「これがわからないので教えてほしい」と言って質問を頂く機会が増えてきました。もちろん答えるのですが、私にとって前提であると思っていたものが欠落している場合があり、そこから教える必要がある例もありました。また、いきなりプログラムを書き始めるような方もおり困惑することもありました。
そこで、今回は私がプログラムを書くにあたってやっていることをそのまま書いていきます。
言語は、PHPとします。
テーマは、簡単に__「九九の結果を二次元配列で作成し、出力する。」__とします。
出力例は以下の通り

1 2 3 4 5 6 7 8 9
2 4 6 8
中略
72 81

# まずやるべきこと
まずやるべきことは、「コードエディタを開いて、`

元記事を表示

session_regenerate_idをすべき理由

今日ならった2つのセッション攻撃

①セッションID固定化攻撃
②セッションハイジャック 

を理由にセッションIDを定期的に再発行しないといけない。

①セッションID固定化攻撃は
 
 不正なURL(ブラウザ側で発行したセッションIDも使用可能にする機能を悪用)からログインすることで、なりすましになる。

②セッションハイジャックは

セッションIDを盗みだしたり(ネットワーク盗聴などで)、推測でセッションIDをとられること。

PHPではページ移動間などで定期的なセッションID再発行をこころかけましょう。

※個人の勉強のメモのための記事でございます。

元記事を表示

php-mysql-engineをCSVファイルのデータ集計に使ってみる

この記事は ラクスAdvent Calendar 2021 24日目の記事です。

## `php-mysql-engine`とは
`php-mysql-engine`は、[Psalm](https://psalm.dev/)でも知られるVimeo社が公開したライブラリで、PDOを使ったMySQLの操作をデータベースサーバに接続することなくエミュレートしてくれるというものです。

これを使えばDBを含めた自動テストを手軽に実行できるということで、Vimeo社はもちろん、日本だとpixivの一部サービスでも利用しているそうです。

https://inside.pixiv.blog/2021/02/18/123000

PHPerKaigi 2021のLTでも紹介されていましたね。

https://speakerdeck.com/o0h/phperkaigi2021-lightning-talk

## ところで
話は変わりますが、ログなどの集計にSQLを使いたいことが稀によくありませんか?私はあります。
数ヶ月に一回しか使わないawkよりも、普段よく使うSQLでデータ集計したいところ

元記事を表示

PHP プロパティに関しまして。

PHPのClassとfunctionをつかうとき、
プロパティを下記のように生成すると思うが、

“`php:test.php

$y = 1;

var_dump($test1);

“`
“`
結果は
object(test1)#1 (2) {
[“q”]=>
NULL
[“y”]=>
int(1)
}
“`
PHPの講義では、丁寧にプロパティを一々生成してくれますが、
一般的ではないようですが、プロパティをClass内で生成しないコードもあると思うので、
参考までという感じで記事を書いておきます。

“`php:test2.php

pdo

元記事を表示

declare(strict_types=1); でPHPのstrictモードの設定をする

業務でPHPファイルに `declare(strict_types=1);` を導入するにあたり調べたことをまとめます。

## declare(strict_types=1); の意味を解く

### declare

あるコードブロックに対して、何らかの設定をするための構文。
`declare(ディレクティブ)`のように書いて使う。

現在のところ使用できるディレクティブは `ticks, encoding, strict_types`の3つ。

https://www.php.net/manual/ja/control-structures.declare.php

### strict_types=1
PHPの暗黙の型変換を禁止して、型指定に厳密にチェックする設定のこと。

PHPのデフォルトでは自動変換モード(詳しくは後述)になっているが、 `declare(strict_types=1);` をファイル先頭に書くことでそのファイルはstrictモードに設定することができる。
> スカラー [型宣言](https://www.php.net/manual/ja

元記事を表示

PHP+SQL 課題

## 掲示板課題

機能要件
①ユーザー登録機能
仮登録と本登録、メール認証のながれ。
・仮登録時に登録ユーザーのメールアドレスにアドレス送信

②ログイン機能
・ユーザーID(もしくはメールアドレス)とパスワード入力によるログイン

③記事の投稿機能
・ユーザーが記事の文章を投稿出来る
・記事のタイトル、投稿日時、投稿者を表示する

④コメント機能
・記事に対してのコメント
・コメント日時、コメント投稿者を表示する

元記事を表示

macOSに最新のPHPとcomposer installをインストールする方法

macに homebrewをインストールする

“`
/bin/bash -c “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)”
“`

https://brew.sh/index_ja

phpの最新バージョンをインストールする

“`
brew install php
“`

既にhomebrewがインストールされておりhomebrewのversionが古く下記のエラーが発生した場合は、
homebrew自体のバージョンアップをして下さい。

“`
brew update-reset
“`

php インストール時のエラー

“`
Error:
homebrew-core is a shallow clone.
homebrew-cask is a shallow clone.
To `brew update`, first run:
git -C /usr/local/Homebrew/Library/Taps/homebrew/ho

元記事を表示

【python】dict変数に苦労した(1)

2021年8月からAWSのLAMBDAとdjangoでpythonの仕事をやり始めたんですが、これまでPHPばかりに偏ってたものでpythonに慣れるのに結構苦労した事の中で、dict変数があったのでその辺の事を書いてみます。

###1.PHPだと連想配列は簡単に作れたが、dictは宣言が無いとエラーになって勝手に作ってくれない
PHPでは、自分の必要な時に

“`php
$sample1[“hoge”] = “aaabbbccc”;
“`
のように書けば、配列変数\$sample1が作成され、$sample1[“hoge”]という連想配列が作成され、aaabbbcccを代入してくれる。

pythonのdict変数でこれをやると、NameErrorとなってしまう。

“`
C:\project\python_test>python3 sample1.py
Traceback (most recent call last):
File “sample1.py”, line 2, in
sample1[“hoge”] = “aaabbbccc”

元記事を表示

todolist_php

# 環境

以下の環境で作成します。

mac
php8
laravel8
vscode(なんでも良い)
php artisan serve(laravelのbuilt in サーバ)
mysql(ローカルにインストールする)

# mysqlのインストール

homebrewを使えばできる
https://prog-8.com/docs/mysql-env
*上記ドキュメントは、mysql5.7を使ってますが、平塚は8です。ここはどっち使ってもいいです。

## インスールできてるか確認

以下のコマンドでmysqlのバージョンが取得できればOK
“`
mysql –version
“`

一応ログインできるか確認
“`
brew services start mysql
mysql -uroot
“`
*上の例では、rootのパスワードをセットしに行ってますが、そこは余力があれば対応しましょう。
*基本的に自分のmacの勉強用なら、rootのパスワードはあってもなくてもどっちでもいいと思います。
大した情報を管理することもないと思うので。ただし自己責任で。

# いよいよ

元記事を表示

【baserCMS】AdminPageEditable プラグインを作りました。

こんにちは!
私は普段CMSを使ってコーポレートサイトを構築しているWEB系のエンジニアです。
なかでもbaserCMSを使って構築することが多いでのすが、今回専用プラグインを作ったのでご紹介です。
baserCMS4.5.4で当該プラグインが動作することを確認しました。
※4系の最近のバージョンだと動きそうですが3系とかはまったく動作しないかと

# 前提

CMS、PHPフレームワーク、MVCモデルがわかる
イベント処理がわかると尚良いかも

# baserCMSとは
https://basercms.net/about/index.html

# AdminPageEditable プラグイン

## 概要

baserCMSでは管理画面で自由に固定ページを追加、編集することができます。
コンテンツ編集エリアにテキストや画像などのファイルを貼り付けたりできる高機能なwysiwygエディタを備えているのですが時々一部どうしてもcssやjs、phpを使用して動的表示したい場合があると思いますがそういうかゆいところに手が届く機能が固定ページ編集画面に「コード」欄としてデフォルトで存在し

元記事を表示

クリスマスイブなのでハートをパーティクルで作りましょう!

はじめに

皆さん!こんにちは!
1年は早いもので、気づけばもうクリスマスイブです!
クリスマスにちなんで今回はハート型にパーティクルを展開するコードをメモ程度に残しておこうと思います!

注意

筆者は時代の流行に追いついていないので**PocketMine-MP3**を基準にしてこの記事を書いております。
ここに乗ってるコードを使用する際は、PocketMine-MP4の記述方法に変更してから実装してください。
それとこの時期はExplosionクラスも用意したほうがいいかも!

数式

ハートに描画する数式は以下のとおりです。
筆者は数学が死ぬほど嫌いなのでネットで探したりそれを[scratch](https://scratch.mit.edu/)で試したりしてます。

“`
x+size*sin(rad)^3*2
y+2+(size*cos(rad)-cos(rad)^4)*2
“`

実装

実際にプラグインで実装してみます。

“`php
for ($i=0; $i<360; $i+=10) {

元記事を表示

ポートフォリオを公開してたらサイバー攻撃された話 〜Laravelで多重送信対策をしよう〜

## 初めに

去年の今頃、私は未経験からサーバーサイドエンジニアを目指して転職活動をしていて、
Laravel6系で開発したポートフォリオをインターネット上に公開していました。

実装のツメが甘い部分もあり、いろんなイタズラをされては対策して..を繰り返していましたが、
ある日容赦ないサイバー攻撃をくらってしまい、サーバーが死にかけるという経験をしたので
今回はそんな当時の出来事と、どう対策したかを記事にしてみようと思います?

現在 転職活動でポートフォリオを作成されている方や、プログラミング学習中の方のご参考になれば幸いです?

## 最初はまだイタズラレベルだった..

当時開発していたポートフォリオは、朝活をテーマにしたSNSアプリでした。
twitterみたいに、ユーザーが投稿できる機能があります。

![スクリーンショット 2021-01-15 22.59.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/613419/87067860-

元記事を表示

初心者が語るフレームワークの違いと魅力 ~CakePHPとLaravel~

# 自己紹介
これは[ランサーズ Advent Calendar 2021 24日目](https://qiita.com/advent-calendar/2021/lancers)の記事です。

こんにちは!
24日、クリスマスイブの記事を担当しますのは、Lancersでエンジニアインターンをしている高橋宏和です。

私は2021年3月から10ヶ月ほどインターンを行なっており、以下の開発を経験させていただきました。

– **3月〜10月: CakePHP**?
– 管理画面
– バッチ
– [lancers.jp](https://www.lancers.jp/)

– **10月〜12月: Laravel**
– [Menta](https://menta.work)

Web開発初心者がCakePHPとLaravelによる開発を経験してみて感じた違いと、これいいなと感じたことを僕の主観に基づいて率直にまとめています。フレームワークとしてのCakePHPとLaravelの違いだけでなく、LancersとMentaの開発の違いにも少し触れていきます。

CakePHPの

元記事を表示

「〇〇でハマった。。」を避けるコーディング

## はじめに

**書いたコードが思い通りの挙動をしないが、なかなか原因が分からず困り果てる**

俗に言う、「ハマってしまった」状態。

– 予約語を知らないうちに使っていた
– 全角空白や制御文字が混入していた
– ポインタや参照を経由して値が変更されていた
– 演算子の優先順位を誤解していた
– 囲むやつ(カッコ、do-end、if-fi)の数は合っているが場所がずれていた
– 言語仕様上、必要な空白が抜けていた
– **原因わからないけど、いろいろ弄ってたら直った!!!**

などなど^^;

仕事で「ハマる」と、予実が大きく乖離していき**プロジェクトに迷惑がかかります**。
プライベートで「ハマる」と、楽しかった作業が一気につまらなくなり**モチベーションだだ下がり**です。

挙げたリストの中には、「知らないと分からないよね〜」というものもありますが
**コーディングの手順を工夫すれば、より短い時間で解決できる**ものも多いです。

今回はそんな「ハマる」を避ける為の工夫をまとめたので、紹介します。

## この記事で伝えたいこと

– ハマらない為の心構え
– ハ

元記事を表示

新卒のコードリーディング

##始めに
こんにちは、@S_onizawaです。
こちらは[CYBIRDエンジニア Advent Calendar](https://qiita.com/advent-calendar/2021/cybird) 24日目の記事です。
前回、23日の記事は@gumitaさんの『応用情報技術者試験に向けて失敗から学んだ対策法』です。
非常に簡潔にまとめられていてわかりやすいですね!
応用情報技術者試験だけじゃなくて他の試験にも通ずることがあるのですごく参考になりました!

###自己紹介
私は2021年にCYBIRDへ新卒入社し、現在はサーバーサイドエンジニアとして主にPHPを扱っています。
大学からUnityやC言語、C++、JAVA、PHPなど様々な言語に触ってきました。
その中でサーバーサイドエンジニアに興味を持ち、この業界に入りました。

##この記事について
新卒で入社して、実際の業務でコードを読んだ時に思ったことについてまとめようとしたものです。
記事の内容としてはコードリーディングについてが主となります。
正直当たり前のようなことしか書いていませんが、初心に返った気持ちで

元記事を表示

PHP ファイルパスやURLからファイル名や拡張子等を取得する

# 目的

– ファイルパスやURLから最後のファイル名や拡張子などを取得する方法をまとめる

# 詳細

– 下記のサービスを用いて今回紹介するコードの検証を行った。
– [https://paiza.io/ja](https://paiza.io/ja)

# 方法

### `/`で区切られた最後のフィールドを取得する。

– `https://qiita.com/miriwo`の`miriwo`の部分を取得したい場合、下記の様に記載する。

“`php

元記事を表示

DockerでLaravel×Elasticsearch環境を作る

# 前提条件

## 環境

・ローカル

検証端末:MacOS Monterey (12.1)

docker:Docker version 20.10.11, build dea9396

docker-compose:v2.2.1

・Docker環境

PHP:8.0.13

MySQL:8.0.27

Elasticsearch:7.12.0

## 読むべき人

Elasticsearch導入したことない人。

家で検証してみたい人。

Elasticという響きがかっこいいなーと思ってる人。

# コンテナの構成

・nginx

リクエストを最初に受けるサーバー

・php

Laravelが動作するコンテナ。

・mysql

メインのデータストレージとして使用するDB。

・Elasticsearch

全文検索エンジン。Scout経由で使用する想定。

・node

画面実装にはないと困るので。

# Laravelのモジュールをクローンする

“`
git clone https://github.com/laravel/

元記事を表示

【PHP】buttonタグのsubmitした値がPOSTされなかった話

# クリックしたボタンによって処理を分ける

formでpostする際において複数のボタンを設置している場合、クリックしたボタンの値を受け取って処理を分岐できる。
例えばメールフォームなどで、確認画面から入力画面に戻るか、送信するかという場合、以下のような処理で実現できる。

“`html



“`

“`php
$action = (string)filter_input(INPUT_POST, ‘action’);

if ($action === ‘back’) {
// 入力画面に戻る処理
// リダイレクトとか
}

// 送信処理
“`

なんてことない、よくある実装だ。

# buttonの値が送信されな

元記事を表示

「PHP Warning: PHP Startup: Unable to load dynamic library ‘curl’ 」の対処方法

#はじめに
Windowsサーバーで laravelを動かすときに、apacheのログファイル(`C:\Apache24\logs配下`)に警告が出たため、その対処法をまとめます。

#環境
– windows server 2022
– apache:2.4.51
– php:8.1.0
– composer: 2.1.14
– laravel 8.7

#エラー内容

“`log:\Apache24\logs\error.log
PHP Warning: PHP Startup: Unable to load dynamic library ‘curl’ (tried: c:\\php8\\ext\\curl (\xe6\x8c\x87\xe5\xae\x9a\xe3\x81\x95\xe3\x82\x8c\xe3\x81\x9f\xe3\x83\xa2\xe3\x82\xb8\xe3\x83\xa5\xe3\x83\xbc\xe3\x83\xab\xe3\x81\x8c\xe8\xa6\x8b\xe3\x81\xa4\xe3\x81\x8b\xe3\x82\x8a\xe3\

元記事を表示

PHP 言語構造ってなんだ???

# 目的

– 「オーバーヘットがあるから`is_null()`より言語構造の`isset()`か`empty()`を使ったほうがいいかもね〜」って教えてもらって「言語構造」がそもそもよく分かっていなかったので調べてみた

# 言語構造

– 下記のリンク先に記載されているキーワードはすべてPHPの言語構造である。
– [https://www.php.net/manual/ja/reserved.keywords.php](https://www.php.net/manual/ja/reserved.keywords.php)
– `これらは言語を構成するものです`と言われている通り、どうやらこの一覧に記載されているものはPHPの言語を構成するそのものらしい。
– この一覧の中に`isset`や`empty`が含まれており、これらは呼び出し方法こそ関数に似ているけど関数とは全く別物らしい。
– その証拠に`isset`と`empty`の公式マニュアルには`注意: これは、関数ではなく 言語構造のため、可変関数 を用いて コールすることはできません。`と記載されている。

元記事を表示

OTHERカテゴリの最新記事