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

PHP関連のことを調べてみた2023年03月07日
目次

LINEとChatGPTでAI彼女のプロトタイプを作ってみた感想や課題

# AI彼女ねおんプロトタイプがこちら

![dot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241882/fecf09ae-ea9c-4526-cc70-95faa54363f7.png)

https://lin.ee/fLwRzgm

![S_gainfriends_2dbarcodes_GW.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3241882/1c093533-8c1e-dc0f-e801-6770b83a4343.png)

# LINEでAI彼女を作った背景や目的
多くの日本人が意外と本家のchatgpt に辿り着いてないこと(うちの父は完全別のアプリで危うく月数千円の課金しかけてましたw)と、使いやすさや浸透具合が高くおすすめしやすいので、LINEで作ることにしました。

# AI彼女ねおんの機能や特徴
## ①あえて回答を遅く
好みだと思うのですが回答が早すぎると、やはりBOTくさ

元記事を表示

【PHP8.3】array_sumにGMPを突っ込めるようになる

[GMP](https://www.php.net/manual/ja/ref.gmp.php)インスタンスは演算子オーバーロードされているため、普通の数値と混ぜて計算が可能です。

“`php
echo gmp_init(“123”) + 456; // 579

echo array_sum([gmp_init(“123”), 456]); // 456 ← ???
“`

なぜか[array_sum](https://www.php.net/manual/ja/function.array-sum.php)や[array_product](https://www.php.net/manual/ja/function.array-product.php)ではGMPが正しく計算されてくれません。
実はこれらの関数、算術演算子に処理を渡しているわけではなく独自の演算を行っています。
そのせいで異なる計算結果となり、これではわかりにくくて困ってしまいますね。

ということで、`array_sum|product`の計算方法を算術演算子と同じにしようというRFCが提出されました。
以下

元記事を表示

社内サイト構築勉強⑤(さくらのレンタルサーバ+Laravel):新規画面の作成

# 前提・概要
プロジェクトは前回記事にて作成したものを想定。

# 本日の完成形
カスタマイズした画面を表示できるようにする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/7f6c8beb-6f3d-0422-8119-2c3472cda60e.png)

## 1.新規画面の作成
新規画面を作成する。ディレクトリ構成は下記を想定。
(名称の想定としては、受注した案件データを表示できる画面を想定。)
“`bat:
app
 └ Http
   └ Controllers
      └ OrderController.php ・・・3
resources
 └ views
  ├ welcome.blade.php (topページ)・・・1
  └ daily
    └ order
       └ index.blade.php・・・4
routes
 └ web.php ・・・2
“`

### ①topページからのhref設定
topページから新規ページへ

元記事を表示

社内サイト構築勉強④(さくらのレンタルサーバ+Laravel):トップページのカスタマイズ

# 前提・概要
プロジェクトは前回記事にて作成したものを想定。

# 本日の完成形
1.ログアウト機能の実装
2.メニューのカスタマイズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/ed645c18-da8e-165d-c5cf-147f86577c69.png)

## 1.トップページの差し替え
先日作成したテンプレートをトップ画面にするように変更。
ログインしていない際、ログインが必要にする。

### ①トップページの変更(welcome.blade.php)
resources -> views -> top.blade.php の内容を
resources -> views -> welcome.blade.php にコピーする。

### ②ルーティングの設定(web.php)
web.phpにてアクセスされた際の挙動を制御している。
デフォルトではviewをそのままリターンしているが、ログインしている状態であることを確認する。

“`php:web.p

元記事を表示

PHPにおけるオブジェクトとコンストラクタについて復習する

## はじめに
PHPを学習していくと、オブジェクトだったりコンストラクタについてよく出てくる。
laravelを学習し始めてあまり聞かなくなったのだが、最近laravelでもコンストラクタだったりを使うようになったので復習がてら何なのかまとめてみる。

## オブジェクトとは
PHPのオブジェクトは、クラスを定義してから、そのクラスを基にしてインスタンスを生成することで作成される。
オブジェクトを生成するためには、`new演算子`を使用する。

“`test.php
class Person {
// プロパティの定義
public $name;
public $age;

// メソッドの定義
public function sayHello() {
echo “Hello, my name is ” . $this->name . ” and I am ” . $this->age . ” years old.”;
}
}

// Personオブジェクトの生成
$person1 = new Person();

// プロパティへのアクセス

元記事を表示

dockerで立ち上げたlaravelのコードが即時反映されずハマったのでメモ

# はじめに
途中参加したlaravelプロジェクトにDockerfileはあったものの、ローカル開発環境の構築手順やdocker-composeファイルがなく手探りで構築した際にハマったのでメモ

# 用意されていたもの
・GitHubとソースコード
・Dockerfile

# 問題発生

docker-compose.yamlだけ書けばいけるっしょ!そう思っていました。
無事コンテナを立ち上げたまでは良かったがコードを変更しても反映されない、、
なぜだ。。
docker-compose.yamlでアプリのvolumeとか書き忘れたのか確認するも問題なし
なんなら`$ docker-compose down`してもう一度立ち上げたら反映されてるー
どっかキャッシュしてるんかな
あったー。ここだ、やられた。共有されたDockerfileローカル用に用意されたものじゃなかった。

# 結論
~~~php.ini
[opcache]
# ここが原因 ここを0にしてcache無効にする
opcache.enable=1
~~~

`docker-compose build –no-cac

元記事を表示

【Laravel】複雑な条件をWhereで検索する。

## 単純なケース

Tシャツを管理するためのtshirtsテーブルの中にpriceとcolorというカラムがあったとします。

「priceが2000円以下でcolorがblueのTシャツ」を探したいのであれば
以下のように単純にwhereを繋げるだけで問題ありません。

“`php
$tshirts = Tshirt::where(‘price’, ‘<=', 2000)->where(‘color’, ‘=’, ‘blue’)->get();
“`
## 少し複雑なケース

もう少し複雑なケース、例えば「priceが1000円以下のTシャツ、もしくはpriceが2000円以下でcolorがblueのTシャツ」を探したいという場合は、以下のようにクロージャ(無名関数)を使用して検索することができます。

“`php
$tshirts = Tshirt::where(‘price’, ‘<=', 1000) ->orWhere(function ($q) {
$q->where(‘color’, ‘bl

元記事を表示

php.iniの設定を一時的に変更する

## ini_set関数でphp.iniの設定が一時的に変更できる。

例えば、特定の処理の間だけphp.iniのmemory_limitを上げたい、といった場合、以下のようにして一時的に変更ができる。
処理が終わるとこの変更は破棄されて元の値に戻る。
“`
ini_set(‘memory_limit’, ‘1024M’);
“`

## ini_set関数では変更できない項目もある

全ての項目がini_set関数で変更できるわけではない。

わかりやすい参考記事様:

https://qiita.com/nagahama/items/7ab9dab0085faa480315

php公式:

https://www.php.net/manual/ja/configuration.changes.modes.php

https://www.php.net/manual/ja/ini.list.php

元記事を表示

タイトル LaravelでIntervention Imageを導入する方法 (Laravel9対応)

※2分で読めます

## Intervention Imageとは?

[Intervention Image](https://image.intervention.io/)は、オープンソースのPHP画像操作ライブラリで、画像を操作する簡単な方法を提供します。Laravelでの画像処理には欠かせないライブラリです。Composerパッケージを利用することで、サイズ変更や指定したファイルへのデータ保存などを行うことができます。

## Laravel9でIntervention Imageを導入する方法

以下の手順に従って、Laravel9にIntervention Imageを導入してください。

#### 1. ComposerでIntervention Imageをインストール
ターミナルを起動して、プロジェクトのルートディレクトリに移動し、
以下のコマンドを実行します。

“`php: Terminal
composer require intervention/image
“`
#### 2. ServiceProviderの登録
app.phpファイルにて、Int

元記事を表示

【Codeigniter4】.envファイルを環境ごとに読み分けできるようにする

# Codeigniter4のDotEnvは使いにくい

Codeigniter4はDotEnvに対応しているが、LaravelやViteなどのように環境による読み分けができない。
簡単に言えば、以下のような構成が利用できない。

“`shell
/
├── app
├── .env # 共通の環境変数(これだけが適用される)
├── .env.dev # 開発環境用
├── .env.stg # ステージング環境用
└── .env.prod # 本番環境用
“`

デフォルトのまま利用しようとすると、`.env`のみが読み込まれてしまう。

## 複数の.envを読み込むことは(一応)できるが・・・

`public/index.php` の記述を読むと、ここでenvファイルをロードしていることが分かる。
※sparkにも同様に記述がある

“` public/index.php
// Load environment settings from .env files into $_SERVER and $_ENV
re

元記事を表示

さくらサーバでPHPを実行するときに500 ERRORが発生した時の対処法

# 状況
・手元のPC(MacBook)では正しく動作しているPHPをさくらサーバにUPすると
>500 Internal Server Error
とエラーを吐く。

・サーバコントロールパネル>サーバーステータス>アクセスログ>本日のエラーログを見ても
>AH01215: suexec policy violation: see suexec log for more details

と書いてあるだけで何の事かわからない。

・さくらサーバのよくある質問https://help.sakura.ad.jp/rs/2257/
を読んでも結局何をしたら良いのかわからない。

# 解決法

・「実行」権限を付与していなかった。
(PHPは読み取り権限だけでは機能しないのは当たり前だ。)

ファイルマネージャ>PHPファイルを右クリック>プロパティ>所有者、グループ、全ユーザに「実行」権限をチェックする。(数値で755となれば良い。)

再びアクセスしてみて実行できるか確認する。

元記事を表示

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

# はじめに
エンジニア同士で交流することができるマッチングサービスをリリースしました。

![全体の流れ (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/434f90f4-e182-3a3b-0184-c4de0fd99e95.gif)

# URL
https://www.paircode.net/

# 目的
私は都内でSEとして働いているのですが、職場以外でエンジニアの方と接する機会がほぼないことに気づきました。

そのため業務外で個人開発を行うときに相談できる相手がいないことに悩んでいました。

また、`地元の友達`や`前職の転職した同僚`でエンジニアをやっている人の`働き方`や`環境`を聞くと、良し悪しは抜きにして同業種なのに自分の仕事とはずいぶん違いました。

開発者として同業種の人の話を聞いたり、つながりを持っていることは成長につながるとともに知見を広げられると感じ本サービスを開発しました。

# サービス概要
###

元記事を表示

strtotime関数の罠

# strtotime関数はどんな引数でも頑張って変換しようとする

>[strtotime — 英文形式の日付を Unix タイムスタンプに変換する]
https://www.php.net/manual/ja/function.strtotime.php

注文データをCSVファイルで読み込んで、データベースに取り込むといった処理の流れで、注文日時が全く違う日時で取り込まれているといった不具合が報告された。
内容を確認すると以下のプログラムに不具合があることがわかった。
“`PHP

// $input_order_date_time = CSVから取り込んだ日時
$order_date_time = date(‘Y-m-d H:i:s’, strtotime($input_order_date_time));

“`

strtotime関数はPHPらしい関数でどんな引数が指定されようと頑張って何とか変換しようとする、とてもありがた迷惑な関数である。
せめて変換に失敗したらfalseを返してほしい・・・

以下にstrtotime関数がどんな値を吐き出すかテストをしてみた。

元記事を表示

社内サイト構築勉強③(さくらのレンタルサーバ+Laravel):Bootstrapテンプレート利用

# 前提・概要

プロジェクトは前回記事にて作成したものを想定。

# 本日の完成形
テンプレート画面が表示される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/eff41c80-82bd-78b5-dab1-baf443cc521f.png)

## 1.テンプレート適用
こちらの内容を参考にさせていただきました。

https://biz.addisteria.com/laravel_extends/

ただし手順は結構変えてしまっているので、こちらでも記載します。

### ①LaravelにBootstrapをインストール
前回手順でインストールしてしまいましたが、コマンド下記です。
“`bat:cmd
php artisan ui bootstrap –auth
“`

### ②Bootstrapのテンプレートをダウンロード
SB Admin 2 を入れてみました。
下記からfree downloadにてダウンロードしました。

https://sta

元記事を表示

社内サイト構築勉強②(さくらのレンタルサーバ+Laravel):ログイン機能実装

# 前提・概要

プロジェクトの作成は前回記事(https://qiita.com/tk49/items/f85708ed567853143c29 )にて作成したものを想定。
(※プロジェクト作成直後で変更していない状態)

# 本日の完成形
【Register】画面
登録できることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/b5f40846-18d1-2653-6254-8b0d0d78473f.png)

【Login】画面
ログインできることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/284198/36a5d645-25b6-73f6-af5b-016a48d37d68.png)

ログインするとトップページの右上がHomeになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

laravelでのページネーション実装とカスタマイズ

Laravelで検索結果の一覧表示画面にページネーションを実装する方法と、デザインをカスタマイズする方法の個人的な備忘録。

## 環境
PHP 8.1
Laravel 9

## ページネーションの実装
まずはModelからデータを取得してViewにページネーションを表示するまで。

#### データ取得
今回はトピックの一覧を表示する画面を作成したので、Topicsモデルからデータを取得する。
1ページあたりの表示件数は10件とした。

“`php
public function getTopics(): LengthAwarePaginator
{
return Topic::paginate(10);
}
“`

取得時のwhere条件や並び替えなどがあれば適宜追加する。

#### viewへの表示
続いて取得したデータを表示するbladeファイル。

“`html
@foreach ($topics as $key => $topic)

{{ $topic->title }}

@endforeach

OTHERカテゴリの最新記事