- 1. PHPerが学ぶPython② クラス
- 2. 【Laravel】知らずに生じていたN+1問題
- 3. Laravelの外部キー制約を指定する際に使用するconstrained()に任意の指定したidを付与する方法
- 4. fsockopenとstream_socket_clientの違い【UNIXドメインソケット】
- 5. composer.lockを.gitignoreに追加しないで
- 6. Stripe で銀行振込のサブスクリプションを実装する際の注意点
- 7. 【PHP】配列をjson_encodeするとlistじゃなくてobjectになる
- 8. PHPerが学ぶPython① 変数・配列・タプル
- 9. 雑学投稿系SNS Nijiki
- 10. PHP 基本文法
- 11. Stage-1/Lesson-1
- 12. PHPで画像アップロード・保存・表示・更新機能を実装してみた
- 13. docker、Laravel9環境にて、認証機能(ログイン機能)を作成する際、node.jsの問題が発生したので、その問題を修正する方法
- 14. phpをバージョンアップする際の簡易書式チェック
- 15. 【PHP】エラーハンドリング ~Exceptionクラス~
- 16. Dockerにて構築されたPHP(Laravel)環境で、MailHogを使ってメール送信処理をテストする
- 17. PHPのクラスについて
- 18. なぜ出力時のHTMLエスケープを省略してはならないのか
- 19. PHPからJavaScriptにデータを受け渡すときに考えること
- 20. 【CakePHP】git cloneして開発環境構築
PHPerが学ぶPython② クラス
うっすっす。豚野郎です。
今回は前章の続きです。https://qiita.com/pig_buhi555/items/301f7c8eabd1a5fd121f
変数・配列がわかれば、次はクラスかな?と思い書いていきます。
※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。**バージョン:3.9.1**
# 1. クラス
“`class.py
class Sample:
class_test = ‘クラステスト’
# 第一引数は必須。慣習的にself
def test(self, test):
print(test)# Sampleクラスのclass_testを使用
test = Sample.class_test# インスタンス化
sample = Sample()# テストメソッド呼び出し
sample.test(test)
“`
“`
$ python class.py
クラステスト
【Laravel】知らずに生じていたN+1問題
初めまして、大学院生のなかじです。
自分の開発物で知らずに生じていたN+1問題について、備忘録として残しておく?
## N+1問題とは
#### N+1問題とは・・・SQL文が大量に発行されてしまう問題
– DBから値の取得する時(SQLのクエリを発行して情報を集めていく時)に、余分にたくさんのクエリを発行してしまい、表示速度等に悪影響を出してしまうことをN+1問題と言います。
#### 例
– 1対多で生じる
ex) 本紐づいている著者リスト(公式ドキュメントより)
ex) ユーザーに紐付いているコメント
ex) ユーザーに紐付いている記事など…## ①本のデータを全件取得し、②本のデータの数だけ著者の名前を取得する:N+1問題発生
#### DB説明(ダミーデータを用意してみました笑)booksの例
| id | title |
| –| —————— |
| 1 | 令和04年【春期】【秋期】 応用情報技術者 合格教本 |
| 2 | キタミ式イラストIT塾 応用情報技術者 令和04年
Laravelの外部キー制約を指定する際に使用するconstrained()に任意の指定したidを付与する方法
公式の書き方を参照すると、外部キー制約を追加する際、マイグレーションファイルに下記を記述する
“`php:マイグレーショファイル
# userテーブルと紐付ける条件で作成した
Schema::create(‘posts’, function (Blueprint $table) {
$table->id(‘post_id’);$table->foreignId(‘user_id’)->constrained(‘users’)->onDelete(‘cascade’);
# または
$table->foreignId(‘user_id’)->constrained()->onDelete(‘cascade’);$table->timestamps();
});
“`
:::note warn
– 今回は、CASCADEの設定も行っている
– 著者は、userテーブルを題材として使用し、今回の説明を行う
:::上記の記述の場合、userテーブルが下記の状態であれば、マイグレーションを正常に行う事ができる
|id|n
fsockopenとstream_socket_clientの違い【UNIXドメインソケット】
https://www.php.net/manual/ja/function.fsockopen.php
https://www.php.net/manual/ja/function.stream-socket-client.php
stream_socket_client() 関数もこれと似ていますがより豊富なオプションを持っており、 非ブロック接続をしたりストリームコンテキストを提供したりする機能があります。ジェネリックfsockopenのstream_socket_clientは、PHP5から登場しナウいのでオススメ
composer.lockを.gitignoreに追加しないで
https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
# `composer.lock`ファイルをバージョン管理にコミットする
このファイルをバージョン管理にコミットすることは重要です。なぜなら、プロジェクトをセットアップする人が、あなたが使用している依存関係とまったく同じバージョンを使用することになるからです。CI サーバー、運用マシン、チーム内の他の開発者など、すべての人が同じ依存関係で実行されるため、展開の一部にのみ影響するバグの可能性が軽減されます。単独で開発した場合でも、6 か月後にプロジェクトを再インストールすると、依存関係がその後多くの新しいバージョンをリリースしたとしても、インストールされた依存関係がまだ機能していると確信できます。(コマンドの使用については、以下の注を参照してください`update`。):::note info
ライブラリの場合、ロックファイルをコミットする必要はありません。
[ライブラリ – ロックファイル]
Stripe で銀行振込のサブスクリプションを実装する際の注意点
# Stripeで銀行振込のサブスクリプションを実装する際の注意点
## 参照記事
https://qiita.com/hideokamoto/items/e03984b982574ab01c31#サブスクリプションを作成するコード## 結局のところ
銀行振込でサブスクリプションを始めるのは、様々な状況を想定した上で実装する必要がある## 銀行振込のサブスクを申し込みを受け付けるときに利用できないstripeの機能
1, 支払いリンクによる申し込み受付 (ダッシュボードから3回くらいクリックするとできるやつ)
2, クリエイトセッションでの受付 (checkout->sessions->create でできるやつ)どちらのUIも綺麗で、実装の手間も少ないものですが、どちらも銀行振込のサブスクでは現時点では利用できません。
そのため他の方法で申し込みを受け付ける必要が発生します。*クリエイトセッションの場合、1回払い (mode=payment)の場合は利用できます。
##### 参考記事
https://qiita.com/hideokamoto/items/d6b
【PHP】配列をjson_encodeするとlistじゃなくてobjectになる
# 結論
配列を操作した後にjson_encodeするときはindexを詰めてから行おう!
:::note alert
ダメなパターン
json_encodeした結果listではなくObjectになっている
:::“`php
$array = array(1,2,3,3,3,4);配列を操作…
echo $array;
// -> array(1,2,4)echo json_encode($array);
// -> {“0″:1,”1″:2,”5”:4}
“`:::note info
いいパターン
json_encodeした結果listのまま
:::“`php
$array = array(1,2,3,3,3,4);配列を操作…
echo $array;
// -> array(1,2,4)// indexを詰める
$array = array_values($array);echo json_encode($array);
// -> [1,2,4]
“`# array_valuesでやってること
> array_v
PHPerが学ぶPython① 変数・配列・タプル
hi!豚野郎です。
明けましておめでとうございます。Pythonの基礎の書物を1冊読んだので、解説していきます。
変数・配列・タプルの説明だけで記事1つ書けそうだったので、その説明からしていきます。※ 注意:内容はPHPか何かの言語を書いたことがある方向けなので、
説明を割愛している箇所は多々ありますので、ご了承ください。**バージョン:3.9.1**
# 1. 変数
※ 注意点は先頭1文字目に数字を使えないことです。
– NG
“`test.py
# コメント
1test = 1print(1test)
“`
“`
$ python test.py
File “パス/test.py”, line 2
1test = 1
^
SyntaxError: invalid syntax
“`
数値の代入
“`test.py
# コメント
test = 1print(test)
“`
“`
$ python test.py
1
“`
文字列の代入(シングルクォーテーションでも可)
“`t
雑学投稿系SNS Nijiki
みなさん、こんにちは。山田長政です。
最近、SNSを作ったので宣伝します。
Nijikiと言う名前の雑学を投稿するSNSを今回、製作しました。
使用したのは、データベース云々はDjango、Webサイトとかはphpです。
ちなみに、スマホで開くとデザインがバグるので注意してください。
https://nijiki.net
PHP 基本文法
– 趣旨
作りたいシステムを思いついて少しずつ取り組んでいる所なのですが、
現状の力量ではかなり難しいことがわかった段階です。
心が折れないように、わかったことをここに残しつつ、
少しでも進めていこうという気持ちで書いています。# 文字列を出力する
文字列 “Hello World!” を出力するには、前に`echo`をつけて全体を`` で囲むことで、ブラウザ上に表示できます。“`php:PHP
“`
“`:ブラウザでの表示結果
Hello World!
“`文字列は複数行記述もできます。その際、コード全体の見通しが良くなるよう改行も可能です。
ただし、ブラウザ上は改行されません。“`php:PHP
“`
“`:ブラウザでの表示結果
Hello World!Hello World!Hello World!
`
Stage-1/Lesson-1
:::note
未経験からWEBエンジニアへの学習ロードマップ
[Backend Developer](https://roadmap.sh/backend):::
# ウェブアプリケーションってなに?
[Webアプリケーションについて知ろう!](https://prog-8.com/docs/web-application)– HTMLだけで作られたWebサイトでは、作成者が更新しないかぎり毎回同じものが表示されます。
![1618360609241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484172/8bbd105a-1e54-0fde-fabb-02645336d3f5.png)![1618361167779.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484172/15901b66-9e99-6dac-3432-a755a81d7730.png)
① ブラウザがサーバーにリクエス
PHPで画像アップロード・保存・表示・更新機能を実装してみた
## 画像アップロード・保存・表示・更新機能
PHPで画像アップロード機能を実装しました。
ログイン機能も同時に作っています。画像をアップロードすると、次の2つのphpファイルの同階層にあるimagesフォルダに
格納されるようになっています。画像アップロードページ
“`PHP:upload.php
docker、Laravel9環境にて、認証機能(ログイン機能)を作成する際、node.jsの問題が発生したので、その問題を修正する方法
# 概要
表題にも書いた通り、Laravel9にてログイン機能を作成する実装を行っていました。
laravel9では、`composer require laravel/ui`、`php artisan ui bootstrap –auth`のコマンド叩く事でログイン機能が簡単に作成できるみたいです。ただ、これらのコマンドを使用するには、`node.js` 関連をインストールする必要があり、そこで凄く詰まったので、その修正方法を説明したいと思います。# 修正方法
laravel9では、`php artisan ui bootstrap –auth`のコマンドを叩いてログイン機能を作る場合、`node.js`が必要(bootstrapの影響だと思われる)との事です。その為、`dockerfile`に`node.js`関連をインストールするコードを付け加えました。下記がその`dockerfile`です
“`dockerfile:
FROM php:8.1.13-bullseyeRUN apt-get update && apt-get install -y \
git
phpをバージョンアップする際の簡易書式チェック
# 概要
phpがサポート期限切れのためにバージョンアップが必要になったため既存コードを簡単にチェックする
(テストがきちんと作ってあればいいんですが今回は構文チェックで…)# 事前準備
とりあえずどんなエラーも見つけたいのでphp.iniでエラーレポートをすべて行うように変更しておく“`php.ini
error_reporting = E_ALL
“`# コマンド
findで対象ファイルを探して、grepでエラーがないメッセージは表示しないようにする
`find . -name “*.php” -type f -exec php -l {} \; | grep -v ‘No syntax errors’`# 実行例
適当なものがなかったので、昔のphpmyadminでやってみたらいろいろ出てました
自作のプログラムでこういうのが出ていたら修正ですね“`
PHP Fatal error: Array and string offset access syntax with curly braces is no longer supported in ./p
【PHP】エラーハンドリング ~Exceptionクラス~
## PHPの例外処理
プログラムの異常終了を防ぐために、例外として処理する。
PHPではExceptionクラスを使う。
https://www.php.net/manual/ja/language.exceptions.php## Exceptionクラスの使い方
例外をスローする。(例外が発生することを例外を投げるという)
“`php
“`
例外が発生する可能性のあるコードをtryで囲み、例外を受け取った後のコードをcatchに記述する。“`php
“`変数$flgの値がtrueの時はOKと返し、falseのときに例外として返す。
“`php
Dockerにて構築されたPHP(Laravel)環境で、MailHogを使ってメール送信処理をテストする
# 概要
ローカル環境でメール送信処理をテストする際。
実際にメール送信されないようにしつつ、挙動をテストするため、MailHogを利用しました。
設定方法などメモします。# 環境
– PHP8.1系
– Laravel9系
– ローカル環境はDockerにて構築# 設定方法
## MailHogを導入
`docker-compose.yml`にMailHogの記述を追加します。(ここで立ち上がるコンテナが、ローカル用のSMTPサーバーとなります)
[DockerHubに公開されているイメージ](https://hub.docker.com/r/mailhog/mailhog/)をそのまま利用できます。“`yml
services:
mailhog:
image: mailhog/mailhog:latest
ports:
– “8025:8025”
– “1025:1025”
“``1025`はSMTPポート用、`8025`はHTTPポート用(ブラウザからMailHog管理画面にアクセスする用)として設定しています。
PHPのクラスについて
PHPのクラスについて学習した事のアウトプットです。
## クラス
クラスとは定数や変数(プロパティ)と関数(メソッド)をまとめたです。
※PHPマニュアルには”クラスの中にはプロパティそしてメソッドを含めることができる”と記載されている~~~md:SimpleClass.php
var;
}
}
?>
~~~
## 疑似変数 $thisPHPマニュアルには”メソッドがオブジェクトのコンテキストからコールされる場合は、 疑似変数 `$this` が利用可能。 `$this` は、呼び出し元オブジェクトの値”と記載されている。
サンプルコードを作成し考察する。
~~~md:SimpleClass1.php
なぜ出力時のHTMLエスケープを省略してはならないのか
メリークリスマス! 週末もPHPを楽しんでますか? :santa_tone2:
ところでWebセキュリティはWebアプリケーションを公開する上で**基礎中の基礎**ですよね! :innocent:メジャーな脆弱性を作り込まないことはWeb開発においては専門技術ではなく、プロとしての基本です。
中でも**XSS** (Cross-Site Scripting)やインジェクションについての考慮は常に絶対に欠いてはならないものです。現実にはプログラミングには自動車のような運転免許制度がないため、自動車学校に通わず独学で公道に出ることができてしまいます。つまりは基礎知識がないままにWebプログラマとして就職したり、フリーランスとして案件を請けることも現実には罷り通っています。それは**一時停止標識も赤信号も知らずにタクシー営業しているようなもの**です。
このような事情により、体系的な理解のないWeb開発初心者は *(時には**n**年のキャリアを持つ人でも)* 雰囲気による曖昧な基準でHTMLエスケープをしたりしなかっ
PHPからJavaScriptにデータを受け渡すときに考えること
PHPからJavaScriptにデータを受け渡す需要は多くあるので、把握しておくべきことをまとめます。
原則としてはPHPの値をJSONに変換することです。## 仕様について
**JSON**(JavaScript Object Notation)はJavaScriptのオブジェクトとリテラル記法に由来する部分集合として定義されました。JSONの仕様は[JSON.orgの説明](https://www.json.org/json-ja.html)と[RFC 8259](https://www.rfc-editor.org/rfc/rfc8259)などで定義されています。ざっくりとした理解はWikipediaなんかを見てもらうといいでしょう。
https://ja.wikipedia.org/wiki/JavaScript_Object_Notation
## データ型
PHPとJSONは基本的には似たようなデータ型を備えていますが、細かい点で違いがあります。
| データの種類 | PHPの型名 | JSONの型名
【CakePHP】git cloneして開発環境構築
# 0. はじめに
大阪の受託開発エンジニアの、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
CakePHPプロジェクトを`git clone`して、`vendor`や`.env`,`app_local.php`ファイルを作って`bin/cake server`するまでのメモです!## 0-1. 目次
> [1.環境構築](#1-環境構築)
> [2.初期設定](#2-初期設定)
> [Reference](#reference)## 0-2. 前提条件
– Gitインストール済み
– GitHub登録済み## 0-3. 開発環境
|key|value|
|:–:|:–:|
|OS|macOS|
|FW|CakePHP|
|バーション管理|Git/GitHub|
|パッケージ管理|Composer|# 1. 環境構築
## 1-1. git clone
“`terminal:local
$ mkdir cakephp
$ cd cakephp
$ git clone https: