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

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

NextcloudのPHPバージョン変更警告

## Nextcloud 25.0.2

:::note alert
PHPバージョンを7.4系から8.2系に引き上げないでください
:::

Nextcloud 25.0.2では、セキュリティ&セットアップ警告にPHPバージョンを7.4からアップデートを推奨する旨のメッセージが表示されています。
![Screenshot 2022-12-16 105746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/532025/d15e6389-0899-d2b2-5a0c-97f26ee4a5ac.png)

しかし、これは誤記であり現状Nextcloud 25はPHP7.4系以上に対応していません。
Nextcloud 26からPHP8.2系に対応する予定になっています。

すでにアップデートし、PHPのバージョンが違う旨のメッセージが表示されている場合は設定ファイルをバックアップしてPHPパッケージを再インストールしてください。

:::note info
参考リンク
https://help.nextcl

元記事を表示

Google Mapをクリックした地点の人口データの属性を持つ町丁目ポリゴンを取得し、表示する

## 概要説明
今回は、Google Mapをクリックしたときにサーバーと連携し、クリックした地点の人口データの属性を持つ町丁目ポリゴンを取得して表示させてみました。また、表示させた町丁目ポリゴンの削除についてもご紹介します。
この記事は[Maps JavaScript APIを使ってGoogle Mapに町丁目ポリゴンを表示してみる](https://qiita.com/yan_x/items/c069c8fb7c5d2648fe50)を拡張した内容になります。

## 使用したもの
– Google Map
– Maps JavaScript API

https://developers.google.com/maps/documentation/javascript?hl=ja
– JavaScript
– PHP
– 町丁目ポリゴン、令和2年国勢調査(2020年国勢調査)/人口総数
今回使用した町丁目ポリゴンおよび人口総数データは、TerraMap API からレスポンスされたものです。

https://www.mapmarketing.co.jp/terramap-api

元記事を表示

配列の要素の重複値を取り除く(PHP)

PHPで配列の要素の重複値を取り除く処理です
PHPのarray_unique関数を使います

“`PHP
“; print_r($array2); echo “

“;
?>
“`

以上の方法を使うとよいでしょう。
preタグは配列の出力結果を見やすくするために使用します。

元記事を表示

PHP Laravel データがViewに含まれているかテストする

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の16日目の記事です
:::

# 概要

– Viewに指定したキーと値が含まれることをテストする方法をまとめる

# 方法

– レスポンスに対してassertViewHasを使ってチェックする。

“`php
$response->assertViewHas(キー名, 値);
“`

– 例えばキー名がidで値が10の情報がViewに含まれていることをチェックしたい場合下記の様に記載する。

“`php
$response->assertViewHas(‘id’, 10);
“`

元記事を表示

RecursiveRegexIteratorでファイル名を前方一致で絞り込む

はじめまして、ZYYX新卒入社1年目のエンジニアです。
今回はPHPの`RecursiveRegexIterator`でファイル名を前方一致検索した時に、躓いた点を共有したいと思います。

# 検証環境
– macOS Ventura 13.0.1
– PHP 8.1.6
– Xdebug 3.1.6
– Visual Studio Code 1.74.0

“`Shell:環境情報
$ sw_vers
ProductName: macOS
ProductVersion: 13.0.1
BuildVersion: 22A400

$ php -v
PHP 8.1.6 (cli) (built: May 16 2022 02:55:18) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.6, Copyright (c) Zend Technologies
with Xdebug v3.1.6, Copyright (c) 2002-2022, by D

元記事を表示

結果を一定期間保持する、”Cache”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の16日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、S

元記事を表示

名前空間をさっくり理解する

名前、つけてますか?

PHPには**namespace**(名前空間)という言語機能があります。

原初のPHPにはなかったのですが、PHP 5.3くらいからあるので、まあ平安時代には成立していたということです。それ以前の時代は `App_Http_Controllers_User` のような `_` 区切りの擬似名前空間が用いられていたことがありました。現在では `App\Http\Controllers\User` のような `\` 区切りの名前空間が利用できます。

## 名前空間付きのコード

名前空間が見慣れないという方のために`namespace`のあるコードとしてLaravelで自動生成したControllerファイルの例を先に出しておきます。

“`php

元記事を表示

DoctrineとEloquent比較大全16: 数式を使ったupdate

day16の今日は数式を使ったupdateのやり方を見ていきます。

## Doctrine

“`php
getRepository(Book::class)->createQueryBuilder(‘b’);
$qb->update()->set(‘b.price’, ‘b.price * 1.1’)->getQuery()->execute();
“`

元記事を表示

ターミナルコマンド整理

# 必要そうなコマンドを整理する
1. 基本コマンド
2. パーミッション変更関連
3. viエディタ関連
4. mySQL関連
5. PHP関連
6. cakePHP関連

## 1. 基本コマンド

?カレントディレクトリ内のファイルやディレクトリを表示
“`console:console
$ ls
“`

?隠しファイルを含めてファイルやディレクトリを表示
“`console:console
$ ls -a
“`

?隠しファイルを含む全てのファイルやディレクトリの詳細を表示
“`console:console
$ ls −la
“`

?★★ディレクトリに移動
“`console:console
$ cd ★★
“`

?ホームディレクトリに移動
“`console:console
$ cd ~/
“`

?一つ上の階層のディ

ownCloudのインストールと設定

ownCloudのインストールに苦労したので記しておきます。
だれかの役に立てば幸いです。

環境
>〜自宅サーバー(ProxmoxVE)〜
メモリ:5G
CPU:仮想1Core
ストレージ:HDD 1024GB
OS:Ubuntu

# 準備
はじめに必要なものをインストールしていきます。

+ Apache
+ php
+ MariaDB

が必要になります。
### Apache2をインストールします。
“`bash:Apacheをインストール
sudo apt install apache2
“`
### phpをインストールします。
phpをインストールするのですが、少し古いバージョンを入れるために、外部リポジトリを使用するため、
リポジトリ管理に必要な software-properties-common をインストールします。
“`bash:software-properties-commonをインストール
sudo apt install software-properties-common
“`
ppa:ondrej/php リポジトリを apt に登録します

変数を美しく書いてみよう!

# はじめに
前回リーダブルコードを読んで[コメントを美しく書いてみよう!](https://qiita.com/ryuji_i3/items/857435ebe0211e93d6af) を記載しました。
今回は本の内容から、変数の書き方に焦点を当てて記載していきます!
**参考文献:リーダブルコード**

これまでの経験と本の内容を合わせて、それっぽいコードをサンプルに記載してまとめていきます!

## 不要な変数は削除する
不要な変数はなるべく削除したほうがいいとのことです。
理由としては以下の二点があげられます。
– 変数が多いと変数を追跡するのが難しくなる
– 変数が頻繁に変更されると現在の値を把握するのが難しくなる

“`
        // 住所を取得
        $address = $getAddressData(zipcode);
        if ($address) {
            ・・・・
        }
“`
この例では、関数内にaddressは一度しか使われていないことを前提とします。

if文の中身は住所があるかないかを

GitHub Actionsで実行しているPHPUnitでOpenSSL関連のエラーが突然出るようになったときの対応

# 発生したこと
突然CIでOpenSSL関連のエラーが出るようになった。
以前CIをとおったコードをReRunしてもエラーがでてしまう。
また、同じコードをローカルでテストすると正常終了する。

# 切り分け
– ローカルとCIでPHPのVerは一緒
– エラーはOpenSSL関連の箇所で発生

という状況だったのでOpenSSLのVerを確認
“`
# ローカル
$ php –ri openssl | grep Version
OpenSSL Library Version => OpenSSL 1.1.1s 1 Nov 2022
OpenSSL Header Version => OpenSSL 1.1.1s 1 Nov 2022

# CI
$ php –ri openssl | grep Version
OpenSSL Library Version => OpenSSL 3.0.2 15 Mar 2022
OpenSSL Header Version => OpenSSL 3.0.2 15 Mar 2022
“`

# 対策
[ubuntu-22.04 が GA

MySQLサーバーへの接続(PHP編)①

MySQLi(MySQL improved extension)インターフェースを利用したMySQLサーバーへの接続サンプルプログラムを作成しました。

“`HTML






TEST PHP Program


DBの接続に成功しました

“;
} catch (Exception $e){

ファーストセッションのデータをDBに格納する

アプリケーション内部で流入元をベースにした分析を行ったのでメモ書き。

## 現状
– GAを使ってユーザーデータを収集している
– 登録画面へ複数流入元があり、それぞれのURLパラメータにユニークな文字列を使用している(URLで流入元が可能)
– 流入元に関するデータをDBに保持しておらず、登録画面以降のトラッキングができていない

## 課題
– 流入元の評価や、アプリケーション内部でのフェーズ管理のために、内部のトラッキングを可能とする必要がある。
– 複数流入経路を保有しているユーザーに対しては、ファーストコンタクト時の媒体を評価する必要がある。

## 対応策
– URLパラメータをDBに登録する
– 初回アクセス時のURLパラメータをDBに登録する
– セッションが切れたら、次回セッションの初回コンタクトのURLを利用する

## 実装

コード例は以下の通り。
※特定URL以下にMiddlewareを噛ませています。(今後の要件次第ではチューニングが必要だが、現時点では不要と判断)

“`UtmMiddleware.php
public functio

php オブジェクトで使われる用語

①クラス
“`php
class Post
{
private $text //プロパティ

public funtction show() //メソッド
{
printf($this->text);
}
}

$posts = new Post(‘hello’); //インスタンス
“`

・クラスの中で宣言した変数「プロパティ」
・クラスの中で定義した関数「メソッド」
・クラスからnewして作った値「インスタンス」

クラス内で変数にアクセスするには $this->変数名 とする

②コンストラクタ
“`php
class Post
{
private $text //プロパティ

public function __construct($text) //コンストラクタ
{
$this->text = $text;
}
public funtction show() //メソッド
{
printf($this->text);
}
}

$posts = new Post(‘hello’); //インスタンス
“`

・コンストラ

郵便番号データのつくりかた(PHP版)

[OPENLOGI AdventCalendar](https://qiita.com/advent-calendar/2022/openlogi) 15日目担当の細川です。

だいぶ前に[同一タイトルの記事](https://qiita.com/yhosok/items/bb7fa9ff0254d20ad279)を書きましたが、様々ありましてPHP版を作る必要に迫られました。

ということで前回Haskellで実装したものをこの機会にPHPに翻訳しました。ただ、今回は作成データが使い物になるよう精度を上げる必要がありまして、以下に述べますように色々と工夫というか、ゴリ押しで頑張ってみました。ツッコミどころが色々ありますのでご意見いただけると嬉しいです。(正しい住所データが即座にダウンロードできる時代が来ますように)

作成したソースは[こちら](https://github.com/yhosok/laravel-ken-all)にあります。諸事情でlaravel上に実装してますが、書いてるソースは主に下記のファイルになります。
– [app/Models/Postcode.php](

データをチェック、”Validator”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の15日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、S

DoctrineとEloquent比較大全15: バッチ削除

day15の今日は複数データ(大量データ)をまとめて削除する方法を見ていきます。

## Doctrine

“`php
getRepository(Book::class)->findAll() as $book) {
$entityManager->remove($book);
}
$ent

DoctrineとEloquent比較大全14: バッチ更新

day14の今日は、複数のデータを一気に更新するバッチ更新のやり方を見ていきます。

## Doctrine

“`php
setTitle(sprintf(‘title%d’, $i));
$book->set

【artisan】shell_exec実行時のユーザーCPU時間【Laravel】timeコマンドのuser

shell_execでも同様の結果となる

“`bash
composer create-project laravel/laravel example-app
cd example-app

./artisan make:command shell_exec
./artisan command:name

wget https://gist.githubusercontent.com/hellowork-mhlw/03344d342fffa767e6a6ffd7b89a93ed/raw/cnt.c
gcc cnt.c

# 下記からコードをコピペ
# https://qiita.com/foluyucic/items/158f1759a372fed6a1ff

$ time ./artisan command:name sleep 3

real 0m3.114s
user 0m0.086s
sys 0m0.030s

$ time ./artisan command:name ./a.out
500000000500000000

real 0m1.