PHP関連のことを調べてみた2023年01月19日

PHP関連のことを調べてみた2023年01月19日

PHPUnitのカバレッジバッジを作成する

# バッジを表示

https://gist.github.com/hellowork-mhlw/0a5d2e3a3121aefaf01a48b2b53c9ef3

“`markdown
![](https://coverage.deno.dev/hoge.svg)
“`

# バッジを更新
最後の数字を変更することで更新できます。`/hoge.svg`などのパスは好きなのいれてください
https://coverage.deno.dev/hoge.svg?97

# CI/CDに組み込む場合

“`bash
vendor/bin/phpunit –coverage-html reports
# for Laravel
# php artisan test –coverage-html reports

percentage=$(printf %.0f $(grep -Pom1 ‘(?<=aria-valuenow=").*?(?=")' reports/index.html)) curl https://coverage.deno.dev/hoge.svg?$percent

元記事を表示

$app->loadEnvironmentFrom(‘.env.example’);

https://github.com/laravel/framework/blob/0a18e9271c328fd86879a74487c4744cc2a6672d/src/Illuminate/Foundation/Application.php#L542

loadEnvironmentFromでenvをロードしてるわけではない。`.env`を上書きしてるだけ。`.env`とloadEnvironmentFrom()の引数の`.env`が両方ロードされることもない

“`bash
/**
* The environment file to load during bootstrapping.
*
* @var string
*/
protected $environmentFile = ‘.env’;

public function loadEnvironmentFrom($file)
{
$this->environmentFile = $file;

return $th

元記事を表示

エンジニアインターン4日目

今日はlpのテンプレート作成の続きを行った。テスト環境でデータベースから特定の情報を読み込み、その値を表示するという作業だった。そこで、データベースにもwordpressにもない値だった場合、データベースにはないが、wordpressにある場合、両方にある場合この3つの条件を設けてそれぞれに適切な値を入れる作業をした。まず、functionを作り、issetを使って値があるかを調べた。引数が多くなり、他の場所に引用することがめんどうになってしまった。そこで、先輩エンジニアからjsonを使ったら便利と言われた。jsonで配列をつくり、functionの引数にした。jsonを使えば容量も軽いし、別の場所に引用するのも簡単にできるとのことだった。自分はjsonを詳しく知らなかった。先輩エンジニアはweb開発の時はjsonをとても多く使うとのことだった。直接コードも見せていただき利便性を確かめることができた。今日隣で業務委託のエンジニアさんとのミーティングが聞こえてきた。社員のエンジニアさんは業務委託のエンジニアに難しそうなことを要求していた。レベルの高い話で、いずれかは自分もそのような話し合

元記事を表示

【PHPUnit】assertSameとassertEqualsを正しく使い分ける

## はじめに
今回の記事はassertSameとassertEqualsの使い分けについてです。何気なくassertSameを使用していて、意図しないエラーに遭遇したので、忘れないよう記事にします

## 状況と発生したエラー内容
今回のエラーは下記テストを実行した際に出力されました。ユーザーリポジトリのfindById(ユーザーIDを指定すると対象のユーザーを取得できるメソッド)のテストです。存在するユーザーIDを渡すとユーザーを1件取得できることを確認しています

また、`assertUser`メソッドでは、オブジェクトの属性値が期待するオブジェクトと、実際のオブジェクトで等しいかどうかを評価しています
“`php
public function test_存在するユーザーIDを渡すとユーザーを1件取得できること(): void
{
// given
$expectedUser = $this->user;

// when
$actualUser = $this->userRepository->

元記事を表示

プロキシ環境下でAWS SDK for PHPを利用してファイルのアップロード・ダウンロードを行いたい

クライアント作成時に `’http’ => [‘proxy’ => ‘http://192.168.16.1:10’]` を追加することで、プロキシ環境下でAWS SDK for PHPを利用したS3へのアクセスが可能となります。

“`php
require ‘vendor/autoload.php’;

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

$s3 = new \Aws\S3\S3Client([
‘resion’ => ‘ap-northeast-1’,
‘version’ => ‘latest’,
‘profile’ => ‘default’,
‘http’ => [‘proxy’ => ‘http://192.168.16.1:10’]
]);

“`

# 参考

↓の `proxy` を参照

https://docs.aws.amazon.com/ja_jp/sdk-for-php/v3/developer-guide/getting-started_basic-

元記事を表示

PHPの配列に関して簡単にまとめる

## PHPの配列とは
– 配列とは、変数に背番号のようなものを付けて拡張し、複数のデータを扱えるようにしたもの
– 配列はデータを「キー/値」のペアにしている
– 「キー/値」のペアになっているデータを配列の要素と言う
– 配列には順序があり要素が追加された順に並んでいる
– 配列にはすべてのデータ型の値を格納することが出来る

### 配列の基本的な書き方
基本形(リテラル)では1つの変数を定義して、その変数に対して値を代入する。
PHPの配列(Array)の場合は、わかりやすく言うとこの変数の値が複数格納できるものになる。

“`
$fruits = array(‘apple’, ‘orange’, ‘grape’);
“`
もしくは下記のような書き方もできる。
最近だとこちらの方が一般的か。
“`
$fruits = [‘apple’, ‘orange’, ‘grape’];
“`

### 配列の出力
出力する際は以下のように記述をします。
“`
$fruits = [‘apple’, ‘orange’, ‘grape’];

// var_dump の場合
var

元記事を表示

AWS SDK for PHPでS3からgzipファイルをそのまま(展開されることなく)取得したい

# はじめに

PHPでaws-sdkを使用してS3からファイルをダウンロードする際に、gzipファイルが展開された状態で出力される場合があります。
特に、gzipのままファイルが欲しい場合に困ってしまいます。

# 対応
クライアント作成時に `’http’ => [‘decode_content’ => false]` を追加することで、gzipファイルが展開されずに(gzipファイルのまま)取得することができます。

“`php
require ‘vendor/autoload.php’;

use Aws\S3\S3Client;
use Aws\Exception\AwsException;

$s3 = new \Aws\S3\S3Client([
‘resion’ => ‘ap-northeast-1’,
‘version’ => ‘latest’,
‘profile’ => ‘default’,
‘http’ => [‘decode_content’ => false]
]);

“`

# 参考

↓の `decode_conte

元記事を表示

PHPでつぶやきアプリの作成

PHPで作成した「つぶやきアプリ」の紹介記事となります。

前回の「簡単な計算機アプリ」に比べ自分の中では難易度が爆上がりしました。というのも前回はHTML/PHPだけを使った簡単な実装でしたが、今回はHTML/CSS/PHPを用いてより機能的により実際のアプリを模倣したアプリになっています。

前回作成したアプリ

https://qiita.com/hiroo1120/private/094699597c7b21d7aae6

そして何よりDBの活用によるプログラムの幅の広がりや、セキュリティを意識したコードという点において未熟ながらも大変勉強になりました。

私自身、知

元記事を表示

PHPで電卓アプリの作成

PHPの勉強のためにPHPとHTMLで簡単な電卓アプリを作成してみました。
色々と不備があるかもしれませんがそこは何卒ご容赦ください。

目次

[1. アプリの作成](#アプリの作成)
・ [作成したアプリ](#作成したアプリ)
・ [完成イメージ](#完成イメージ)
・[画面側のコード](#画面側のコード)
・[画面側コード説明](#画面側コード説明)
 - [ディスプレイ表示](#ディスプレイ表示)
 - [hidden](#hidden)
 - [table](#table)
・ [処理プログラムのコード](#処理プログラムのコード)
・[処理プログラムの説明](#処理プログラムの説明)
 - [変数の定義](#変数の定義)
 - [関数の定義](#関数の定義)
 - [数字ボタンが押された時](#数字ボタンが押された時)
 - [四則演算以外の記号が押された時](#四則演算以外の記号が押された時)
 - [数字ボタンを押下後に記号ボタンかイコールを押下](#数字ボタンを押下後に記号ボタンかイコールを押下)

元記事を表示

Apacheを再起動したのにphp.iniの設定が反映されない

以前にも詰まったと思うけどまたやったので備忘。

“`php.ini“`の設定を変えたので反映させようと
“`
$ sudo systemctl restart httpd
“`
をやったのに“`phpinfo();“`で見たときに設定変更が反映されてない。
[以前](https://qiita.com/Kokusui/items/42ee26d7e8ad1a114b12)確認した際に、PHPがモジュール版でなくFPM/CGIで動いてたというのを思い出し、
“`
$ sudo systemctl restart php-fpm
“`
これで無事設定変更できた。ところでいつもやらかすのだが、
✕ “`sudo systemctrl restart httpd“`
◯ “`sudo systemctl restart httpd“`
「コマンドが見つかりません」と言われて気づくというね…。

元記事を表示

営業マンから人事に転身して思ったこと

初めまして!

開発会社で働く、ひよっこの人事です。

ひよっこっていうのは
社会人経験の中で、人事職に就くのは未だ半年経っていないためです笑

これから色々勉強のためにQiitaで
多くのエンジニアやプロジェクトに関わる人と繋がれたら良いなあと思い、ブログ初めてみました。

技術的なことは恥ずかしながら、ここに居る方よりも未熟なため
個人的にIT業界きて6ヶ月感じたことや思ったことをここに綴りながら、
客観的な会社の雰囲気を伝えていけたら良いなと考えております:writing_hand::relieved::dizzy:

それでは、ぜひこの記事が多くの方の目に留まってもらえるよう、書いていきたいと思います〜:fist:
宜しくお願いいたします。

元記事を表示

WordPressの更新で「ファイルをコピーできませんでした。」エラーが出る原因

# 発端
WordPressの更新で「ファイルをコピーできませんでした。」というエラーが出たので、オーナーかパーミッションだろうと高をくくって色々していたんですが一向にエラーが消えなくて小一時間ハマった話です。
![wp_error_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/93880/9e61371e-2723-afaf-41f9-532e68b87bf6.png)
# 環境
CentOS7 + PHP7.4 + nginx + php-fpm
# 原因
何回もオーナーやパーミッションを変更してちょっと疲れ始めたときに、そもそもここで動いているPHPってちゃんとnginxオーナーで動いてるのか?と疑問を持ちました。

nginxのオーナー
“`/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
“`

大丈夫ですね。

で、今回はPHPはPHP-FPMが動いているのでphp-fpmの方も見ます。

“`/etc/php-

元記事を表示

PHPバージョンアップについての覚書

PHPをXAMAPP上でバージョンアップするには
結局のところXAMPPをバージョンアップしないといけない

1) XAMPPサイトでダウンロード(Windows・Mac・Linuxの3バージョン)

https://www.apachefriends.org/jp/index.html

2)削除前にphp.iniの設定は保存しておく。(ほかのファイル名で)

3)元のXAMPPのフォルダで「uninstall…exe」というのがあるのでそれを実行するか
なければ、XAMPPから始まるファイルごと削除 (必要ならバックアップをしてください)

4)ダウンロードしたものを解凍して実行、ドライブ直下におく WindowsはCでもDでもOK

5) 終わったら、php.iniの設定を元のファイルの設定に戻す

6)私の環境の場合、COM関数が必要だったので、ないとエラーを起こす
 (Fatal error: Class COM not found in ~)
 =>詳しくはこちらを確認してください(ありがとうございます!)

https://b.0218.jp/20130110131

元記事を表示

JANコードのチェックデジットを計算する

JANコードのチェックデジットを計算する

protected function calculateCheckDigit($code)
{
// JANコードの前12桁を取得
$checkCode = substr($code, 0, 12);
$sum = 0;
for ($i = 0; $i < strlen($checkCode); $i++) { // 奇数桁は1、偶数桁は3をかけて足す $sum += (($i+1) % 2 == 0 ? 3 : 1) * $checkCode[$i]; } // 総和の下1桁の数字を10から引く、10なら1の位は0なので、下1桁をチェックデジットとする $CheckDigit = (10 - $sum % 10) % 10; // チェックデジットが一致しない if ((int)$CheckDigit != (int)sub

元記事を表示

ブラウザのリロードによるフォームデータの二重登録を抑止する

フォームで送られたPOSTデータをデータベースに登録するページを作っていて遭遇した、ちょっとした問題。

> php経由でデータベースに登録後、完了ページを表示したところで、意図した表示にならないためソースを見ようとした
>  ↓
> 「フォーム再送信の確認」と出て再送信するまでソースが見られない
>  ↓
> 再読み込みする
>  ↓
> 先ほどのPOSTデータがデータベースに二重登録されてしまった

という次第。
実際、ユーザー側でリロードしてしまうこともあるわけで、これを抑止する方法を模索した。
ざっと検索するとJavaScriptでやる方法はあるようだが、スクリプトが面倒だし(自分が得意じゃないというのもある)、何より

> ユーザーの行動をシステム側で制限すべきではない

とか書いてあったりするので、物理的にリロード禁止するのはよろしくないようだ。
となれば、リロードしてもデータが登録されないようにすればよいわけで、[こんなページ](https://www.system-ido.com/risouken/index.php?page=tech&num=6)を参考にしてみたとい

元記事を表示

phpMyAdminが文字化けした –20年(?)ぶりにLinuxをいじってみる06

全8回の6 → [1](https://qiita.com/Kokusui/items/ba1aa8fa736dc2321e24)|[2](https://qiita.com/Kokusui/items/7ac23b2314898fef6181)|[3](https://qiita.com/Kokusui/items/757277b4e1fb28a3e476)|[4](https://qiita.com/Kokusui/items/9c0d50e3b782b1410a4c)|[5](https://qiita.com/Kokusui/items/42ee26d7e8ad1a114b12)|6|[7](https://qiita.com/Kokusui/items/b6bfb6da52fdf16241a6)|[8](https://qiita.com/Kokusui/items/60fdbdf42fed2045e4f4)

Mysqlに日本語データを登録するphpを書いて実行したら、phpMyAdmin上で文字化けを起こしていたという話。
登録データをphpで引っ張り出してみたところ、ブ

元記事を表示

今度の壁はphpMyAdminのログインだった –20年(?)ぶりにLinuxをいじってみる05

全8回の5 → [1](https://qiita.com/Kokusui/items/ba1aa8fa736dc2321e24)|[2](https://qiita.com/Kokusui/items/7ac23b2314898fef6181)|[3](https://qiita.com/Kokusui/items/757277b4e1fb28a3e476)|[4](https://qiita.com/Kokusui/items/9c0d50e3b782b1410a4c)|5|[6](https://qiita.com/Kokusui/items/701594d849fb7524f4ba)|[7](https://qiita.com/Kokusui/items/b6bfb6da52fdf16241a6)|[8](https://qiita.com/Kokusui/items/60fdbdf42fed2045e4f4)

やっとPHPインストールまで辿り着いた。
“`
$ sudo dnf -y install php
“`
からの
“`
$ php -v
PHP 8.0.20

元記事を表示

Symfony 入力フォームとボタンを縦並びでなくて横並びにしたい

タイトル通りです。
form_widgetで一行で書くと縦に並びます。

#### before

“`XxxxxxxController.php
$form = $this->createFormBuilder()
->add(‘input’, NumberType::class)
->add(‘search’, SubmitType::class, [‘label’ => ‘検索する’])
->getForm();
“`

“`index.html.twig

{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}

“`

分けて書いたら横並びになりました。
#### after
“`index.html.twig

{{ form_start(form) }}
{{ form_widget(form.

元記事を表示

Symfony FormBuilderでlabelを消したい

Symfony初心者です。
twigを使っていますが、通常、twig上でphpの関数が使えず、viewでロジックを書かせないという強い意図を感じます。

さて、FormBuilderでlabelを消そうとして、調べても情報が見つかりませんでした。
古い情報も多いですね。

ソースの中を見てもわからなかったのですが、試行錯誤した結果、labelをfalseにするとラベルを消すことができました。

これに限らず、symfonyでよいドキュメントがあったらコメント欄で教えてください。
公式に載ってないこともあり、調べるのに時間がかかってしまいますね。

#### 前提
Symfony 5.4

“`XxxxxxxxController.php
#[Route(‘/xxxxx’, name: ‘xxxxx’)]
public function index(Request $request): Response
{
$form = $this->createFormBuilder()
->add(‘input’, NumberT

元記事を表示

【Laravel 9】複数のMiddlewareと実行の優先度を指定する

## ミドルウェアとは..?
リクエスト処理の前後に実行したい処理を定義できる機能!

## ミドルウェアの作成
artisanコマンドで作成できる。

“`php
php artisan make:middleware Hoge
“`

## 処理を書く

“`php

元記事を表示

OTHERカテゴリの最新記事