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

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

Why is CodeIgniter More Productive than Other PHP Frameworks?

![CodeIgniter for Web Development.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199949/e0a1abd0-e595-8b4f-7135-e2fa9053d434.png)

PHP frameworks are widely used for their functionality and productivity. Most PHP-based frameworks make development fun as they reduce the long lines of code, courtesy of their in-built features. CodeIgniter is one such framework that has gained a lot of attention in recent times.

But what’s truly amazing is that it has managed to beat quite the re

元記事を表示

laravelで個別にログファイルを出力する

まずは、ログ出力の設定から。
ログの出力設定はconfig/logging.phpで設定する

“`config/logging.php
‘hoge’ => [
‘driver’ => ‘daily’,
‘path’ => storage_path(‘logs/hoge/hoge_log.log’),
‘level’ => ‘info’,
‘days’ => 3, //保存期間
‘permission’ => 0664,
],
“`
あとは、出力したいControllerとかに
以下のログ出力用のコマンドを渡してあげればよい

“`HogeController.php
Log::channel(‘hoge’)->info(‘なんかのログ’, ここは配列);
“`

テストしたいだけだったら以下を入れてみる。
“`HogeController.php
Log::channel(‘hoge’)->info(‘test’);
“`

元記事を表示

ApplicationGatewayとLaravelの合わせ技で通信が困った話

# 問題になったこと
AzureのApplicationGatewayを前段に置いて、後ろにLaravelのWebサーバーがある構成で、
何故かLaravelから生成されるURLが非SSLになって色々と困ったので備忘録

## 結論
### 原因
Laravelは特に指定がなければ、サーバー変数$_SERVERの値を使ってURLを生成する。
ApplicationGatewayより後ろを非暗号化httpで通信していたため、Laravel側はhttpのURLを生成していた模様。

### 解決方法
二種類ある
#### 1. Apache側でサーバー変数を書き換える
ApacheのVirtaulhostに下記の設定を追加
“`
SetEnv HTTPS on
“`
これで$_SERVER[“HTTPS”]が強制的にONになるので、
Laravel側でもhttpsのURLが生成されるようになる

#### 2. Laravel側でURL生成に使う値を強制的に変更する
下記の処理をAppServiceProvider.phpに加えることで強制的にURL生成に使い値を変更することが可能

元記事を表示

Laravel コマンド一覧

# よく使うコマンド一覧
よく使うコマンドを一覧にまとめています。

| 項番 | 項目 | コマンド |
|:—-:|:————-|:————-|
| 1 | [バージョン確認](#バージョン確認) | php artisan –version |
| 2 | [ヘルプ](#ヘルプ) | php artisan help <コマンド> |
| 3 | [起動](#起動) | php artisan serve |
| 4 | [コントローラー作成](#コントローラー作成) | php artisan make:controller <コントローラー名> |
| 5 | [テーブル作成](#テーブル作成) | php artisan make:migration <クラス名> |
| 6 | [マイグレーション実行](#マイグレーション実行) | php artisan migrate |
| 7 | [シーダー作成](#シーダー作成) | php artisan make:seeder <シーダー名> |
| 8 | [シーダー実行](#シーダー

元記事を表示

PHPのforeach文で一部だけ2次元の連想配列からキーだけを取り出す方法

# はじめに
備忘録
タイトルの通りです。
どなたかのお役に立てれば幸いです。

※追記
コメント欄にて、すっきりと書けるコードを教えていただけました。
ぜひコメント欄の方も参照してください。
コメントしてくださったお二方、ありがとうございました!

# foreach文で一部だけ2次元の連想配列からキーを取り出す
例えば、以下のような2次元の連想配列があったとします。
“`php
$array = [
“aaa” => true,
“bbb” => “foo”,
“ccc” => [
“ddd” => “this”,
“eee” => “is”,
“fff” => “sample”,
“ggg” => “array”
]
];
“`
この場合は以下のように書くことで全ての次元からキーだけを取り出すことができます。
“`php
$key_array = [];
foreach ($array as $key1 => $value1) {
array_push($key_arr

元記事を表示

【WordPress】the_contentで取得する本文にカスタムフィールドの値を入れる方法

プラグインなしでSEO実装をする案件にて。

カスタム投稿+カスタムフィールドの構築で、SEO対策として記事本文の最初の130文字をdiscriptionに入れてほしいという要望がありました。

本来なら、`th_content` から130文字抜くだけなので簡単ですが、カスタムフィールドだとそれができませんね。

なので、カスタムフィールドの値を全部取ってきて、`th_content` の中に自動で入れ込み、そこから130文字抜き出そうという実装です。

ポイントなのが、**柔軟コンテンツをループして1つのテキストにまとめる** です。

“`php
// the_contentで取得する本文に、カスタムフィールドの値を含める
function set_contents($post_id) {
if(!wp_is_post_revision($post_id) && get_post_type($post_id) === ‘contents’) {

remove_action(‘wp_insert_post’, ‘set_contents’);

元記事を表示

【初心者の勉強記録】MAMPを使わずに、Laravel上でphpMyAdminを使えるようにしました。

:::note warn
PS:私は日本語ネイティブではありませんので、文法ミスや分かりにくいところがあれば大目に見てください(ぺこり)
:::

## 前書き

私はphpMyAdminをもう使い慣れたので、どのようにDocker環境でphpMyAdminを立ち上がるかを紹介します。

PHPの学習をしていた段階で、実はMAMPが愛用でしたが、ただ無料版はPHPのVersionを二つしか選べないですね。

初めてLaravel+MAMPを環境構築していた時に、選べる一番最新のバージョンでも古すぎて、逆にLaravelを使えなくなってしまいました。

StackOverflowで色々な方法を試行錯誤しても全く効かないということで、あの時の焦りがもう忘れません。最後にやむをえず、MAMP PROの無料試用版の力を借りてやっと接続ができました。

ということで、今回の転職ポートフォリオを作成し始めた段階でDockerのみで実装してみようと思います。

## 接続方法
Laravelのプロジェクトを一旦インストールした後、次にDBの接続と.envの初期設定を行います。

この方法は非常に初

元記事を表示

Laravelインストール時に出たzipのエラー解決備忘録

# 環境
・OS : Windows11
・Composer : 2.5.1
・XAMPP : 8.2.0

# エラー
`composer create-project laravel/laravel:^8.* test`のコマンドで
インストールしようとした際に
`The zip extension and unzip/7z command are both missing`が下図のようにたくさん出て怖い
![2023_02_01_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/240612/e3cba72f-5f46-8afa-3d8b-6fba9659127f.png)

# 解決法
・`php.ini`をVScode等で開く  `C:\xampp\php\php.ini`にある

・`zip`を文字検索などで検索すると`;extension=zip`が出てくる

・この`;`を外し、`extension=zip`にして保存する
![php.ini – php.png](https://q

元記事を表示

【PHP】チューニングまとめ

# 処理速度まとめ
## 配列追加
:::note info
[]で追加する方がarray_pushよりも2倍早い
:::
### [ ]で追加
“`php
$val[] = “りんご”;
“`
### array_pushで追加
“`php
$val = arrray_push(“りんご”);
“`

元記事を表示

【PHP】function内で使うreturnについて(早期リターンとは)

#### 早期リターンとは
function 中で return を使うことで if などによるネストを減らすことができるテクニックのこと。

#### if文と言えば
if(条件1){
trueの場合の処理
}else{
falseの偽の場合の処理
}

上記のイメージが強かったが、returnを使うことで

if(条件1){
return true;
}
return false;
}

と表記することができる。

#### なぜelse以下が省略されているか
>「関数内で呼び出されると、return文は***即座にその関数の実行を停止し、引数を関数の値として返します。***」(phpリファレンスより)

つまりtrueの場合、上記の例では true が返された時点で関数の実行が止まるので、それ以下の処理は実行されないということ。
そのためelse以下の記述は省略され、本来falseの場合に実行される処理がif文の外に出されている上記のような形式が成立する。

##

元記事を表示

【Laravel】artisan コマンドが対話形式で使えるようになる

## 何が実現するのか?

2023 年 1 月 23 日に以下の PR がマージされました。

https://github.com/laravel/framework/pull/45629

そして 2023 年 2 月 1 日の v9.49.0 で上記変更分がリリースされました。

これにより、以下が実現します。

– **`make:*` コマンドが対話形式で使えるようになる**
– **既存のコマンドを対話形式に簡単に対応できるようになる**

一つずつ見ていきましょう。

## `make:*` コマンドが対話形式で使えるようになる

多くの Laravel ユーザーにとって真っ先に恩恵があるのはこれでしょう。今回の PR により、`make:*` コマンドが対話形式に対応しました。

例えば `make:model` だと、これまでは引数が足りない場合以下の通りにエラーが発生しました。

![](https://user-images.githubusercontent.com/4977161/212221423-c6b62de6-cf87-47fc-b55f-752c3

元記事を表示

You are in ‘detached HEAD’ state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch.

“`bash
Note: switching to ‘v5.5.28’.

You are in ‘detached HEAD’ state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

git switch -c

Or undo this operation with:

git switch –

Turn off this advice by

元記事を表示

【php】CSVファイルのBOMを削除する方法

PHP(Laravel)のシステムにUTF-8形式のCSVファイルをアップロードする際、BOMを削除する方法です。

BOM付きの場合とBOM付きでない場合、両方に対応する必要がありました。

## 解決策

“`php:
$text = preg_replace(“/^\xEF\xBB\xBF/”, ”, $text);
“`

## 参考:BOMとは

– Byte Order Markの略
– テキストの先頭に付く
– CSVファイルを保存する際、Excelのバージョンや保存形式により、BOMが付く場合と付かない場合がある
– 16進法で「EF BB BF」と表される
– 「ファイルがUnicodeで書かれているか」や「[エンディアン](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%87%E3%82%A3%E3%82%A2%E3%83%B3)の形式」を判別するために付いている(※ただし、UTF-8ではエンディアンは関係ない)

## 余談:`�`について

UTF-8の状態でデバッグした際、BOMは`�

元記事を表示

【DDD】ドメインサービスとはなにか?Laravelでどう実装するのか。

## はじめに
業務でドメインサービスを扱う場面が出てきたので、改めて記事にして整理していきます。書籍等ではJavaでの実装が多いと思いますが、今回はLaravelで実装しているので、Laravelを普段使用している人には分かりやすい内容になっているのではないかと思います

## ドメインサービスとは
エリック・エヴァンスは著書『エリック・エヴァンスのドメイン駆動設計』において、ドメインサービスを下記のように記載しています。
> ドメインから生まれる概念の中には、オブジェクトとしてモデル化すると不自然なものもある。こうしたドメインで必要な機能を**エンティティ**や**値オブジェクト**の責務として押しつけると、モデルに基づくオブジェクトの定義を歪めるか、意味のない不自然なオブジェクトを追加することになる。
> (中略)
> ドメインにおける重要なプロセスや変換処理が、**エンティティ**や**値オブジェクト**の自然な責務でない場合、その操作は、**サービス**として宣言される独立したインターフェースとしてモデルに追加すること。モデルの言語を用いてインターフェースを定義し、操作名が

元記事を表示

Amazon Linux 2 で PHP7.4 から 8.1 にアップグレードする方法

以前書いた記事の PHP 7.4 -> PHP 8.1 バージョンアップ版です。(Amazon Linux Extra を使用する前提)

以前の記事 -> [Amazon Linux 2 で Nginx, MariaDB, PHP7.2 から 7.4 にアップグレードする方法
](https://qiita.com/katzueno/items/0f2de17b719e9d16c749)

Concrete CMS をインストールしているサーバーで

– PHP7.4.x -> PHP8.1.x

にアップデートした時のコマンドメモです。

めっちゃくちゃざっくりです。

アップグレード元のバージョンが違ったり、レポジトリが違ったりあって、
いろんなケースの手順をまとめてます。

**PHP+MySQL のサーバーに詳しい人しか参考にしないでください。**

## 旧バージョンの Amazon Linux Extra のレポジトリを Disable

“`
sudo amazon-linux-extras disable php7.4
“`

## 新バージョンのレポジトリ

元記事を表示

独学エンジニア TV視聴時間 アウトプット

はじめに

独学エンジニアというサービス内で出題された、テレビの視聴時間クイズについて、アウトプットもかねてメモを残します。

※著作権の関係で一部改変しています。

問題

要件定義

たかし君は、受験勉強がはかどらない事に悩んでいます。テレビの視聴をやめれば学習時間が増えるのはわかっているのですが、なかなかやめることができません。
そこで、たかし君は、一日のテレビの視聴分数を記録することから始めよう考え、プログラムを書くことにしました。
テレビを見るたびにチャンネルごとの視聴分数をメモしておき、一日の終わりに記録します。テレビの合計視聴時間と、チャンネルごとの視聴分数と視聴回数を出力してください。

条件

  • 同じチャンネルを複数回見た時は、それぞれ分けて記録すること。
  • チャンネル:数値を指定すること。1〜12の範囲とする(1ch〜12ch)
  • 視聴分数:分数を指定すること。1〜1440の範囲とする
  • チャンネルごとに視聴分数と視聴回数は一
元記事を表示

hey siri で 指定したurlからjsonを取得

# ショートカットアプリを開く

iphoneのショートカットアプリを開き、マイショートカットを選択。

![nagare1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/105f2747-c5cb-0904-337f-7de5a36fee40.png)

右上の プラス をタップして新規ショートカットの作成

![nagare2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31338/4092e9d2-cae6-f07c-f103-a065af43822e.png)

# ショートカットの構築

アクションの追加について、

一番下部の赤枠Appおよびアクションを検索に () 内の値を入力し検索すると
アクションが表示される。
次のアクションの提案というのが表示されるが、無視する

・指定したURLの内容を取得
(URLの内容を取得)

・今回は json をリターンしているので、 json内のresの

元記事を表示

Qiita Night ~PHP~ で「PHPアプリケーションにおけるアーキテクチャメトリクスについて」というLTをしてきた

2023/01/25(水)に[Qiita Night~PHP~](https://increments.connpass.com/event/270421/)というイベントでLTしてきましたのでその報告です。

## モチベーション

PHPerKaigi2023に以下のようなプロポーザルを提出していたのですが、残念ながら採択ならず、悔しいな~と思っていたところ、たまたまLTの機会を頂いたのでアーキテクチャメトリクスについてお話ししてきました。

https://fortee.jp/phperkaigi-2023/proposal/047f399d-8045-4e1b-a626-72ef4ce3f6ec

発表内容の元ネタはこちらの書籍です。

https://www.oreilly.com/library/view/software-archite

元記事を表示

PHP コードメモ。

1. 日付を出す。
“`php
date_default_timezone_set(‘Asia/Tokyo’);

for ($i=0; $i<366; $i++): $time = strtotime( $i . ' day'); $day = date('n/j(D)', $time); echo $day . '
‘;
endfor
“`
2. 曜日を出す。
“`php
$week_name = [‘日’, ‘月’, ‘火’, ‘水’, ‘木’, ‘金’, ‘土’];

date_default_timezone_set(‘Asia/Tokyo’);
$week = date(‘w’);
echo “今日は$week_name[$week]曜日です。”;
“`

元記事を表示

Laravelでアプリを作成してみた【Blogアプリ】

## phpMyAdmin とは?

– ブラウザ上でMySQLデータベースを管理できるツール
➡︎ 本来はコマンドでMySQLを操作するがMAMPに最初から入っている

## データベース とは?

– データを保管できる場所

## なぜデータベースを使うのか?

– データの管理・整理・検索ができる
– 複数人で同時に利用できる

## データベースを管理するシステム(DBMS)

– データベースの操作及び管理を行うシステム
➡︎ 現在の主流は、『リレーショナルデータベース管理システム(RDBMS)』

※ リレーショナルデータベース管理システム(RDBMS)の中に『MySQL』がある

## SQL言語

– データベースの操作を行うための言語
– データの追加・更新・削除・検索を行う

## SQL文の種類

– データ定義(DDL): 主にテーブル操作
CREATE文:テーブルを作る
DROP文:テーブルを削除
ALTER文:テーブルを更新
JOIN文:テーブルを結合

– データ定義(DML): 主にテータ操作
SELECT文:テーブルを取得
INSERT文:テーブルを

元記事を表示

OTHERカテゴリの最新記事