PHP関連のことを調べてみた2021年10月08日

PHP関連のことを調べてみた2021年10月08日

SonarQube+WindowsでPHPソースをスキャンする

間があいてしまいましたが、[前回](https://qiita.com/beeeegle/items/b662fc97cb697a49f542) に引き続きSonarQubeで静的解析を行うための手順を書いていきたいと思います。
今回はDockerコンテナでSonarQube立ち上げて、Windows10(ホスト)にあるCakePHPプロジェクトをSonar Scannerでスキャンしてみようと思います。

参考にした記事
https://qiita.com/takao-takass/items/5d54768ad0d315d3dad4

# 環境

– Windows10 Pro
Windows10 へDockerインストールについては [コチラ](https://docs.docker.jp/docker-for-windows/install.html) を参照
– コンテナ作成については [コチラ](https://qiita.com/beeeegle/items/b662fc97cb697a49f542) の記事を参照
– PHP:PHP 7.4.4
– Cake:

元記事を表示

イケてないswitch-case文からおさらばするPHP生活の知恵2 -PHP8編-

# はじめに

以前こんな記事を書いたんですよね。

https://qiita.com/layzy_glp/items/ea8fba02a1eba24a3123

でも最近PHP8を使うようになってもっとイケてる感じにかけるやん?ってわかったわけで、続編みたいな感じです。

# match式を使おう

ゆるゆる判定のswitch文を憎んでいるちょっとだけ意識高い目のぺちぱー諸氏は色んな方法でswitch文使わないで書こうと考えてると思うんですが、とうとうPHP8で我々の前に救世主が降り立ちました。 **match式** です。

https://www.php.net/manual/ja/control-structures.match.php

構文はこんな感じです。

“`php
$return_value = match (制約式) {
単一の条件式 => 返却式,
条件式1, 条件式2 => 返却式,
};
“`

公式ドキュメントに書いてある大事なポイントを抜き出してきます。

> match 式は、 switch 文と似ていますが、いくつかの違いがあり

元記事を表示

PHPで\nを改行させる方法

PHPだと文字列に\nが入っていても改行されない。

ただの空白として出力される。

## 解決方法

“`php
$summary = “abc\ndef\nghi”;

//改行されない通常のコード
echo($summary);

//改行されるコード
echo(nl2br($summary));

“`
nl2br関数を使うと、stringに含まれるすべての改行文字(`\r\n`,`\n\r`,`\n`,`\r`) の前に`
`あるいは`
`を挿入して返してくれる。

## 参考
https://www.php.net/manual/ja/function.nl2br.php

元記事を表示

[CakePHP] 型情報付きでエンティティを取得する

前回の[型情報付きでテーブルオブジェクトを取得する](https://qiita.com/hoogee/items/f476031427a270acc2cd)の続き

### 課題
通常CakePHPではエンティティオブジェクトをQuery/ResultSetからfirst()等で取得する。
ResultSetからforeachで取るような場合は“`@var“`書くしかないして、fisrt()のときくらいはEntityInterfaceではなく具体的な型情報がほしい。

###解決策
ジェネリクスを使用した回避策がこれ。
例としてByIdにしてあるけど条件は好みで適当に調整。

“`
use Cake\Utility\Inflector;

/**
* @template T
* @param class-string $fullEntityName 完全修飾エンティティ名
* @param int $id
* @return T of \Cake\ORM\Entity
*/
public static function getEntityById(string

元記事を表示

PHPでhello,Worldを表示させる

#コード
“`php
echo “Hello,World”;
“`

#結果
“`
Hello,World

元記事を表示

[PHP] 文字列の連結・文字列のサイズ

#文字の連結

“`
PHPでは’+’ではなく,’.’を連結演算子として使います。
“`

“`
// str型 + str型
echo ‘w’ . “ord” . PHP_EOL;
echo “飛ぶ” . “NO” . PHP_EOL;
“`

“`
// 更にPHPでは、int型 . str型 = strになります。
// 連結演算子の場合、PHPはint型とfloat型を勝手にstr型に変更します。
echo “The year is : ” . 2000 . PHP_EOL;

// float型 . str型 = str型。
echo “Left : ” . 20.343 . “km” . PHP_EOL;
“`

#文字列のサイズ
“`
//文字列のサイズを得るために, strlen()という関数を使います。 strlen(str型)
echo strlen(“California”) . PHP_EOL;
“`

“`

// 最後の文字のインデックスは2(=3 – 1)
echo “cat”[strlen(“cat”) – 1] . PHP_EOL;

元記事を表示

Raspberry Pi 3+の設定(忘備録)その4 MySQL(mariaDB)インストール

今までRaspberry Pi 3+に16GBのmicroSDを挿してwebサーバとして運用していましたが、手狭になってきたので64GBに改めて環境構築をした時の自分の作業の忘備録です。以前導入した時とだいぶ変わっている部分が多かったので驚いたのが第一印象でした。

#前提

* このラズベリーパイは外部に公開はしません。(twitterへのポストはします)
* 普段、このRaspberry Pi 3+は午前7時から午後11時まで30分毎にcronでbotを運用しています。
* そのため一日当たりの作業時間は夜間の23時から0時までの1時間ぐらいをメンテナンス時間として作業を行う予定です。

またこういう世界から遠ざかって久しいのでいろいろと拙い部分があると思います。ご指摘ください。

#関連ページ
https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744
https://qiita.com/cafe-capitola/items/283f41793cde409a36a6
https://qiita.com/cafe-capi

元記事を表示

Raspberry Pi 3+の設定(忘備録)その3 新規ユーザー作成・PHPのインストール

今までRaspberry Pi 3+に16GBのmicroSDを挿してwebサーバとして運用していましたが、手狭になってきたので64GBに改めて環境構築をした時の自分の作業の忘備録です。以前導入した時とだいぶ変わっている部分が多かったので驚いたのが第一印象でした。

#前提

* このラズベリーパイは外部に公開はしません。(twitterへのポストはします)
* 普段、このRaspberry Pi 3+は午前7時から午後11時まで30分毎にcronでbotを運用しています。
* そのため一日当たりの作業時間は夜間の23時から0時までの1時間ぐらいをメンテナンス時間として作業を行う予定です。

またこういう世界から遠ざかって久しいのでいろいろと拙い部分があると思います。ご指摘ください。

#関連ページ
https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744
https://qiita.com/cafe-capitola/items/283f41793cde409a36a6
https://qiita.com/cafe-capi

元記事を表示

Laravel8 コントローラの使い方

>
Laravelにおけるコントローラクラスを理解しよう
人気のPHPフレームワークLaravelを習得しよう 第4回
https://codezine.jp/article/detail/11524

こちらで勉強しててLaravel8ではハマったのでメモします。
おそらく記事はver8以前の記述ではないかと思います。

#1.実装内容(エラー版)
ページに記載通りに
①Control Class

“`php:\app\Http\Controllers\HelloBladeWithDataController.php

元記事を表示

Laravel での ajax を利用したファイルアップロード

#はじめに

Laravelを使っている案件でファイルアップロードを行う機会があったので、実装方法を記します。
なぜajaxを利用したかというと、編集画面というフォームの中でファイルアップロード機能を実装したかったから(編集画面で画面遷移することなくファイルアップロードのみ行いたかったから)

## HTML
“`html

@component(‘includes

元記事を表示

Laravel構成

#はじめに
laravelにふれる機会が増えてきたため、ディレクトリ構成をメモしておきます。
##laravelのディレクトリ構成
““`
─── Laravel
├── app ・・・アプリケーションのロジック
├── bootstrap ・・・laravelフレームワークの起動コード
├── config ・・・設定ファイル
├── database ・・・MigrationファイルなどDB関連
├── public ・・・Webサーバのドキュメントルート
├── resources ・・・ビューや言語変換用ファイルなど
├── routes ・・・ルーティング用ファイル
├── storage ・・・フレームワークが使用するファイル
├── tests ・・・テストコード
└── vendor ・・・Composerでインストールしたライブラリ
““

元記事を表示

【第六回】コロナ禍だから何かできることをー 自宅療養者連絡ツール ー

#前回までのあらすじ
[【第五回】コロナ禍だから何かできることを](https://qiita.com/STYLE-D/items/a745bd5faeb68caa1d7c)

####実装イメージ図
LINEを利用して保健所の担当者の負担を軽減するとともに、自宅療養者はいつでもつながっている安心感を持たせるためのツールイメージです。
![メイン.00_00_51_12.Still002.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/744261/cf85391e-aef8-5a59-0a1d-63d8e15412ce.jpeg)

##ユーザー登録の仕組みを作ろう
![システム構成-ユーザー登録.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/744261/a834c741-8adf-06af-6c5b-a5ce167aa55a.jpeg)

###今回はLIFFで表示する画面の開発部分です

####初期表示の処理

元記事を表示

php Slim3からSlim4へ移行する際のメモ

以下の手順を参考に作業。
https://codezine.jp/article/detail/11904

## ライブラリのバージョンアップ + 追加インストール
“`
//update
composer require slim/slim
composer require monolog/monolog

//追加
composer require slim/psr7
composer require php-di/php-di

“`

## 移行作業

### index.phpの修正
DIコンテナの変更のため、index.phpとdependencies.phpの設定を変更。
Slim\Factory\AppFactoryとDI\Containerを使うように変更。

“`
use Slim\Factory\AppFactory;
use DI\Container;

“`
以下の流れ
settingのjsonを取得。
containerを作成。
containerにsettingをsetしてdependenciesにcontainerを渡してまたcont

元記事を表示

[CakePHP] 型情報付きでテーブルオブジェクトを取得する

PHPカンファレンス2021でPHPStormがジェネリクス対応したと聞いて。
(追記)[エンティティ版はこちら](https://qiita.com/hoogee/items/545e045e01f9b9cc2526)

### 課題
通常CakePHPではテーブルオブジェクトをTableRegistry経由で取得するが、これだと型はCake\ORM\Table型としか分からない。

“`
$articles = TableRegistry::getTableLocator()->get(‘Articles’); //Cake\ORM\Table型とIDEに認識される
“`

実際にはメソッド等を定義している具体的なArticlesTable型として認識してほしい。
Lean controllerだFat modelだと綺麗にしたいのにこれではIDE補完が使えない。
かと言って毎度“`@var“`を書くのも間抜けすぎる。
世界中のCakePHPユーザーが同じことで困ってそうだがなぜか解決策が見つけられなかった。

### 解決策
ということで、ジェネリクスを使用した回避策がこ

元記事を表示

【PHP 勉強記録】制作物リストアップ

現在:組み込みソフト開発(テスト業務がメイン)
将来の夢:Web系フリーランスエンジニア

スキル:HTML少し / PHP少し / C言語

想定している道のり①
1.現在の業務を続けながら、独学でポートフォリオを作成
2.ポートフォリオを武器に
  クラウドソーシングで安価な業務を受けて副業として経験を積む
3.実績とスキル向上を実感したうえで、高価で難しい業務にもチャレンジ
4.退職し独立

想定している道のり②
1.Web開発系の企業に転職(ポートフォリオはいるかも)
2.実務の中で経験を積む + 独学で新しい知識も
3.①-2以降同様

そもそも組み込みをやってておもしろくないから
即座に辞める一択なのだろうと思いながらも
まだ一年目(半年)なので①なのかなぁと悩み中

どちらにせよ何かしら自分の作品は持っておきたいということで
ポートフォリオ作成に向けてスタートすることにした。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

〇まず、なにを作るか
Web系志望ということもあるので言語はPHPを使用しようと思う。

ずっと考えていたものは
私の趣味である

元記事を表示

PHP ぼくのかんがえたさいきょうの、NULLやブランクや配列数0の時にTRUEを返す関数、その名はisNULL

## 概要

NULLやブランクや配列数0の時にTRUEを返す関数です。テストもありまぁす。

## isNULLの仕様

### (第二引数がNULLの時、)第一引数の値と戻り値の関係

|第一引数の値|戻り値|
|–|–|
|null|TRUE|
|文字 – 空|TRUE|
|文字 – 1文字以上|false|
|数値(0も含めて)|false|
|配列 – 個数0|TRUE|
|配列 – 個数1以上|false|
|空オブジェクト|TRUE|

### 第一引数がオブジェクトで第二引数がプロパティ名の時(もしくは配列とキー名)

|プロパティが|動作|
|–|–|
|存在しない|TRUE(*__getがあれば呼び出す)|
|存在する|値をisNULL再帰呼び出しで判定|

## isNULL

“`PHP
/**
* @param mixed $val
* @param string $key
* @return bool
*/
function isNULL($val, $key = null) {

if (! isset($val)) {

元記事を表示

Laravel6でLaravel-Adminをインストール後、migrateできているのに、Laravel-Adminにログインできない

# 状況
– Laravelプロジェクトをインストール
– envファイル編集
– `php artisan migrate` 成功
– Laravel-Adminをインストール
– `php artisan serve` でサーバー起動
– `127.0.0.1:8000/admin` にアクセス後ID PASS入力
– ログインできず、なぜかenvファイルを確認してくれと表示される

環境
サーバー:Windws WSL
DB:AWS RDB(8.x)

# 解決方法
`php artisan config:cache`
でキャッシュをクリア

これだけでした。

元記事を表示

【PHP】全角半角の混合文字列を削除

“`PHP

元記事を表示

【Laravel】エラーメッセージの日本語ファイルの用意をコマンドラインで。

Laravelではエラーメッセージを簡単に表示させる機能があるのでとても便利です。

:::note alert
タイトルは必ず指定してください。
:::

↑みたいなやつです!

いつも、エラーメッセージの日本語ファイル公式ページからコピペしていたのですが、コマンドラインでやる方法を見つけたので、共有します。

## コマンドでのエラーメッセージの日本語ファイルの用意

“`bash
$ php -r “copy(‘https://readouble.com/laravel/8.x/ja/install-ja-lang-files.php’, ‘install-ja-lang.php’);”
$ php -f install-ja-lang.php
$ php -r “unlink(‘install-ja-lang.php’);”
“`
laravel6やlaravel7の場合は`8.x`の部分を変更してください。
実行後は、`resources/lang/ja/`配下にエラーメッセージの日本語ファイルが作成されています。

– auth.php
– pagination.php

元記事を表示

【PHP】$_SERVER[‘HTTP_REFERER’]リファラを使用してアクセス元によって処理を振り分ける

## $_SERVER[‘HTTP_REFERER’]とは

**$_SERVER**とはPHPのスーパーグローバル変数でサーバ情報および実行時の環境情報が入っています。

**HTTP_REFERER**は$_SERVERで取得できるインデックスのひとつで現在のページに遷移する前にユーザーエージェントが参照していたページのアドレスを取得することができます。

以下のコードでHTTP_REFERERを取得します。

“`php
$_SERVER[‘HTTP_REFERER’]
“`

ただし、リファラは確実に取得できるものではないので注意が必要です。

## アクセス元によって処理を分ける

`$_SERVER[‘HTTP_REFERER’]` を使ってチェックしたいURLによって処理を振り分けます。

“`php
// リファラーの取得(セットされていない場合はnull)
$referer = isset($_SERVER[‘HTTP_REFERER’]) ? $_SERVER[‘HTTP_REFERER’] : ‘null’;

if (preg_match(“/チェックした

元記事を表示

OTHERカテゴリの最新記事