IT技術に関する情報掲載サイト

プログラミングに関することを掲載します。

Laravelの画像アップロード時に、imgタグのnameに2次元配列を使った際の対応方法

larvelの画像アップロード時に、fileやhasfile関数を使う場合があるかと思いますが、

引数を2次元配列を使った際の記述の仕方がわからなくて、色々調べてなかなか見つからなかったので、メモをとっとこう。

<img src="image" name="page_thumbImg[1][2]" value="">

というタグを使っている場合は、

page_thumbImg.1.2

という感じにするとよいようです。

[]を使うのではなく、ドットで区切ります。

 

サンプルは以下です。

$imagefilename="page_thumbImg.1.2";

if ($request->hasFile($imagefilename)) {

$pageMainthumbImg = $request->file($imagefilename);

$name_gen = hexdec(uniqid()) . '.' . $pageMainthumbImg->getClientOriginalExtension();

Image::make($pageMainthumbImg)->resize(1900, 250)->save('upload/page_images/'.$name_gen);

$saveUrlpageMainthumbImg = 'upload/page_images/'.$name_gen;

} else {

$saveUrlpageMainthumbImg = null;

}

$page_repeat_fields1->page_thumbImg=$saveUrlpageMainthumbImg;

 

Dockerを使ってOracle Database 23c Freeをインストールしてみた。

Oracle Databaseも23cからフリーのものがでたみたいなので、Dockerの勉強を兼ねてOracle Database 23cをインストールしてみました。

 

まず、docker pull container-registry.oracle.com/database/free:latestを実行

$docker pull container-registry.oracle.com/database/free:latest
latest: Pulling from database/free
089fdfcd47b7: Pull complete
43c899d88edc: Pull complete
47aa6f1886a1: Pull complete
f8d07bb55995: Pull complete
c31c8c658c1e: Pull complete
b7d28faa08b4: Pull complete
1d0d5c628f6f: Pull complete
db82a695dad3: Pull complete
25a185515793: Pull complete
Digest: sha256:5ac0efa9896962f6e0e91c54e23c03ae8f140cf6ed43ca09ef4354268a942882
Status: Downloaded newer image for container-registry.oracle.com/database/free:latest
container-registry.oracle.com/database/free:latest
$

つぎに、docker imageでcontainer-registry.oracle.com/database/freeがインストールされているか確認し、あれば、docker runで立ち上げる

$ docker run container-registry.oracle.com/database/free
Starting Oracle Net Listener.
Oracle Net Listener started.
Starting Oracle Database instance FREE.
Oracle Database instance FREE started.

The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
===========================================================
No patches have been applied
===========================================================
2024-02-08T05:56:07.585348+00:00
PDB$SEED(2):Opening pdb with Resource Manager plan: DEFAULT_PLAN
FREEPDB1(3):Autotune of undo retention is turned on.
2024-02-08T05:56:08.887434+00:00
FREEPDB1(3):Opening pdb with Resource Manager plan: DEFAULT_PLAN
Completed: Pluggable database FREEPDB1 opened read write
Completed: ALTER DATABASE OPEN

あとは、docker exec -it {CONTAINER ID} /bin/bash

でコンテナにログインして、sqlplusなので、接続できます。

パスワードは、ホームディレクトリにsetPassword.shってシェルがあるから、

setPassword.sh 変更したいパスワード

と指定して実行するとできます。

 

以下のサイトも参考にしました。

www.oracle.com

Dockerを使ってMac環境でのLAMP環境の作り方

Linuxでのやり方は、たくさんあったのですが、Macでのものがなかったので、メモ程度に設定ファイルを作成しました。

どうもlinuxは、linux/x86_64を指定する必要があるようです

 

docker-compose.yml

 

version: '3.3'

services:
  mysql:
    # for M1 Mac
    platform: linux/x86_64
    image: mysql:5.7-oracle
    volumes:
      - ./docker/data:/var/lib/mysql
      - ./docker/mysql/sql:/docker-entrypoint-initdb.d
      - ./docker/mysql/conf.d:/etc/mysql/conf.d
    ports:
      - 33060:3306
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=craftsports-japan_com_db2
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user
      - TZ=Asia/Tokyo
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-buffer-pool-size=64M --explicit_defaults_for_timestamp=1
    tty: true

  php:
    build: ./docker/
    volumes:
      - ./docker/php.ini:/usr/local/etc/php/php.ini
      - ./docker/logs:/var/log/httpd
      - ./html:/var/www/html
    ports:
      - 8080:80

  phpmyadmin:
    image: phpmyadmin:5.2
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=root
      - UPLOAD_LIMIT=256M
    ports:
      - 4040:80
    volumes:
      - ./docker/phpmyadmin/sessions:/sessions

あと、apacheの設定ファイルも

apache.txt

 

#
# The following directives define some format nicknames for use with
# a CustomLog directive.
#
# These deviate from the Common Log Format definitions in that they use %O
# (the actual bytes sent including headers) instead of %b (the size of the
# requested file), because the latter makes it impossible to detect partial
# requests.
#
# Note that the use of %{X-Forwarded-For}i instead of %h is not recommended.
# Use mod_remoteip instead.
#
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

# Include of directories ignores editors' and dpkg's backup files,
# see README.Debian for details.

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

 

Laravel sailでmigrateを実行する方法

知っていれば、簡単ですが、知らないと結構ハマってしまうので、ここに記載しときます。

 

通常は、

php artisan migrate

で、実行されるのですが、

Laravel sailをつかってサイトを起動させている場合、

sailを起動させといて、

./vendor/bin/sail artisan migrate

としないといけない。

 

意外にはまってしまうので、要注意です。

Dockerで再度コンテナを再構築(リビルド)する方法

どこかのサイトのdocker-compose.ymlを参考にして構築してあとに例えば、PHPだけ、バージョンを変えて再構築したい場合に便利な手順です。--no-cacheをつければいいんですが、忘れそうなので、メモ程度に記事にしました。

 

# コンテナを削除
docker-compose rm <コンテナ名やコンテナID>

# ちゃんと指定したコンテナがなくなっているか確認
docker-compose ps -a 

# 個別のコンテナを作り直し
docker-compose build --no-cache <service_name>

# 動作確認
docker-compose up -d

となります。

dockerで立ち上げたコンテナにログインする方法

初歩的なことですが、よく忘れてしまうので、備忘録として、記事にします。

 

 

  1. まず、ログインしたいコンテナの名前を確認

    docker ps

    NAMESの列に記載されているのが、コンテナ名です。

  2. 以下のコマンドで実行

    docker exec -it [コンテナ名] /bin/bash

    root以外でログインする場合は、以下でユーザ名を指定してください

    docker exec -it [コンテナ名] --user [ユーザー名または UID] /bin/bash

     



PHPのnumber_format関数が自動で、小数点以下を四捨五入してしまう

長くPHPerをしているのですが、PHPのnumber_format関数が自動で、小数点以下を四捨五入してしまうという不具合?をいまさらですが、知ってしまいました。関数の引数で指定することができないので、対策は以下をしました。

 

$value = 1234.5678;
$decimals = 2; // 小数点以下の桁数

// 切り捨ててからフォーマット
$formatted_value = number_format(floor($value * pow(10, $decimals)) / pow(10, $decimals), $decimals);

echo $formatted_value; // "1234.56"

一回桁をずらして、切捨ててもとに戻すっていう手法となります。