- 1. Webアプリ開発 記事の詳細とコメント編
- 2. Webアプリ開発 記事の更新、削除編
- 3. Webアプリ開発 記事の新規登録編
- 4. 【PHP】if文を簡潔に書くために守るべきルール
- 5. 【PHP】PHPにおける不変クラス
- 6. PHPの多次元配列から特定のキーの値を取り出す
- 7. Webアプリ開発 マイページ編集編
- 8. トレイト
- 9. 共有フォルダ上のCSVをサイトにtableタグで自動挿入させてみた
- 10. PHP
- 11. 無名クラス
- 12. Laravelのメールをキュー投入してバックグラウンドで処理する
- 13. Laravelで2段階認証(2FA)を実装する
- 14. PDO接続の2002:対象のコンピューターによって拒否されたための対処法
- 15. 【CakePHP】MissingViewExceptionの対応方法
- 16. ゼロからまなぶプログラミング原理 (副題: 初期値はnullか空の値か?)
- 17. OpenAIをAPI利用するPHPとjavascript
- 18. Laravel Duskでブラウザテストを行う
- 19. 【Golang, PHP】PDFスライド画像変換&S3保存処理のパフォーマンス改善
- 20. PhpModbus を使う
Webアプリ開発 記事の詳細とコメント編
# 初めに
webアプリを開発したので、開発中に考えたことをまとめます
今回は記事の詳細とコメント機能についてです。# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## 記事の詳細
### 実装事例
ホーム画面から![layout.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/884220d0-500b-7525-0c0c-652b7afef065.png)
記事のタイトルまたは「この記事を読む」を押してもらうと記事の詳細を確認できます。
今回の例では「スープ
Webアプリ開発 記事の更新、削除編
# 初めに
webアプリを開発したので、開発中に考えたことをまとめます
今回は作成した記事の更新、削除機能についてです。# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## 記事の更新
### 実装事例
ダッシュボード画面から「記事を編集する」を押してもらうと![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/5468d24c-19c3-d869-301b-7e516c675e91.png)
記事の編集画面が出てくるのでここで記事を編集
Webアプリ開発 記事の新規登録編
# 初めに
webアプリ開発ができたので、どんな感じで作成したのかをまとめたいと思います。
今回はマイページ編集についてです。# 開発環境
macOS Sonoma 14.4.1
CentoOS Stream X_86_64
Apache/2.4.57
PHP 8.3.6
mysql Ver 8.0.36
phpMyAdmin 5.2.1
composer version 2.7.2
Laravel Installer 5.7.1
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## 記事の新規登録
### 実装事例![author.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/190d04f5-d074-edb8-4c85-804d36f90518.png)
権限があるユーザーには投稿一覧ボタンが出てきます。
押すと![dashboard.png](h
【PHP】if文を簡潔に書くために守るべきルール
:::note warn
エンジニア初心者の投稿であるため、間違っている箇所が多くあるかと思います。
間違っているなどあればご教授いただけると幸いです。
:::## はじめに
PHPの学習中、if文の条件式の書き方を全く意識せず書いていたため、非常に美しくない条件式を量産してしまっていました。戒めの意味も込めて記事に残したいと思います。## if文とは(PHP)
PHPの公式サイトにはこのように書いてありました。
> この構文は、命令の条件実行を可能にします。 PHP では、C 言語に似た次のような if 構文が使用されます。
>if (式)
文
>式は論理値で評価されます。 式が true と評価された場合、 PHP は文を実行し>ます。false と評価された場合は、これを無視します。条件の書き方次第では何通りもの書き方ができます。今回はそのことについてメンターの方に指導してもらったことを含めつつ、自分なりに考えたことをここに残したいと思います。
## if文 条件式の書き方
### 否定系・肯定系どちらも使える場合は肯定系を使う
条件式が!==と===のどちら
【PHP】PHPにおける不変クラス
# 不変クラスとは
不変クラスとは、オブジェクトを作成した後に状態が一切変化しないクラスのことです。
クラスを不変にすることで、意図せずオブジェクトの状態が変更されてしまうことを防ぎます。
クラス設計においては、可能な限り不変クラスとすることが保守性の高いプログラムを組む上での近道となります。# PHPにおける不変クラス
PHPでは近年、より堅牢なコードを記述できるようバージョンアップが重ねられており、不変クラスの設計も行いやすくなりました。
以下はBlog(ブログ)クラスを不変クラスとして記載したサンプルコードです。
なお、PHPのバージョンは現時点で最新の8.3を使用しています。“` php
titl
PHPの多次元配列から特定のキーの値を取り出す
普通のPHPerなら知ってて当然かもしれないので自分用の覚え書き。
ユーザー情報等のデータベースを扱うことがよくあって、`FETCH_ASSOC|FETCH_UNIQUE`なんかでデータを取り出すと
“`php
print_r($alldata);
/*
Array
(
[1] => Array
(
[id] => 1
[account] => suzuki
[sei] => 鈴木
[mei] => 一郎
[seikana] => すずき
[meikana] => いちろう
)
[3] => Array
(
[id] = 3
[account] => tanaka
[sei] => 田中
[mei] => 次郎
[seikana] => たなか
Webアプリ開発 マイページ編集編
# 初めに
webアプリの開発ができたので、どんな感じで作成したのかをまとめたいと思います。
今回はマイページ編集についてです。
# 開発環境macOS Sonoma 14.4.1
PHP 8.3.3
Laravel Installer 5.2.0
Laravel Framework 11.0.5# ソースコード
https://github.com/opatu07/portfolio
# 考えたこと
## マイページ編集
### ビュー
マイページに移動する前に
![commonUserDropdown.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/6de98a1d-9740-d8c8-afab-52b31ffa2138.png)
自分の名前を押すとドロップダウンのメニューが出てくるようにして、「プロフィール」を押すとマイページ画面に飛べるようにしました。
マイページはLarave Breezeを参考にしました。![updateProfile.png](https://
トレイト
## はじめに
トレイトについてまとめる
### トレイトとは
いくつかのメソッド群を独立したクラスで再利用できるようにした仕組みのこと。
PHPの継承では単一継承しかできないが、トレイトを使えば多重継承のようなことが可能。### 参考コード
“`php:trait_multi.php
interface IFax {
function send();
}interface IPrinter {
function print();
}trait FaxTrait {
public function send() : void {
print ‘sening Fax…sended!’;
}
}trait PrinterTrait {
public function print() : void {
print ‘printing…completed!’;
}
}class FaxPrinter implements IFax, IPrinter {
use Fax
共有フォルダ上のCSVをサイトにtableタグで自動挿入させてみた
某事業会社さんでは、Excelで更新した表をHTMLの`
`タグに埋め込んでコーポレートサイトにアップロードする、という日次のルーティン業務がありました。
これを半自動化したので記事にします。
# 基本方針
長らく情シスで行っていた業務ですが、事務職で雇用しているパートさんに業務を移管したい。(というか自分はやりたくない)
かと言って、うっかりファイルを壊されたりすると情シスの仕事が増えてしまうので、サーバに専用のディレクトリを作成し、当該ディレクトリのみアクセス可能なFTPアカウントを作成、それをパートさんに渡します。
SFTP/SCPではありません。暗号化されていない従来のFTPです。
このご時世にFTPを使う理由は、Windowsの**ネットワークプレイス機能**でFTPサーバに接続するため。
エクスプローラでは普通の共有フォルダに見えるので難しいと感じさせず、運用をすんなりと受け入れてもらえます。
セキュリティ的にどうなのよ、という意見はあるのですが、そもそも公開データなので、暗号化する意味がありませんし、仮にパスワードが漏れても閉じたディレクトリにしかアクセスPHP
# 大学で役立つアプリを作ろう(お茶会第1弾)
今回はとてもシンプルにwebアプリを作成しました。
xamppで気象庁のAPIから東京の天気を出力し、データベースを使用し掲示板的な用途を追加しました。# 設定情報
データベース名はbbs-yt,テーブル名はgdsc-table,要素はcomment(Text型)とpostData(Data型)の2変数。
ユーザ名はrootでパスワードは無しで設定。# デモ動画
無名クラス
## はじめに
無名クラスについてまとめる
### 無名クラス
その名の通り、名前を持たないクラス。
定義したクラスを後から利用しないことがわかっているクラスを定義するのに利用する。#### メリット
・コードをシンプルに表現でき、見た目にも関連性を把握しやすい。
・式が許されている場所であれば、どこにでも記述できる。
・名前がないので、そもそも名前が競合する恐れがない。#### 参考コード
`execute`メソッドでは、あらかじめ決められた前後の処理を挟んで、与えられた任意の処理を実行できるものとする。
“`php:class_anonymous.php
interface Runnable {
function run();
}class MyClass {
public function execute(Runnable $rc) : void {
// ダミー処理(本来はなんらかの前処理を実装)
print ‘start…’;
// 利用者から指定された処理を実行
$Laravelのメールをキュー投入してバックグラウンドで処理する
# はじめに
[前回の記事](ttps://qiita.com/fakefurcoronet/items/17323a2e11d3eb11c445)で2段階認証を実装したわけですが、[公式ドキュメント](https://readouble.com/laravel/9.x/ja/mail.html)にこんな記述がありました。> 電子メールメッセージの送信はアプリケーションのレスポンス時間に悪影響を与える可能性があるため、多くの開発者はバックグラウンド送信のために電子メールメッセージをキューに投入することを選択します。
というわけで、2段階認証のコードを送信するメールをキュー投入してバックグラウンドで処理できるようにしたいと思います。
# databaseキュードライバの設定
今回、キュードライバはDBを選択します。
[公式ドキュメント](https://readouble.com/laravel/9.x/ja/queues.html)に従い、ジョブを保存するためのテーブルを追加します。“`console
php artisan queue:table
“`
“`consLaravelで2段階認証(2FA)を実装する
# はじめに
現代において、もはやログイン認証の強化は必須と言っても過言ではないでしょう。そこで今回は、サインイン時にユーザーのメールアドレス宛にコードを送信し、そのコードを入力しなければログインできない、2段階認証(2FA)の仕組みをLaravelで実装した際のコードを備忘録として記したいと思います。
## 前提条件
– メールアドレスの確認ロジックを導入済みであること
https://readouble.com/laravel/9.x/ja/verification.html# DBカラムの追加
2段階認証時に使用するコードや、コードの有効期限、2段階認証の利用有無を管理するカラムをusersテーブルへ追加します。“`console
php artisan make:migration add_two_factor_auth_fields_to_users_table –table=users
“`“`php:database/migrations/2024_01_01_000000_add_two_factor_auth_fields_to_users_
PDO接続の2002:対象のコンピューターによって拒否されたための対処法
# エラー内容
PHPでのPDOを用いたDB接続において下記で接続できますが、つまずいたので残しときます。
“`
$dbh = new PDO(‘mysql:dbname=”データベース名”;localhost’, ‘ユーザ名’, ‘パスワード’);
“`
上記で接続を行うことができるはずですが画像の通り2002エラーがでました。![error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776357/43069d1c-7e03-e5e8-3226-b884ee854527.png)
# 対処法
“`
xmapp\phpMyAdmin\config.inc.php
“`
上記の場所にconfig.inc.phpというファイルがあるので探してください。
このファイルにポート番号があるので確認していきます。
“`
$cfg[‘Servers’][$i][‘host’] = ‘localhost:3305’;
“`
このように記述された点を探すと、ポート番号が”3305″になっていること【CakePHP】MissingViewExceptionの対応方法
## はじめに
CakePHPでAPIを作成していてMissingViewExceptionが発生するため調べてみました。## 結論
下記のコードを対象のメソッドに追加すると解決しました!
“`PHP
$this->autoRender = false;
$this->autoLayout = false;
“`## ChatGPT曰く
>ビューの自動レンダリングが有効な場合: $this->autoRender がデフォルトの値である true のままだと、アクションメソッドがビューファイルを自動的にレンダリングしようとします。そのため、アクションメソッドに対応するビューファイルが存在しない場合、ファイルが見つからないというエラーが発生します。>レイアウトの自動適用が有効な場合: $this->autoLayout がデフォルトの値である true のままだと、アクションメソッドがレイアウトを自動的に適用しようとします。そのため、レイアウトファイルが存在しない場合、またはレイアウトの設定に問題がある場合、レイアウトが見つからないというエラーが発生します。
とのことで
ゼロからまなぶプログラミング原理 (副題: 初期値はnullか空の値か?)
## はじめに
クラスのメンバー変数にタイプヒントを使用しなかった過去のphpには、メンバー変数に直接初期化値を入れない限り、デフォルトでnullが初期値になりました。この傾向から、変数の初期値を空の値ではなくnullに設定するケースが多かったです。
“`php
class DefaultMember { public $variable; }
var_dump((new DefaultMember)->variable); // Null
“`タイプヒントが導入される以前の過去のphpでは、多くの場合、変数は単に値を保存するために使用されました。変数を宣言する前に、変数をどのように使用するかについての意図を考えて作成されるべきですが、タイプに対する意識なしに何かを作成する必要があるから変数には適当な値が入って、意図なしで変数が宣言されたので多くの場合初期値としてnullを使用するケースが多かったです。このような昔の慣行で、現在でもnullを初期値として使用するケースがあります。
phpでタイプヒントが登場し、変数にnullを使用するために`?T`や`null | T`な
OpenAIをAPI利用するPHPとjavascript
# OpenAI Assistants
ChatGPTをはじめとするAIっておもしろいですよね。
MyGPTsも良いですが、エンジニアとしてはAPI利用したいケースの方が多いと思います。
APIからGPTsを利用するために、AssistantsでInstructionsを作りますが
いざAPIを使おうとするとthreadとかmessagesとかrunsとか・・・色々クセを理解しないと
API利用するのも一苦労です。ってことで、簡単にAPIを利用できるように**ライブラリ化**しました。
しかも、バックエンドとフロントエンドがたった1つのファイルで使えるお手軽さ(!)
リポジトリを公開しましたので、即利用したい方は以下からどうぞ。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
https://github.com/tri-comma/OpenAI_PHP_JS
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑## 解説
1つのファイルでPHPとjavascript??:thinking:
はい、そうです。GETとPOSTでレスポンスを切り替えLaravel Duskでブラウザテストを行う
### 開発環境
– Windows 10 Pro(64bit)
– PHP 8.1.9
– Laravel 10.10
– Laravel Dusk 8.2Laravel Duskとは、ブラウザテストを自動化するためのLaravelのパッケージです。今回は、インストールしてから、簡単なテストをするまで記事に書きます。
1.[Google Chrome](https://www.google.co.jp/intl/ja/chrome/browser/welcomeback.html)の最新版をダウンロードして、バージョンを確認してください。確認方法として、僕の開発環境では、**C:\Program Files (x86)\Google\Chrome\Application** ディレクトリ内の**124.0.6367.119**ディレクトリがありますので、これがバージョンとなります。
2.以下のコマンドをプロジェクトのルートディレクトリで実行
“`bash
composer require laravel/dusk –dev
“`
3.ChromeDriverをインストー【Golang, PHP】PDFスライド画像変換&S3保存処理のパフォーマンス改善
大学の学部四年生でエンジニアをしている者です。
普段は業務委託でバックエンド開発をメインに行っています。
今回はPHPのプロダクト内で起きていた問題解消にGolangの機能(Go routine, channel)を使用して解消をしました。
その概要をまとめます。
コード自体はプロダクトに反映してしまったので載せるのは控えます。## プロダクト使用技術
– AWS EC2 (t3.medium)
– AWS S3
– PHP (Laravel)
– poppler-utils (pdftoppmコマンド) ⇒ PDFの画像変換処理で使用
– Golang ⇒ 改善のために使用## 開発機能詳細
ピッチ資料を生成する機能です。
https://www.hear.co.jp/recruit/saiyoupitch-100sen
機能の内部処理の流れとしては以下の通りです。(AS IS)
1️⃣ **ユーザーはPDFファイルをアップロード**
2️⃣ **アップロードされたファイルをローカルのディスクに一時保存**
3️⃣ **ローカルディスクに保存されているPDFスライドを画PhpModbus を使う
[PhpModbus](https://code.google.com/archive/p/phpmodbus/)
https://code.google.com/archive/p/phpmodbus/
PHPからModbusをアクセスする場合に便利なPhpModbusですが、2013年7月以後、エンハンスがされていない様子。まあ枯れた分野なので、ユーザ・サイドからしてもエンハンスしていただく必要はありません。
ただし、最終リリース版 0.8.r106 でも、そのままでは現在のPHPバージョンでは動きません。クラス ModbusMaster だけを使う限りでは、1ステップだけ修正する必要があります。他のクラスを使ったことはないので、他のクラスではどうなるのかは知りません。
1ステップだけの修正なので、エラーになっても臆せずに修正して使用してみてください。## なにが問題なのか
最終リリース版 0.8.r106 しか使用したことがありませんが、コンストラクタ名称に起因するエラーが発生します。
PHP4までは当然であった「コンストラクタの名称はクラスの名称と同じ」は、現在のPHP関連する記事
OTHERカテゴリの最新記事
- 2024.09.19
JavaScript関連のことを調べてみた
- 2024.09.19
JAVA関連のことを調べてみた
- 2024.09.19
iOS関連のことを調べてみた
- 2024.09.19
Rails関連のことを調べてみた
- 2024.09.19
Lambda関連のことを調べてみた
- 2024.09.19
Python関連のことを調べてみた