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

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

【PHP】可変変数で「カラスは白い」と言ってみた

こちらの記事はPHPの可変変数についてまとめたものです。

PHPで可変変数を使用する上でのメリットや懸念などについて、ソースコードと併せてまとめてあります。どうかご参考いただければ幸いです。

## 投稿の目的

本投稿の目的は、PHPにおける可変変数について自分なりのアウトプットを試みることです。

知識を整理するためのアウトプットはとても有意義なことですし、それをネット上で共有すれば自分がどれだけ理解しているかを知ることにもつながります。

プログラミング言語に関する投稿は初めてですが、思い切ってまいります!

## PHPにおける可変変数とは何か?

PHPには可変変数という変数があります。

これにより変数名に別の変数の識別子を指定することで、変数名を動的に付け替えることができます。ただ、この文言だけで可変変数について理解することはなかなかできないかもしれません。

そこで実際に、ソースコードを書いたり動かしたりしながら確認していきます。

## PHPで可変変数を使ってみる

早速ですが、まずPHPの可変

元記事を表示

PHP-関数

# PHP-関数

* ドキュメント
https://www.php.net/manual/ja/language.functions.php

1. 関数の基礎
【引数】 
・リファレンス渡し → バグの温床になりやすい
・デフォルト引数
・可変長引数
・名前付き引数 → 引数の順番を変えたくない、気にしなくてよいときに使う
【返り値】
・return
・可変関数 → 関数の呼び出しを動的に行える

1. 無名関数
クロージャーとも言われる
関数名を持たず、値として受け渡しできる
関数の引数に関数を渡したい時に使う
一回しかしない処理の時、関数を定義しないので、省スペースで書ける
親のスコープの変数を引き継ぎたいときは、useを使う※親スコープの変数は使えない。
無名関数は、簡単に書くことができる(アロー関数)
※アロー関数は、無名関数と違いuseを使わなくても、親スコープの変数を自動的に使える

1. 関数を作成する理由
・プログラムの複雑さを下げるのが重要な理由
・詳細な処理を抽象化隠蔽することができる。
・コードの重複を避けることもできる。変更による箇所が一箇所にな

元記事を表示

MAMPでPHP文字化け

MacでMAMPインストールしたが文字化けしたので、対策を備忘録
PHP7.4.12のバージョンを使用

参考にした記事
https://plaza.rakuten.co.jp/taro3chidayo/diary/202005090000/
https://qiita.com/redamoon/items/28e7bbe1ccbf58cbbd04

MAMP/bin/php/php7.4.12/conf/php.ini
php.iniを一部書き換える
その前にバックアップとっておく

左辺をワード検索して、右辺を書き換え
文頭に「;」があれば削除
default_charset = UTF-8
date.timezone=Asia/Tokyo
mbstring.language = Japanese
mbstring.http_input = auto
mbstring.internal_encoding = UTF-8
mbstring.detect_order = UTF-8,SJIS,EUR-JP,JIS,ASCII

これでMANPを再起動すれば治るはずが、治らない。

元記事を表示

【PostgresSQL】WindowsPCのSQLサーバーの立て方

# 【PostgresSQL】WindowsPCのPostgresサーバーの立て方

## インストール

### 1. PostgresSQLのインストール
以下のサイトからPostgresSQLのインストーラーをインストールして、実行する。

https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

PostgresSQLコマンドを使用するため、”システム環境変数の設定”から変更して、下記のフォルダへパスを通す。

“`
C:\Program Files\PostgreSQL\15\bin
“`

### 2. Openjdkのダウンロード
以下のサイトから、任意のOpenJDKをダウンロードする。

https://jdk.java.net/

任意のフォルダに置く。binの中にjava.exeなどがある。

“`
C:\Program Files\jdk-19.0.1\bin
“`

### 3. Metabaseのダウンロード
以下のサイトから、任意のMetabase.jarをダウンロ

元記事を表示

カプセル化をphpで説明してみた

1.カプセル化とは?
外部からデータや手続きの詳細を隠蔽すること、アクセスできないようにすることを「カプセル化」と言います。
PHPでは、**private**などを用いてクラスの外から変数やメソッドにアクセスできないようにすることで、「カプセル化」を実現しています。
以下で実際のコードを見てみましょう。

2.カプセル化がされていないPHPのコード
“`
//カプセル化されていないコード
class hoge {
public function pub_func() {
echo “public”;
}
}
$obj = new hoge();
$obj->pub_func();

//出力結果
public
“`
上記では、修飾子publicでメソッドを定義しています。
この時はclassの外でメソッドを呼び出しても、メソッドが実行されることが
わかります。
クラスの外からメソッドにアクセスできることから、このコードはカプセル化がされていないことがわかります。

3.カプセル化がされているPHPのコード
“`
//カプセル化されているコード
class hog

元記事を表示

PHP Fatal error: Uncaught Dotenv\Exception\InvalidFileException: Failed to parse dotenv file. Encountered an invalid name at xxxxx の解決例

## エラーが出た環境
xserver
larravel8
PHP 8.0
mariaDB
node 14.17.xx

## 何をしようとしたら起きた?
.envを環境ごとに.env.prodと.env.localのように分けても自動で読み取れる実装をしたところ、レンタルサーバー上でタイトルのエラーが出た。(nameに当たるxxxがxserverへのssh接続のコマンドだった)

## 原因
.env.prodを作成(コピーアンドペースト)したときにsshコマンドまで貼り付けてしまった。

## 結論(修正方法)
.envファイルの不要な記述を削除で直った。

## 余談
上記の作業中に.envファイルの`APP_ENV=production`を`APP_ENV=prod`にした箇所でもバグったので、.envのエラー探しのときは確認してみても良いかもしれない。

元記事を表示

What should your professional PHP developer know?

“Here’s a list of ingredients that your professional PHP developer must have:
Good grip on procedural programming theory Well-versed with Object Oriented Programming
Technology Expertise Ability to build flawless digital products using the latest technology stack comprising:
o Symfony
o Zend Framework
o PHP
o JS
o CakePHP
o jQuery
o CodeIgniter
o Dojo
o Lamp
Security Seasoned in professional practices and instincts providing high-level security to your code, database and file system
Analysis A

元記事を表示

コマンドラインで動作するwikipediaのログ解析システムを作る

## はじめに

コマンドライン上で動作するwikipediaのログ解析システムを作成しました。
こちらはプログラミング学習サービス、独学エンジニアの課題への取り組みです。

https://dokugaku-engineer.com/

データベースのパートの最後の課題として出題されるもので、模範解答はありません。
多言語で構成されたデータベースを、プログラム(PHP)を通じて扱うことで、データベースやPHPへの理解が深まりました。
作成に当たってつまずいた所を中心に、開発をまとめました。

作成したものはGithubで公開しております
https://github.com/progundeike/wiki-log-analysis

実行中のキャプチャー

## 実装する機能

公開されているWikipedia

元記事を表示

PHPでアクセスカウンターを作る

ここでは、ファイルを使ってアクセスカウンターを作成します。
アクセスカウンターの値を保持するファイルを1つ作成し、ページを表示するたびに、そのファイルの値を参照してアクセスカウンターを表示することにします。
まず、アクセスカウンタを表示しているページが表示されたら、アクセスカウンタを保持しているファイルをr+モードで開いてください。
“`php
$counter_file = ‘counter.txt’;
$fp = fopen($counter_file, ‘r+’);
fclose($fp);
“`
現在のカウントを読み取ります。
アクセスカウンターの桁数は8であること。
“`php
$counter_file = ‘counter.txt’;
$counter_lenght = 8;

$fp = fopen($counter_file, ‘r+’);

if ($fp){
if (flock($fp, LOCK_EX)){

$counter = fgets($fp, $counter_lenght);

flock($fp,

元記事を表示

PHP静的解析ツール PHPMD 個人的メモ

# PHPMD

[PHPMD公式サイト](https://phpmd.org/)

+ 考えられるバグ
+ 最適でないコード
+ 複雑すぎる表現
+ 未使用のパラメーター、メソッド、プロパティ

を通知してくれる
「最適でないコード」「複雑すぎる表現」あたりはPHPStanと差別化出来ているのかな。

“`bash
# ./vendor/bin/phpmd [パス] [フォーマット] [オプション]

# example
./vendor/bin/phpmd app/Http/Controllers/TopController.php text codesize,design
“`

## フォーマット

ターミナルで実行してみる分には個人が見やすい形式でOK。
PHPMD を組み込んでシェルでゴニョゴニョしたい場合は、扱いやすい形式でどうぞ。

| オプション | 説明 |
|:-|:-|
| ansi | ansi 形式で結果を出力 |
| html | html 形式で結果を出力 |
| json | json 形式で結果を出力 |
| text | text 形式で結果を

元記事を表示

PHP静的解析ツール PHPStan(Larastan) 個人的メモ

# PHPStan (Larastan)

レベルに応じたソースコードの解析を行い、不具合の原因になりかねない箇所を指摘してくれる素晴らしいツール。

[PHPStan公式サイト](https://phpstan.org/ “PHPStan”)

## 使い方

“`bash
# ./vendor/bin/phpstan analyse -l [level] [検証するパス]

# example
./vendor/bin/phpstan analyse -l 4 app/Http/Controllers/TopController.php
“`

## level

下位レベルのテストを全て含む(※レベル3はレベル0~2もチェックするよ)

| レベル | チェック内容 |
|:-|:-|
| 0 | 基本的なチェック、未知のクラス、未知の関数、$thisに呼び出された未知のメソッド、これらのメソッドや関数に渡された引数の数が間違っている、常に未定義の変数。 |
| 1 | 未定義の変数、未知のマジックメソッド、__call や __get を持つクラスのプロパティ

元記事を表示

【Laravel】イベントとリスナーで設定した通知が2回くる問題の解決法

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

## 状況

動作確認で通知を飛ばしたとき、同じ通知が2回飛んでしまっていた。

– “`$listen“`の配列に“`PodcastProcessed“`イベントと“`SendPodcastNotification“`リスナーを手動で登録
– “`shouldDiscoverEvents()“`メソッドをデフォルトの“`false“`から“`true“`に変更

“`php
namespace App\Providers;

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Event;

class E

元記事を表示

Symfonyのバリデーションで、日本語のエラーメッセージを調整する

Symfonyのバリデーションで、日本語のエラーメッセージを微調整する方法。ちなみにSymfony 5.4。

## やりたいこと

エラーメッセージの日本語が分かりづらいので、微調整したい。
`@Assert\NotBlank()`でエラーが出ると「入力必須項目が入力されていません」、
`@Assert\Email()`は「有効なメールアドレスではありません」、
となっていて、微妙な日本語になっている。

この日本語を変えたい。

## 解決方法

1. Validatorの日本語ファイルを探しだした。場所は:`vendor/symfony/validator/Resources/translations/validators.ja.xlf`
2. このファイルを、ここにコピー:`translations/validators/validators.ja.xlf`
3. 中身の日本語を適宜修正。

これで、変更できた。

適当に試したら動いた、という珍しいパターンだった。

元記事を表示

さくらVPSデプロイ時のエラーについて②

## さくらVPSデプロイ時のエラー
migration 実行後に、IPアドレスでうまく表示されなかったので書き留めます。

## 原因:configの権限などの問題
vim /etc/httpd/conf.d/プロジェクト名.conf で下記を追加。
![スクリーンショット 2022-11-22 13.22.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981740/f0cb26ac-ab9b-b312-fc11-a174088ef03c.png)
保存後、apacheを再起動(systemctl restart httpd)
![スクリーンショット 2022-11-22 13.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981740/42f45d6d-fe75-297f-6350-5d3d7fc97f1a.png)
表示されました。最後に、 php artisan storage:link を

元記事を表示

さくらVPSデプロイ時のエラーについて①

#

## さくらVPSデプロイ時 php artisan migrate を実行した時に出たエラーを書き留めておきます。

データベース作成後、php artisan migrate を実行すると以下のようなエラーが発生。

![スクリーンショット 2022-11-21 23.41.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981740/017955dd-4278-9f0e-b9d4-cf20c0037e02.png)

## 原因:mysqlにGRANT権限が付与されていなかった。
以下で実行し、無事マイグレーションが通りました。
![スクリーンショット 2022-11-22 13.10.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2981740/b815f682-f355-1796-3c72-ef52347c47fa.png)

元記事を表示

PHPUnit が exit code 255 で死ぬ

OTHERカテゴリの最新記事