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

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

Laravelとvite

走り書きメモ
・laravelでviteを使うことになった場合は
resouces/views/app.blade.phpでassetやmixじゃなくて
`` ⇒ @vite(‘resources/sass/app.scss’)
`` ⇒ @vite(‘resources/js/app.js’)

・vite.config.jsの

plugins: [
laravel({
input: [
‘resources/css/app.css’,
‘resources/js/app.js’,
‘resources/sass/app.scss’,//念のため追加
],

元記事を表示

【Laravel】既存テーブルに好きな数のカラムを追加する

# はじめに
今回は、Laravelのマイグレーション機能を利用し、既存テーブルにカラムを追加する過程で、調べたことをまとめました。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的
以下内容についてアウトプット
– Artisan make:migrationコマンド
– マイグレーション機能
– カラムのデータ型

# この記事の内容

1. マイグレーションファイルの作成
2. テーブルの定義
3. カラムのデータ型

# 1. マイグレーションファイルの作成
Artisan make:migrationコマンドを使用して、マイグレーションファイルを作成します。

**Tips :**
– マイグレーション名は任意
※クラス名と被るとエラーになる

– 既存のテーブルに変更を加える場合、 `–tableオプション` でテーブル名を指定する

– TIMESTAMP型のカラムを追加する場合、 `nullable()メソッド` を使ってnull許容にする必要がある
※nullを許容し

元記事を表示

docker環境のローカルで、PHPで作成したHTMLファイルをブラウジングする際のURLの意味

# docker環境もXAMP等と同じく、localhostでブラウジングできる

## トップページのURL

“`
http://localhost:50080/
“`

上記URLのlocalhostは自身のパソコンを指す。
50080の部分はポート番号を指し、何のアプリケーションを指すか?を示している。
この番号はapacheであり、これでdockerのappコンテナ内のapacheにアクセスしていることになる。
その設定はdocker-compose.ymlファイルに記述してある。
以下、その記述箇所

“`
ports:
– “50080:80”
“`

上記の :80 の箇所はapacheがデフォルトで決めてある番号で、URLにはここまで記述しなくてもapacheが起動するようになっている。

元記事を表示

SQLでのinsertを死ぬほど楽にする関数を作った。

## INSERT、めんどくさいですよね?
あのプリペアドステートメントとか、苦しくて苦しくてやっていられるもんじゃあありません。
そこで、SQLでinsertを死ぬほど楽にする関数を作りました。
一応、セキュリティーを考えているつもりですが、何か問題点があったら教えてください。

## コード
“`php
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$keys = array_keys($insert_data);
$values = array_values($insert_data);

元記事を表示

簡単な料金計算をValueObject化してみる

# この記事 is 何?
DDDの学習で参考書籍を読み、ValueObjectの実感を得る為、記事に残しました:v:

## 参考図書
[良いコード/悪いコードで学ぶ設計入門](https://gihyo.jp/book/2022/978-4-297-12783-1)

## 注意点
`Amount` や `Rate` といった抽象的な命名は本でも触れていますが、可能な限り避けたほうが良さそうです。

## よくあるコード(今回の悪魔 :smiling_imp:)
“`php
// 金額
$amount = 1200;
// 税率
$rate = 1.10;
// 請求金額
$commission = $amount * $rate;
“`

## 金額をValueObject化してみる

“`php
Class Amount {
// private int $amount = 初期値を暗黙的に宣言
// 8.1 で readonlyが付与できるので
// public readonly int $amount となり getterも不要
pub

元記事を表示

Laravel 便利な関数 ライブラリー

# Laravelでよく使う便利な関数orライブラリー

Laravelでよく使う便利な関数orライブラリーを紹介していきます。

## パスワードのハッシュ化
“`
Controller

use Illuminate\Support\Facades\Hash;

$mymy->password = Hash::make($request->password);
//下記のようにランダムにハッシュ化される
//$2y$10$c0XnxIoqscqkkO4vxvdyxeXF6aLSxZOKR.Ye4fWhBlhiHulhxg1Ju

“`

## Carbon ライブラリー
Laravelに標準で搭載されているライブラリーでcreated_atやupdated_atはCarbonインスタンスとして取得されます。

Carbonをcreated_atを組み合わせると

#### 2023-02-13 16:08:00
### ↓
#### 22時間前
と変更することが可能です!

記述方法
“`

{{$my->created_

元記事を表示

Amazon Linux 2 に ImageMagick 7 をインストールする(PHP)

# 前提

開発環境自体の用意は、以下の記事の手順通りに作成しています。

https://qiita.com/qwe001/items/d3270b0de7f8b17a4f85

# はじめに

以下のコマンドで、yumで安易にImageMagickをインストールしてはいけません

“`
yum install ImageMagick
“`

これで入るImageMagickは6.x系ですので、
もし、これを入れてしまうと、6.x系準拠の依存ライブラリが大量に入って、
後々面倒なことになります。(1敗)

# なぜ最新版を入れるのか

ImageMagickは数多の脆弱性が指摘されているためです。
しかし、他のライブラリを使う学習コストをかける時間はなかったので、
ImageMagickの最新版を入れることで対応することにしました。

# インストール手順

## Step1. ImageMagick 最新版のバージョンを確認

※注意 ImageMagickは私がこの記事を書くおよそ1週間前にも(当時の)最新版で脆弱性が指摘されています。
そのため、私の記事に書いてある内容をそ

元記事を表示

WindowsのPHPを8.2にアップデートしたらClass “ZipArchive” not found

### 結論
WindowsでPHPを8.2.0以降にアップデートしたときに、
`PHP Fatal error: Uncaught Error: Class “ZipArchive” not found in ***`
のエラーが出たら
php.iniに以下の1行を追加
`extension=zip`

### アップデートすることになった理由
WindowsにPHPを入れて色々なツールを動かしているのだけど、PHP7.3.3でSplFileObjectを使ってCSVファイルを読み込むと、データ中に改行があって””で囲まれているCSVファイルがうまく読み込めない。
他のマシンで試すと同じコードで正しく読み込めた。他のマシンのPHPのバージョンを調べると8.2.2だったので、PHP7.3.3のマシンも8.2.2にアップデートすることにした。

### 結論に達するまで
PHPのコード中でZipArchiveを使っていると
`PHP Fatal error: Uncaught Error: Class “ZipArchive” not found in ***`
というエラーが出るの

元記事を表示

Laravel 10?がリリースされたのだ?【Laravel 10 新機能】

https://twitter.com/taylorotwell/status/1625523834236420159

Laravel 10がきました!ぺちぱーとララベラー歓喜!新機能を紹介します
https://laravel.com/docs/10.x/releases

# Laravel ぺなんと
if文なしで実行する処理を切り替えることができ、ABテストで便利です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435735/87dc8b70-d745-653c-b5fc-d311b4c3b75c.png)

“`php
public function boot(): void
{
Feature::define(‘beta-testers’, fn (User $user) => match (true) {
$user->isBetaTester() => true,
default =>

元記事を表示

Laravel で作った API に空文字を渡すと null になる

Laravel で作った API に空文字を渡すと API 側でエラーが発生するという事象にあいました。

調査してみると、どうやら API に渡した空文字が Laravel 側で null に変換され、その後の処理で意図せず null 参照が発生してエラーとなっているようでした。

空文字を null にするというのは Laravel のデフォルトの挙動です。

https://readouble.com/laravel/9.x/ja/requests.html より抜粋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2960076/fadef631-7493-7f8f-47e3-6ef0bb7334e0.png)

> リクエストに応じてすべての受信文字列フィールドを自動的にトリミングし、空の文字列フィールドをnullに変換します。

なるほどです。 Git for Windows の `autocrlf` 級に、余計なお世話感がある仕様です(個人の感想です)。

この機能をOFFに

元記事を表示

PHP:Docker環境で初めて環境変数を作成し、それを用いたデータベースへ接続するまでの手順

# Dockerにライブラリ、phpdotenvをインストール

## Docker
起動

## iTerm2
docker-composeを開始(up)
ライブラリのphpdotenvをインストール

# 環境変数の設置

## vscode
環境変数を登録するファイルを作成し、保存場所を決めて保存
変数は以下の要領で記述
※グローバル変数の箇所は「$_ENV」でも「$_SERVER」でも良い。
“`
DB_HOST=”データベースのホスト名”
DB_USERNAME=”データベースのユーザー名”
DB_PASSWORD=”決められたパスワード”
DB_DATABASE=”データベースの名称”
“`

# コーディング

## PHPファイル
当然ながら、データベースを接続する前に指示する。

### 冒頭で全てのライブラリを一括読み込み
“`
require __DIR__ . ‘/../vendor/autoload.php’;
“`

### 環境変数を書いているenvファイルの場所を示す
“`
$dotenv = Dotenv\Dotenv::createImm

元記事を表示

Docker Composeを使ってWordPressのローカル環境構築

WordPressをローカル環境で試してみたかったので、Docker Composeを使って構築してみました。

# 環境
Windows 11
Docker version 20.10.21
Docker Compose version v2.12.2
Docker Desktop version v4.14.1

※ Dockerは既にインストール済みなので手順は省きます。

# 構築手順

まずはコマンドプロンプトを立ち上げます。
“`
C:\Users\hoge>
“`

フォルダを作成します。
“`
C:\Users\hoge>mkdir wp_local
“`

フォルダに移動します。
“`
C:\Users\hoge>cd wp_local
“`

YAMLファイルを作成します。
“`
C:\Users\hoge\wp_local>notepad docker-compose.yml
“`

下記の内容をYAMLファイルに保存します。
“`yml
version: ‘3’

services:
db:
image: mysql:5.7

元記事を表示

Laravel Restful(リソース) コントローラー について

# Restful Controllerとは

あるデータの追加、読み取り、更新、削除についての決まり切った処理を簡潔にできる機能です。

CRUD(新規作成、表示、更新、削除)
C(create, store) R(index, show, edit) U(update) D(destroy)

下の表ではブログ写真投稿システムにおける記事(photos)モデルです
表示・・GET、DBに保存・・POST

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2911371/0418e7db-cb87-1df3-0824-40be63d5cde0.png)

生成コマンド
“`
php artisan make:controller FillauthController ̶–resource
“`

app/Http/Controllers/に作成されます.
また階層を指定したい場合は
“`
php artisan make:controller photos/
Fillauth

元記事を表示

【Wordpress】PHP Update Requiredの対応方法について(EC2に接続してアップグレードする)

# 前提
* AWSのEC2インスタンスで稼働しているお手製HTMLホームページを、Wordpressに移行した後に発生したエラーについて記載します。
* WordPressインストールするまでの流れを解説した前回の記事はこちら:[WordpressをEC2インスタンスにインストールする方法(Apacheのバーチャルホスト設定方法・Wordpress用DB作成方法も解説)](https://qiita.com/Ryo-0131/items/a6dab55ea5b54b6e10b7)

## PHP Update Requiredの警告
* PHP7.0であることに対して警告が表示されていることを確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710373/c0f92aa3-2a66-7faa-3d89-026e39280a0c.png)

* WordPressがインストールされているEC2インスタンスへ接続。
* 以下を実施して、PHP7.4にupgrade

“`

元記事を表示

PHPで日本語を含んだURLから画像ファイルを取得した方法

# はじめに
PHPで日本語を含んだURLリンクから画像ファイルを取得しようとした時に、何箇所かつまったので記事として残します。

## 対象者
この記事は下記のような人を対象にしています。

– PHPでの日本語を含んだURLの使用に慣れていない人
– プログラミング初学者

# 目次

– [日本語を含むURLリンクを作成](#Chapter1)
– [URLリンク先のページが表示されるか確認](#Chapter2)
– [URLリンク先からファイル取得](#Chapter3)
– [参考記事](#reference)



# 日本語を含むURLリンクを作成

`http://127.0.0.1` といったリンクにファイルが置いてあるディレクトリまでのパスの文字列を結合して、URLエンコード(URLとして使用できない文字を、URLで使用できる文字の特殊な組み合わせに変換)します。

“`php:directory_link.php
$directory_lin

元記事を表示

dockerのphp8にGD ライブラリをインストール

dockerで起動したphp環境にGDライブラリがなかったので、なんとかインストールしました。

“`Docker:Dockerfile
RUN apt-get update &&\
# JPEG 対応
apt-get install -y libpng-dev libjpeg62-turbo-dev &&\
docker-php-ext-configure gd –with-jpeg &&\
docker-php-ext-install -j$(nproc) gd
“`
    

あとDockerファイル編集したら –buildつけないといけなかったの忘れてしばらく悩んでしまった。。。

“`
docker-compose up -d –build
“`

  
———–

ここに全て書いてありました。
php8.0でも動いてるみたいです。

https://tt-computing.com/docker-php-gd

元記事を表示

開発環境docker編:MacのiTerm2でphpdotenvをインストールすると、PHP Composerのバージョンが古いため完了できない問題の解決

## 背景
Mac、iTerm2、Docker環境で、PHPの環境変数を設定するために、phpdotenvというライブラリをインストールしたところ、以下のメッセージが出て完了できなかった。
PHP Composerをバージョン2にせよとの内容。

#### 全てのメッセージ
“`Warning from https://repo.packagist.org: Support for Composer 1 is deprecated and some packages will not be available. You should upgrade to Composer 2. See https://blog.packagist.com/deprecating-composer-1-support/
Info from https://repo.packagist.org: #StandWithUkraine
Using version ^5.5 for vlucas/phpdotenv
./composer.json has been updated
Loading compos

元記事を表示

LaravelのEloquentはException投げるのか投げないのかどっちなんだーいオイッ!

# とある新人のコードレビューしていて質問されたのだが
新人「データベースのupdateでtry/catchしなくていいですよね?」
私「そんなあほな」
新人「だってVSCodeの表示ではreturn intてかいてます・・・」
私「ほわぁぁぁぁ!!!!」

# LaravelのORMマッパEloquentのupdate/deleteが返す値
“`
* @return int
*/
public function update($query, $bindings = []);
“`
* ヾ(゚Д゚ )ォィォィ、まじかよ、intを返しやがるぜ!

# 今までtry/catchしてたのは無意味?
* なんとなく遠い記憶で、return intだったのは知っていたが当然Exception投げるだろうとおもこんでいた
* でもPHPDocには @throw はかいていない・・・
* ちょっとまて、今までかいたやつは全部修正か・・・・
* ぜんぶ修正なんて地獄絵図やぞ

# 実はPDOの設定がある
* https://www.php.net/manual/ja/pdo.error-han

元記事を表示

ArchLinux: Nginx で PHP と Python を使う

ArchLinux の Nginx の設定ファイルは、/etc/nginx/nginx.conf です。
PHP と Python を使う設定です。
PHP だけを使う設定はこちら
[ArchLinux: Nginx で PHP を使う](https://qiita.com/ekzemplaro/items/9ef3de4ff32956873593)

## インストール

“`bash
sudo pacman -S nginx
sudo pacman -S php-fpm
sudo pacman -S fcgiwrap
“`

## 設定ファイル

“`text:/etc/nginx/nginx.conf
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeou

元記事を表示

ArchLinux: Nginx で PHP を使う

ArchLinux の Nginx の設定ファイルは、/etc/nginx/nginx.conf です。
PHP を使う設定です。

## インストール

“`bash
sudo pacman -S nginx
sudo pacman -S php-fpm
“`

## 設定ファイル

“`text:/etc/nginx/nginx.conf
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;

server {
listen 80;
server_name localhost;

location / {
root /var/www;

元記事を表示

OTHERカテゴリの最新記事