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

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

自分用メモ: 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`を返す。
アンケートフォームのサーバーサイドバリデーションにつかいました!!!

元記事を表示

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年に作

元記事を表示

Laravel8にLarastanがインストールできない AND 解析対象除外のファイル指定

### 参考にしたサイト
https://tech-tech.blog/php/laravel/larastan/
めっちゃ助かりました!!

### 環境
Docker Desktop for Mac
PHP 8.0
Laravel: 8

“`bash:PHPのコンテナ内でPHPとLaravelのバージョン確認
root@9c5e6003337c:/work# php -v
PHP 8.0.18 (cli) (built: Apr 20 2022 12:05:49) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.18, Copyright (c) Zend Technologies

root@9c5e6003337c:/work# php artisan –version
Laravel Framework 8.83.10
“`

### Larastanをインストールしたいのにできない!
#### 現象
`composer require nunomaduro/larastan –dev`でインストールできるっ

元記事を表示

【PHP】【個人開発】エンジニアマッチングサービス

エンジニア同士がマッチできるサービスをリリースしました。

![match(全体マッチングの流れ)](https://user-images.githubusercontent.com/60878547/167395691-3b3b3651-f204-49d1-9002-f8849601db28.gif)
# マッチングの流れ
`マッチ画面`上で気になるエンジニアに`いいかも`を送ります。
送られた相手から`いいかも`がくれば、マッチング成立となります。

![match(マッチングの流れ_前編).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/bca4c90a-7761-a6da-22fe-dd44ec6b87f8.gif)

マッチしたユーザーとはメッセージでやり取りすることができます。

![match(マッチングの流れ_後編).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/60e1186

元記事を表示

PHP IPアドレスが指定した範囲内にあるかどうか判別する関数を適当に書いた

## 概要

googlebotなどのクローラーがアクセスしてきた時に、特定の処理を除外するために書いた。例えば広告を表示しないなど。

参考:[IPアドレスが指定した範囲内にあるかどうか判別する](https://qiita.com/ran/items/039706c93a8ff85a011a)

## 範囲の形式

* 完全一致 192.168.0.1
* マスク 192.168.0.0/24
* マスク 192.168.0.100/24
* from/to 192.168.0.100/192.168.0.200

## PHPUnitテスト
“`PHP
public function test_accept_ip() {

// 完全一致
$this->assertTrue(accept_ip(‘192.168.0.1’, ‘192.168.0.1’));
$this->assertFalse(accept_ip(‘192.168.0.1’, ‘192.168.0.22’));

// マスク
$this->assertTrue(acce

元記事を表示

の違い

#
“`php

“`
は “`
“`
はただPHPを定義しただけです。

# 資料
https://teratail.com/questions/68737

https://www.php.net/manual/ja/language.basic-syntax.phptags.php

元記事を表示

CSSで文字数をカウントして、幅を100%使い切る

## CSSって、文字数カウントできないんです。

それなら、文字数をカウントできるようにすればよいのです。

“`test.css
.test {
width: 95w;
}
“`

この95wの大きさの中に、
例えば、5文字を
もしくは25文字を可能な限り大きな可変で文字で1行でいれなければなりませんでした。

答えはこれしかなかったです。

“`test.php
$plength=mb_strlen($title);
$pspace=”.1rem”;

if($plength<6) { $pspace=(6 - $plength) * 1 . "rem"; $plength=6; } // 一応、body の適当など真ん中に style があっても認識はしてくれます echo '