PHP関連のことを調べてみた2022年04月11日

PHP関連のことを調べてみた2022年04月11日
目次

CakePHP4 containで二つ先のテーブルが取得できない

## 環境

PHP 8.1.4RC1
CakePHP 4.3.6

## 想定

CakePHPではアソシエーションを用いることで以下のようなSQLに対して、次のようなオブジェクトでデータを扱える。

“`sql:SQL
SELECT * FROM A JOIN B ON B.id = A.id JOIN C ON C.id = B.id
“`

“`php:CakePHP
$a->belongsTo(‘b’, [‘className’=>’B’, ‘bindingKey’=>[‘id’], ‘foreignKey’=>[‘id’]]);
$a->b->belongsTo(‘c’, [‘className’=>’C’, ‘bindingKey’=>[‘id’], ‘foreignKey’=>[‘id’]]);
$data = $a->find()->contain([‘b’, ‘b.c’])>all();
“`

“`php:var_export
object(App\Model\Entity\A) id:0 {
‘id’ => 1,
‘name’ => ‘

元記事を表示

Laravel初心者わい「このベストプラクティス集ええやん」

## はじめに
こんにちは。WEBエンジニアのmasakichiです。

Laravelって自由度が高く拡張しやすい反面、「コードの書き方が煩雑化しやすい」と感じたことはありませんか?

そんな方に向けたおすすめのGitHubリポジトリ[laravel-best-practices](https://github.com/alexeymezenin/laravel-best-practices)を共有したく記事にしました。

## 記事の対象者
– これからLaravelを勉強したいと思っている人
– Laravelの経験はあるけど、より良質なコードを書きたいと思っている人
など

## この記事を書いた経緯
ネット上にはさまざまなLaravelのベストプラクティスがありますが、個人的にいちばんシンプルですっきりとまとまっているのが今回紹介するものです。
同ベストプラクティスをすでに共有しているQiita記事や他のネット記事もたくさんあると思いますが、改めていまLaravelを学んでいる同士にこのベストプラクティスの存在を知って欲しいなと思い執筆しました。

## laravel-be

元記事を表示

[Laravel] EloquentUserProviderを継承して、独自のGuardを定義する

## 概要

EloquentUserProviderを継承して、独自のGuardを定義をします。

定義することによって、例えば、以下のよくあるユースケースの例のような、認証の微妙なカスタマイズが可能となります。

– 非会員であるユーザは、ログイン不可
– 非アクティブなステータスのユーザは、ログイン不可
– etc…

### 具体的には

やることに関しては、公式の「認証」>「カスタムユーザープロバイダの追加」のあたりが該当します。

https://readouble.com/laravel/9.x/ja/authentication.html

`config/auth.php`で定義している`driver`を、`’eloquent’` (`EloquentUserProvider`)ではなく、拡張したものを使用するのがゴールです。

“`php:config/auth.php
‘providers’ => [
‘users’ => [
‘driver’ => ‘eloquent’,
‘mode

元記事を表示

PDOでの文字化けの原因と対処法

DBinfo.phpで文字コードがutf-8になっている

utf8mb4に修正する

これでMYSQLから出力した時に文字化けしなくなる

元記事を表示

PHPでYoutubeからタイトルとサムネイルを取得

YoutubeAPIを使ってYoutubeのURLからタイトルとサムネイルを取得する機能を実装したので備忘録として残しておく。
基本的には以下のYoutube動画を参考にした。

⇩作成したサービス

https://qiita.com/cookiesand1023/items/4aa52d9c4c5934c067c8

# YoutubeAPIキー取得
Google Cloud PlatformからYoutubeのAPIキーを取得する。
ここでは説明を省く。

今回はAPIキーを実際の処理の中で変数として持たせてしまっているが、Laravelを使用する場合.envに記載する。

# 実装
App\LibにYoutube.phpを作成し、ここでAPIと連携する。
今回は作成したサービスの都合上、json形式で値を返す。

“`App\Lib\Youtube.php
namespace App\Lib;

class Youtube {

// Youtubeの

元記事を表示

【メモ】PHPフレームワークLaravelの概要を学ぶ

web系のサーバーサイドエンジニアを目指す奴のメモ書きです。

# Laravelとは
PHP界隈で世界一使われているフレームワーク。比較的新しいのにすでに人気一位なので今から学ぶのであればLaravelが無難そう。
cakePHPもかなり人気ではあるけど追い越された立場なので今回は調べない。それぞれ特徴があるけどとにかく今は無難さ重視でLaravelのみ調査。

### Laravelの誕生(激薄小話)
Laravelを考えた人が.NETの開発者の一人らしい。.NetはC#のフレームワーク。唯一経験のあるC#に関連付けできるところがちょこちょこあったのでLarvelできるようになれば似たような感じで.Netでwebページ作ったりAPIを作ったりできるかも

# Laravelの特徴(メリット)

### 学習難易度が低い
すごく主観的だと思うけどLaravelは比較的わかりやすいという発言が多い。
また世界一のフレームワークだからネットにたくさん情報があるようです。

### MVCアーキテクチャ
LaravelはMVCモデルを採用しているフレームワーク。明確に各層を分けることで各層

元記事を表示

PHP5.6でOpenssl1.1.0に対応する

# はじめに
サーバーAのSSL証明書をLet’s Encryptに変更後、サーバーBからサーバーAのapiを叩くと以下のエラーが返ってきた。
“`
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /var/www/hoge/class/Net/Socket.php on line 108
PHP Warning: fsockopen(): Failed to enable crypto in /var/www/hoge/class/Net/Socket.php on line 108
PHP Warning: fsockopen(): unable to connect to ssl://fuga.jp:443 (Unknown error) in /var/www/hoge/class/Net/Socket.php on line 108
“`
参考記事にあるように、今回はサーバーBのルート証明書が古かった。
参考:https://qiita.com

元記事を表示

【コラム】プログラミング未経験者が独学で4か月間勉強した軌跡

今回の記事はコラム的な内容になります。
ITエンジニアへの転身を目指し、2021年11月29日よりプログラミングの学習を開始し、4か月が経ちました。
今回はこの4か月間の軌跡を記事にまとめたいと思います。

# どうしてこの記事を書こうと思ったか

1. 記事を書くことで自分自身、今までやってきた内容を整理しておきたかった
2. これから就職活動をはじめるにあたって、面接官から勉強してきた内容を聞かれる機会があると思うので、その対策として
3. 自分のように未経験者からエンジニア転身を目指す方の参考に少しでもなればという思い

# 本編

## 2021年10~11月(学習開始前)

前職を辞め3年ぶりに地元に帰郷。そのときは特にやりたい仕事もなかったので、「前職の経験を買ってくれるそこそこの地元企業でもあればな~」なんていう意識の低さで職探し中。

そんな就職活動の傍らで、暇つぶしにはじめたprogateにハマってしまいました。(前職でも業務で簡単なマクロを組んだりして、元々プログラミングに興味はあった)

**自分 「プログラミング結構面白いし、これ仕事にできたら楽しいかも!でも

元記事を表示

phpプロダクトのDBを軽量化のためデータをたくさん消した話

# はじめに

最近大学4年目になったShuhei-ppです。
今回でqiita2回目の投稿になります。
前回の投稿では2,3日に1回投稿するみたいなことを書きました。しかし精度の低い情報も書いてしまうかもな、と思いなかなか投稿できませんでした。

そんな私ですが、今勤めさせていただいているところ(バイト)のプロダクトで本番DBの容量がいっぱいになってきて軽量化のためデータをたくさん消したのでそのプロセス等を共有できたらと思います。
初心者のため間違い等あると思いますがよろしくお願いします?‍♂️

# 環境
>php:5.3.3
mysql:5.7.17
使用FW ethna

# 調査、実行順序
1. 容量の大きいテーブルからデータを消すテーブル候補を出す
2. PHP(phpstorm)でテーブル名で検索し使用されている箇所と使用用途の洗い出し
3. 使用しないデータはダンプし、削除
の順でやっていきました。

# 1. データ削除のためのテーブル調査
この調査ですが、テーブル容量の方面からの調査を行いました。
まず容量が上位のテーブルを検索しました。

クエリはこんな感じです。

元記事を表示

[WIP]PHPerKaigi 2022に参加してきました。

## はじめに

PHPerKaigiとは

>PHPerによるPHPerのためのお祭り

2022/04/09, 10, 11開催です。

https://phperkaigi.jp/2022/

## PHPerチャンレンジ

開催期間中に公式ページ、スポンサーブログ、会場、twitterなどにシャープから始まる文字列が記載されており、それを探し出して専用のフォームに投稿して点数を稼いで準備を競うゲームです。
過去にも開催していて大変盛り上がりました。
僕も過去に参加したことがありましてその時の記事はこちらです。

https://qiita.com/yamamoto_hiroya/items/d60846f1837e94d059d9

## 気になったセッション

後で追記します。

### マイクラスクラムワークショップ

安定のGMOさんでした。
マインクラフトっていうキャッチーなテーマでスクラムを分かりやすく解説してくれていてとてもおもしろかったです。
丸1日使ったワークショップとのことでなかなか真似はできないですが、機会があればやってみたいなと思いました。

## まとめ

元記事を表示

[PHP] Closureを活用して性能に優しいdebugログを残す工夫をしてみる

# 概要

この記事では、PHPのClosure(無名関数)機能を、性能改善のトライとして活用する例を紹介します。
無名関すはPHPだけではなく、さまざまな言語で活用されるので、この一例が言語関係なく有用な内容になれば幸いです。

記事は以下の構成となります。

– 1 debugログ記録においての悩み
– debugログを使う際の課題を話します
– 2 Closureを使ってdebugログの性能最適化を図る
– Closureの概念を簡単に紹介と、debugログ処理の最適化を図ります
– 3 結論
– APPENDIX. 注意点

※ debugログを残すのが良いのかに関する本質的な話は、今回は深く話しませんので、あらかしめご理解ください。
※ この記事は個人の主観を含めています。もし間違ったところや他の意見がありましたら、コメントいただけると幸いです。

# 1. debugログ記録においての悩み

## 1-1. debugログを使いまくってもいいか?

> debugログを残す際に、データに何らかの演算を加えて残す場合は要注意
> ※例:配列のマージ、オブジェク

元記事を表示

Intel製の機械学習でプログラムの問題を検知するOSSをPHP対応した

# ControlFlag

Twitterを見ていると面白そうなニュースが飛び込んできました。

> ControlFlagは、機械学習を利用してソフトウェアやファームウ

元記事を表示

【Laravel】ローカル環境でのプロフィール画像のデフォルト表示、編集(登録)機能のいろは【画像アップロード】

# 今回紹介するのは
今回の記事では、ユーザープロフィール画像のデフォルト表示と、その画像を任意の画像に変更する機能について紹介します。SNSでよくある機能ですね。

この記事ひとつで、
**・プロフィール画像のデフォルト表示**
**・任意のプロフィール画像の登録、編集、表示機能**
上記を実装することができます。

# 環境
“`
$ composer -V
Composer version 2.0.11 2021-02-24 14:57:23

$ php artisan -V
Laravel Framework 6.20.44
“`

# はじめに

### 1. 2つのpublicディレクトリ
まずは、大元となる画像アップロード機能の説明から入ります。
画像の保存は、ユーザーの名前を保存したりするのとは違って少し複雑です。

今回、肝となるのが“public“ディレクトリです。
![スクリーンショット 2022-04-08 20.27.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/

元記事を表示

AWS SDK for PHP: 認証情報をプロセス間で再利用する

## 背景

AWS EC2 上で AWS SDK を使ってリソースにアクセスする場合、Instance Profile に指定したロールの権限が自動的に使われます。これは実際には IMDS (Instance MetaData Service) へ HTTP でアクセスして一時的な認証情報を取得することで実現しており、Web サービスではリクエスト(プロセス)毎に発生します。しかしこのリクエスト数には一定の上限があり、スロットリングによるリトライやエラー(タイムアウトになる場合もあるようです)が発生する場合があります。これにより、AWS リソースへのアクセスを頻繁におこなう Web サービスでは問題になることがあります。

参考) [Retrieve instance metadata – Amazon Elastic Compute Cloud](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html)

PHP のプロセス間で共有する領域に認証情報を有効期限までキャ

元記事を表示

Larevel + Vue3 + Typescriptでvue-routerを使いたい

## 【きっかけ】
* Laravel + Vue3 + Typescriptのセット、またVue3 + Typescript + vue-routerのセットの記事は探せば出てくるものの、4つ合わさった記事が見つからなかったので作成
## 【構築】
### Laravelプロジェクト作成
* 今回はcomposerコマンドでプロジェクト「sample-project」を作成
“`
composer create-project laravel/laravel sample-project
“`

### プロジェクト直下に移動
“`
cd sample-project
“`

### パッケージインストール
“`
npm install
“`
### Vue3インストール
“`
npm install vue@next –save-dev
“`

### Typescriptインストール
“`
npm install -D typescript ts-loader
“`

### vue-routerインストール
“`
npm install vue-rout

元記事を表示

【Laravel】スターターキットを使用しないマルチログイン認証の実装方法

## この記事に書いてあること
マルチログイン認証の実装方法

## 利用バージョン
Laravel8

## モデル&マイグレーションをつくる
管理者用のモデルとマイグレーションをつくる
※一般ユーザー用のモデルとマイグレーションはデフォルトで入っているものを利用

以下のコマンドを実行

“`
php artisan make:model Admin -m
“`

### モデルの設定
`app/Models/User.php`の中身をまるっと`Admin.php`にコピペ
クラス名の変更を必ずする

“`php:app/Models/Admin.php

元記事を表示

PHPでプリペアドステートメントを使った検索機能でつまずいた所

## はじめに
PHP勉強中してます。間違ったりしていたら指摘等よろしくお願いします。

## 環境
|ツール |バージョン |
|—|—|
|MAC |Big Sur 11.5.2|
|PHP |7.4.0 |

## つまずいたところ事
ブログアプリ作成時、プリペアドステートメントを使った検索機能のbindValueのパラメータの書き方でつまずいた。

## どんなエラーが起きたか
下記のSQLだと、うまく取得できずにNULLがかえってくる。
“`
//検索ワードをPOST送信
$searchWord = $_POST[‘search’];

//SQL
$sql = <<< EOF SELECT * FROM blogs WHERE contents LIKE '%" :searchWord "%' EOF; ``` ``` //bindValue $statement->bindValue(‘searchWord’, $searchWord, PDO::PARAM_STR);
“`

#

元記事を表示

Laravelインストール時に「PHP拡張モジュールがない」というエラーが発生し、php.iniを修正して対応

laravelをインストールする際、下記エラーメッセージが発生。

“`
Your requirements could not be resolved to an installable set of packages.

Problem 1
– laravel/framework[v9.2.0, …, 9.x-dev] require league/flysystem ^3.0 -> satisfiable by league/flysystem[3.0.0, …, 3.x-dev].
– league/flysystem[3.0.0, …, 3.x-dev] require league/mime-type-detection ^1.0.0 -> satisfiable by league/mime-type-detection[1.0.0, …, 1.9.0].
– league/mime-type-detection[1.0.0, …, 1.3.0] require php ^7.2 -> your php version (

元記事を表示

【メモ】PHPの概要を学ぶ

web系のサーバーサイドエンジニアを目指す奴のメモ書きです。

# ■サーバーサイドエンジニアとは
DB登録、取得など、画面で入力された情報などを処理する層のことをサーバーサイドという。
そのサーバーサイドのロジックを記述するのがサーバーサイドエンジニア。
主に使う技術としてはRuby,PHP,Java/MySQL/Linux/AWSなどがあるらしい。

# ■なんでphp
Youtubeで調べてみてもRubyだろうがPHPだろうがやれることは変わらないということなので
ほんの少し触ったことのあるPHPを学ぶことにする。
サーバーサイド言語は一つ学べば他は比較的簡単に習得できるとか。

# ■PHPとは
PHPは動的にWebページを作成できるサーバサイドのスクリプト言語
PHPの正式名称は「PHP: Hypertext Preprocessor」
Webアプリケーションの開発によく使われる
どうやら動的Webページを簡単に作成できるようにするための言語らしい
しかも習得しやすいらしい←ホンマか!?
MySQLなどのDBともやり取りが簡単
使い方としてはHTMLにPHPのコードを記述する

元記事を表示

PHPでの文字列追記は結合(.)より結合代入(.=)が圧倒的に早い

あまりにマニアックな情報

2022/04/10 ソース見たので表現修正(内容は同じ)

### まとめ
* 文字列追記は結合演算子(.)より結合代入演算子(.=)の方が圧倒的に早い
* つまり “`$a = $a . $b“` より “`$a .= $b“` が早い
* 文字列が大きいほど、結合回数が多いほど顕著に差が出る
* Webアプリならいずれも小さいので、ほとんどのケースでは気にしなくて良い
* エクスポートなど大量のデータを吐き出す処理では顕著に影響する(簡単に何百倍、分単位で差が出る)
* PHPはちゃんと最適化されてる

### 結合演算子(.)より結合代入演算子(.=)の違い
ほとんどの場合は結合演算子(“`$a = $a . $b“`)と結合代入演算子(“`$a .= $b“`)は同じで、単にショートハンド位の認識をされていると思う。[マニュアル](https://www.php.net/manual/ja/language.operators.string.php)でも特に違いには触れていない。
というか自分がそう思っていたが、想定以上

元記事を表示

OTHERカテゴリの最新記事