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

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

【Laravel】EloquentCollectionにてネスト先カラムをGroupByする

## はじめに
そもそも1カラムに複数値を持たせるのはどうかという点は置いといておいて、、、。
何らかしらのレスポンスデータをログとしてそのまま格納したい場合などあると思います。
こちら調べてもあまり記事がなく、もしかしたらやりたい人がいるかな~と思いメモとして記事に残しておきます。

## 要件
Jsonがそのまま入ったカラムにて、Jsonのキーでグルーピングしたい

## 結論

“`php
// ドット「.」でつなげる
$collection->gropuBy(‘xxx.xxx’);
“`

## 検証内容

### テーブル構成
“`php:migration.php
Schema::create(‘conversions’, function (Blueprint $table) {
$table->id();
$table->json(‘meta’);
$table->timestamps();
});
“`
### データ
|id| meta | created_at | updated_at|
|:——-

元記事を表示

Laravelで特定のホストでリクエストが来た時しか発動しないrouteを作って管理画面の認証画面すらも隠蔽してみる

趣味で作っているLaravelのアプリケーションで管理画面だけ通常のサービスを提供しているホストは全く別のIdentity-Aware Proxyで保護されたホストで配信して、一般のユーザから `/admin/` を叩かれても応答を返さないことで管理画面の認証画面すらも隠蔽したくなったのでその方法を紹介したいと思います。

## 早速route middlewareを作る
名前は何でも良いので早速route middlewareを作りましょう。

“`php:app/Http/Middleware/CheckRestrictedRouteHost.php

元記事を表示

【PHP】Google Analytics APIでレポートデータを取得したい!

最近めっきりAPIからは遠ざかっていたのですが、
久しぶりに運用担当さんから連絡が来ました。
曰く「**Google Analyticsのレポートを自動化したい**」とのこと。

ヤッホーーーイ!!

最近バージョンアップとかしかなくて退屈してたんだよね!(違う)

ということで、今回挑むのはGoogle Analytics APIです。
例によって「(意地でも)**サンプルを使わずにデータを取る!**」方式により
頑張っていきたいと思います。

毎度の繰り返しになりますが、
Googleは「サンプルプログラムを使ってやってね!」を推奨しているので
なにかあっても自己責任でお願いします!

**っていうかアナリティクスってなに!?**
正直あまり馴染みがないのですが・・・まあなんとかなるか。なるか・・・?

# Google Analytics APIとは

Google Analyticsとは、天下のGoogleさんが提供しているアクセス解析ツールです。
当然のことながら無料。さすがぐーぐるさんですね。

Analyticsを利用すると、サイトにどのくらいアクセスが来ているか、
リア

元記事を表示

[Drupal]PHPの設定を変更する

PHPのメモリ容量などphp.iniに書かれている情報はsettings.phpに以下のような行を追加することで編集できます。
“`php
ini_set(‘memory_limit’, ‘256M’);
“`

他には
– php.ini
– .user.ini
– .htaccess
を編集する方法もあります。詳しくはこちらをご覧ください。

https://www.drupal.org/docs/7/managing-site-performance-and-scalability/changing-php-memory-limits

元記事を表示

EC2にLaravel+MySQL環境構築

# はじめに

EC2にLaravelをインストールし、
すでに作成済み(githubやcodecommitなど)のプロジェクトを展開する方法です。

※バージョンなどは古い場合があります。

# 開発環境作成

#### 必要なものをインストール
ec2-userで作業します。

**httpd** をインストール。

“`
$ sudo yum -y install httpd
“`

**git** をインストール。

“`
$ sudo yum -y install git
“`

**PHP** をインストール。(バージョンは任意)

“`
$ sudo amazon-linux-extras enable php7.4 -y
“`

“`
$ sudo yum clean metadata
“`

“`
$ sudo yum install php php-{pear,cgi,common,curl,mbstring,gd,mysqlnd,gettext,bcmath,json,xml,fpm,intl,zip,imap}
“`

問題なくインスト

元記事を表示

自分用メモ: empty可変長引数Ver.

## まえがき
`isset()`は可変長引数対応なのに`empty()`は対応してない!どうして!と思ったので。
n番煎じだったらゆるして

## コード
“`php:function_emptyAny.php
function emptyAny(mixed …$vars) {
foreach ($vars as $v) {
if (empty($v)) return true;
}
return false;
}
“`

## あとがき
`emptyAny()`は引数のうち一つでも空のものがあれば`true`、すべて格納されていれば`false`を返す。
アンケートフォームのサーバーサイドバリデーションにつかいました!!!

## コメントより
コメント欄に`array_filter()`使ったもっと便利な方法あるから見て!!!ありがとうございます!!

元記事を表示

DockerでnginxとPHPの環境を構築してみた

# 概要
dockerの環境構築をしたので忘れないためにメモ。

## 経緯
ある日仕事の関係で職場のPHP環境のdocker-composeファイルを読んでいた時の事。
そのファイルの設定ではnginxとPHPを別コンテナにして作っていたのだが、ある疑問が浮かんだ。

**「nginxとphpが別サーバにあるのにどうやって動いてんの……?」**

当方環境構築はvagrantやmacでのLAMP環境しか経験がなく、apacheを使っていた(←後述するが、同じサーバでないと動かないと勘違いしていた最大の原因がこれ)ので別々のサーバで動く仕組みが分からなかった。

そこでnginxとPHPの通信方法を理解するため、そして今後プライベートでも環境構築できた方が都合が良いので勉強がてら環境構築してみた。

# そもそも何で別サーバとして構築するのか
**web三層構造**というアーキテクチャ? みたいな概念があり、サーバを分けることによって負荷の軽減・障害リスクの分散等のメリットがある。

# どうやってnginxとPHPは通信してんの?
その説明の前にまずはPHPには2つの違いがあることを

元記事を表示

Valitron

# Valitronとは
PHPのバリデーションライブラリです。
問い合わせフォームを作る

# インストール
“`
$ composer require vlucas/valitron
“`

# valitron導入
valitronの書き方です。

“`_function.php
function fields()
{
// Change array here accordingly to the ‘s name attribute.
// _token should always be available.
return [
‘_token’, ‘name’, ‘mail’, ‘detail’  //nameなどを定義
];
}

/**
* Validate the message.
*
* @return Validator
*/
function validate($data)
{
$validator = new Validator($data);

$va

元記事を表示

【PHPUnitエラー】Maximum retries of 10000 reached without finding a unique value

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況

factoryをいくつか作成すると下記のエラーが出た。
このエラー文でググっても原因が分からず、解決に時間がかかったので備忘録とする。
“`
Maximum retries of 10000 reached without finding a unique value
“`

“`php
class CampanyFactory extends Factory
{
public function definition(): array
{
return [
‘name’ => $this->faker->company(),
‘domain’ => $this->faker->unique()->safeEmailDomain(),
];
}
}
“`

## 原因
“`safeEmailDomain()“`は“`example.com, example.net, example.org“`をランダムで出してくれるfakerだが、
今回

元記事を表示

【PHPUnit】Factoryのstateを使ってテストデータを作成する

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 前置き
テストデータの一部を変更して使いたいとき、下記のように書くこともできるが
RSpecで使われるFactoryBotのtraitのように便利に書けるものがないか調べたらあった。

“`php
Task::factory()->create([
‘status’ => ‘done’,
]);
“`
## Factoryのstate
ファクトリの状態を一部変更してテストデータを作成できる。
Laravel8から使える。

“`php
class TaskFactory extends Factory
{

public function done(): TaskFactory
{
return $this->state(function (array $attributes) {
return [
‘status’ => ‘done’,
];
});
}
}
“`
テスト内で下記のように定義して使える。

“`php

元記事を表示

【PHP】phpのコールバック関数、無名関数なぐり書き

# コード
“`PHP
15,
‘user2’ => 3,
‘user3’ => 20,
‘user4’ => 8,
‘user5’ => 5
];
$result = check_array($before,function($v){
return $v % 3 === 0;
});

function check_array($before,$callback){
$after = [];
foreach ($before as $key => $v){
if($callback($v)){
$after[$key] = $v;
}
}
return $after;
}
var_dump($result);
“`

# 結果
“`
array(2) {
[“user1”]=>
int(15)
[“user2”]=>
int(3)
}
“`

元記事を表示

名前空間に関して勉強したことをまとめていく①

## 名前空間の概要

– namespaceは名前空間とも呼ばれ、項目をカプセル化するときに使用します。
– 名前空間とは、例えば通常同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。
– そのため、名前空間を指定しておけば自分が作ったクラスが、サードパーティのクラスや関数などと名前が衝突することを防ぐことができます。

“`A.php

元記事を表示

PHPのdisable=disableについて

# disable =disableについて
disabled属性は指定した要素を無効化する役割があるみたいです。

“`php
PHPのHeader関数とdie関数

# Header関数とは
***HTTPヘッダを送信する関数***です。
HTTPヘッダーとはリクエストとレスポンスの処理のことでこれらの要求を送信するものです。
HTTPヘッダを送信する役割があり、リダイレクト処理を行うことができます。

# header関数のLocationで別ページにリダイレクト
header関数では、「Location」というもの使ってURLを指定し、画面を遷移させます。

基本的な書き方は下の通りです。
“`php
header(‘Location: 遷移先のURL’)
“`

実際に使ったコードです。
“`php
if (empty($_SESSION[‘contact-form’])) {
header(‘Location: ../index.php#contact’); // Redirect back to input page if user directly access confirmation page.
die();
}
“`
Locationの後に***index.php#contactのページに遷移***するように指定し

元記事を表示

【初心者PHP】文字列を表示させる

# コード
“`PHP

元記事を表示

AWS SDK for PHP S3アクセス時にinstance profile利用する場合の一工夫 Laravel編

# AWS SDK for PHP S3アクセス時にinstance profile利用する場合の一工夫 Laravel編
結論は、LaravelではServiceProviderを駆使して
インスタンスプロファイル認証プロバイダと認証情報のメモ化を使いましょう!

# 解説
## デフォルトの認証プロバイダ
### Aws\Credentials\CredentialProvider::defaultProvider()
デフォルトの認証情報プロバイダで、クライアントの作成時に credentials オプションを指定しなかった場合に使用されます。

#### どんな仕様か?
このプロバイダは、環境変数、.ini ファイル (.aws/credentials ファイルから .aws/config ファイルの順)、インスタンスプロファイル (EcsCredentials から Ec2 メタデータの順) の順で認証情報のロードを試行します。

つまり、EC2インスタンスIAMロールまたはECSタスクIAMロールを使用する場合、AWS php sdkは自動的にec2メタデータAPI(169

元記事を表示

【PHP】クラス static public Protected Privateについてのまとめ

1・static function →インスタンスの生成が不要でクラスを定義するだけで呼び出せる (スタティック)
2・public function →クラス外から呼び出す関数 (パブリック)
3・Protected function →継承にのみ呼び出す関数 (プロテクティド)
4・private function →クラス内のみから呼び出す関数 (プライベート)
# コード
“`PHP
Private();
}
p

元記事を表示

【随時更新】個人的に参考になった記事・サイトのまとめ(PHP,Laravel,JavaScript,TypeScript,Three.js…)

# はじめに
個人的に参考になった記事・サイトのまとめです。
技術は問わずですが、主にタイトルに記載のものとなります。

随時更新していきますが、始めは基礎習得に役に立った記事を掲載していきます。

## 基礎
### [freeCodeCamp](https://www.freecodecamp.org/japanese/)
HTML,CSSのようなコーディングからVanillaJS,React,Node.jsなどのプログラミング、
DataBaseの基礎など幅広く無料で学ぶことができます。
アメリカ発のサービスのため英語版しかありませんでしたが、2022年頭から日本語版が出ました。
(翻訳してくれている方感謝です…!)

https://www.freecodecamp.org/japanese/

## PHP
### [PHPでログイン機能を実装するチュートリアル](https://qiita.com/ShibuyaKosuke/items/f114ffccf441edb2b745)

https://qiita.com/ShibuyaKosuke/items/f114f

元記事を表示

【PHP】【月の日数問題】西暦の年月を入力して、その月の日数を求めよ

# コード
“`PHP
format(‘t’);

“`

# 結果
“`
29

“`

元記事を表示

ハッカーニュースみたいなサイト作った

Hacker News(以下、HN)は、コンピュータサイエンスとアントレプレナーシップに焦点を当てたソーシャルニュースサイトです。HNの「ハッカー」という言葉は本来の意味で使われており、技術いじりを楽しむ人々で構成されるハッカー文化を指しています。

### 作ったサイト
http://kuroto.news/

### HN
https://news.ycombinator.com/

### なぜ作ったのか
HNのようなサイトが日本語で存在すれば面白いのに、と思ったから。(似たようなことを考えた人が過去にいてちょっぴり作ったらしいですが、失踪しています。)

日本の技術動向がどんなものなのかパッと見れるサイトがほしいな、と思いました。でもTwitterだと情報過多でキュレーションがうまくいかないので、既存の仕組みでうまくいっているものが作りたかったわけです。

### まだ実験段階
ついさっき思いつきで作ったばかりですが、現時点ではベータ版的なもんです。バグがあるかもしれんので、そのときはサイトのContactからメールを送ってくれるとありがたいです。

本家のHNは2007年に作

元記事を表示

OTHERカテゴリの最新記事