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

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

vue3とlaravel8でリアルタイムチャット機能を実装

## はじめに
今回は、Pusherを使ったリアルタイムチャット機能を実装していきます!!

この記事の目標は、ブラウザを2つ開いて片方からチャットを送るとリロードしなくても自動更新される簡単なチャット機能を目指します!

#### 実行環境
Vue : 3.0.5
Laravel : 8.63.0
## まず簡単なチャット機能を作る(リアルタイムではない)
今回の本題は、リアルタイムということなのでここはサクッと進みたいと思います。
#### テーブルとモデルの作成
まずチャットのメッセージを保存するためのテーブルを作ります。
“`c#:コマンド
php artisan make:model Message
php artisan make:migration create_messages_table –create=messages
“`
“`c#:src/database/migrations/2022_03_00_000000_create_messages_table.php
public function up()
{
Schema::create(‘me

元記事を表示

外部ファイル関連(出力、読込、追記)

●外部ファイルへの書き込み
`file_put_contents(‘パス/出力ファイル名’, ‘出力内容’)`を用いる。
例)
“`

元記事を表示

PHP 配列の要素をランダムに並び替える関数 shuffle

# 概要

– 既存の配列を渡すと配列内部の要素をランダムに並び替えてくれる関数`shuffle()`についてまとめる。

# 紹介

– 下記の様に実行する。

“`php
$array = [‘りんご’, ‘いちご’, ‘バナナ’];
shuffle($array);
“`

– 下記の様に配列の内部要素をランダムに並び替える。

“`php
var_dump($array);
// 筆者が実行したときは[‘バナナ’, ‘いちご’, ‘りんご’]に並び替えされた
“`

– 当該関数に引数として渡す配列そのものの要素を入れ替える(難しい言い方をすると「参照渡し」でもともとの配列に影響を与える)ので注意する。
– 成功したらtrue、失敗したらfalseを返す。

# 参考文献

– [https://www.php.net/manual/ja/function.shuffle.php](https://www.php.net/manual/ja/function.shuffle.php)

元記事を表示

Laravel ブラウザからログイン済みのユーザーが実行できるAPIの作成と確認

# 概要

– Laravelのアプリケーションにてブラウザからログインしているユーザーが実行できるAPIを作成する方法をまとめる。

# ご注意

– 本知見は同じチームで働くエンジニアさんにご教授いただいた内容です。
– 筆者がかなり詰まっていたときにお力添えいただきました!改めてお礼申し上げます!
– 今回、詰まりそうな作業を極力少なくするためにAPIで実行されるルーティングをweb.phpに記載します。
– 本来、APIのルーティングはapi.phpに記載することが望ましいです。
– 今回web.phpで定義している処理はあくまで「ROOT GET OK」の文字列を返すだけのものですが、応用すればいろいろな処理が可能です。

# 作成

1. Laravelの新規アプリケーションを作成する。
1. 下記の方法でLaravel Breezeを用いた認証処理を作成する。
– [https://readouble.com/laravel/9.x/ja/starter-kits.html](https://readouble.com/laravel/9.x/ja

元記事を表示

Symfonyプロジェクトをherokuにデプロイする。

## モチベーション
[The Fast Track – 基礎から最速で学ぶ Symfony 入門](https://symfony.com/doc/6.0/the-fast-track/ja/index.html)でSymfonyの勉強中、作業内容をデプロイする説がありました。
その際、[Platform.sh](https://platform.sh/)にデプロイするとありましたが、情報量が少ない上に、私の勉強不足により上手く行うことが出来ませんでした。
![スクリーンショット 2022-03-23 18.24.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/759541/1c7df075-e599-d1ae-6034-07f902ff8f51.png)

ですので、比較的情報も多く、日本語ドキュメントが豊富なHerokuにデプロイすることにしました。

## 環境
Symfony6系
“`json
“php”: “>=8.0.2”
“`

## 行ったこと

まずプロジェクトを作成し

元記事を表示

【PHP】タグ機能②

下記投稿の続きで、タグ機能に文字かタグの数で改行するように制御を追加します。

https://qiita.com/ryouya3948/items/da1a53e32edbd16637a5

![tag9.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597913/d6c94a3f-cb7e-18ce-7e87-e164daead6da.gif)
# タグか文字の数で改行
“`php:form.php
function inputChange() {

spans = skill.getElementsByTagName(“span”),
skills = new Array();

for (i = 0; i < spans.length; i++) { skills[i] = spans[i].textContent; } skills = skills.join(''); if (3 <= spans.len

元記事を表示

Laravelでニコニコ動画 『スナップショット検索API v2』を利用してみた

# はじめに
Laravelを学び始めたばかりの筆者が、自身のアプリにニコニコ動画のコンテンツ検索機能を実装した際のメモです。Qiitaの記事は初めて書きました。何かミスを含んでいる可能性は十分ありますので、あらかじめご了承ください。

# 『スナップショット検索API v2』について

ニコニコ動画のコンテンツを検索/取得できる公式APIです。

使い方は公式ドキュメントにわかりやすく説明してありますので、大半の方はこの記事で無く公式ドキュメントを読んだ方が速いと思います。

https://site.nicovideo.jp/search-api-docs/snapshot

# ControllerでcURLを使って情報を取得

Controller内で必要なパラメータを指定しcURLでGETを行います。今回は、ユーザから検索対象文字の”q”と何ページ目を取得するかを示す”page”を受け取り、APIのパラメータを指定する際に用いています。

“`php:MyPageController.php

元記事を表示

WordPressでログを取る場合に気を付けること

Web制作会社のエムハンドでエンジニアをしてる@yadon_yadon_yadon_don_donです:raised_hand:
WordPressサイトの制作をする際、
いわゆるシステムチックな構築が必要になる場合、
システムの検証や、システムが動いていることの証拠を残すために、
エラーログを出力させています。

その実装方法、注意することをまとめます:point_up:

## 実装方法
### wp_config.php
下記を、
“`
define( ‘WP_DEBUG’, false);
“`
下記に書き換えます。
「保存したいパス」に関しては、**ドキュメントルートより1つ以上上の階層にディレクトリを作成**、そこを設定することを推奨します。(理由は後述)
“`
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_DISPLAY’, false );
define( ‘WP_DEBUG_LOG’, ‘保存したいパス’.date(‘Ymd’).’_debug.log’ );
“`
この書き換えが完了したら、エラーや警告がデバッグ

元記事を表示

【Laravel】初期設定について

## この記事に書いてあること
Laravelプロジェクトを立ち上げた直後の初期設定について、最低限必要なものを紹介します。
プロジェクトに応じて、他にも必要があれば設定してください。

## タイムゾーン、言語設定
タイムゾーンと言語設定を日本にします。
config/app.phpを以下のように変更。

“`php:config/app.php

// ‘timezone’ => ‘UTC’,
‘timezone’ => ‘Asia/Tokyo’,

//中略

// ‘locale’ => ‘en’,
‘locale’ => ‘ja’,
“`

## デバッグバー
クエリ実行ログ、ルーティング、ビュー、セッション等の様々な情報をデバッグバーとして出力してくれます。

githubは[こちら](https://github.com/barryvdh/laravel-debugbar)

以下のコマンドでインストール。
vagrantにssh接続して、仮想環境上で実行します。

“`
composer require barryvdh/laravel-debugbar
“`

元記事を表示

【初心者向け】ポケモンでオブジェクト指向をふわっと学ぶ

# はじめに
__オブジェクト指向とは何か。__
プログラミングを学んでいく上で欠かせないものらしいとわかっていながら、ずっと後回しにしていた方や何回学んでも忘れてしまう方(自分)に向けてアウトプットを兼ねて、馴染みのあるポケモンを例に自分なりにまとめてみました!
できるだけわかりやすい言葉でまとめているのでかる〜い気持ちで読んでくれたら嬉しいです!

# もくじ
[・オブジェクト指向の理解が困難なワケ…](#オブジェクト指向の理解が困難なワケ…)
[・オブジェクト指向とは](#オブジェクト指向とは)
[・オブジェクト指向で出てくる用語](#オブジェクト指向で出てくる用語)
[・ポケモンでオブジェクト指向を考えてみる](#ポケモンでオブジェクト指向を考えてみる)
[・さいごに](#さいごに)

# オブジェクト指向の理解が困難なワケ…
これにはプログラミング初学者ならではの理由があると思いました。

__・オブジェクト指向自体が考え方や概念であるため。__
__・書籍や記事での解説が実用的な例を使った解説ではないため。__

オブジェクト指向はルールがあって、それに従って書けば動く何

元記事を表示

XserverにLaravelをデプロイできない場合に注意する点

# はじめに
今回は環境の異なるXserverにLaravelを使ったアプリをデプロイしたいけどエラーが起きる場合に注意する点をまとめました。
gitからクローンしてpublic配下に移動し、シンボリックリンクの設定を済ませた前提で書いていきます。

## PHPのバージョンを確認
まずはlaravelアプリのcomposer.jsonファイルを確認して環境を確認しましょう。
“`json
“require”: {
“php”: “^8.0.2”,
“guzzlehttp/guzzle”: “^7.2”,
“laravel/breeze”: “^1.8”,
“laravel/framework”: “^9.2”,
“laravel/sanctum”: “^2.14.1”,
“laravel/tinker”: “^2.7”,
“laravel/ui”: “^3.4”
}
“`

このrequireに記載されているものを満たす必要があります。今回は8

RubyとPHPの比較(文字列と変数)

# この記事の概要
Rubyで学習を始めてPHPに言語チェンジをする人が一定数いるみたいなので
そういった人達が参考にするための記事です。

# 簡単な出力
簡単な出力からそれぞれ見ていきます。

⚫︎“`Ruby“`

“`rb
puts “プログラミング”
“`

⚫︎“`PHP“`

“`php

“`
PHPだと“`最後に;“`がつくのが特徴です。

両方とも***プログラミングと出力***されます。

⚫︎補足
“”だけでなく”で囲むことも可

# コメントの書き方
 コメントの書き方がそれぞれ違います。

⚫︎“`Ruby“`

“`rb
#コメント
puts “Ruby”
“`
Rubyでは“`#“`を使います。

⚫︎“`PHP“`

“`php

“`
PHPでは“`//“`を使います。

# 文字列と数値の連結

⚫︎“`Rub

CodeIgniterのバリデーションルールで他のPOST値を参照する

CodeIgniterのset_rulesは便利ですが、このような形
“`html:日付



“`
の入力項目があった場合、set_rulesは基本的に単一のPOST値に対してのバリデーションなので
例えば存在しない日付を入力していないかのチェックは難しいかと思います
(配列のnameにすればいけないこともないですが、、)

その場合はset_rulesで第二引数を利用して、他のPOST値のnameを橋渡しします。

# やり方

第二引数を利用する場合は、ルール名の後に[]を記述し、そこに引数の中身をいれてください
第三引数は設定できませんので、今回はカンマ区切りで疑似的な配列指定をします

“`php:callback_check_dateはコントローラー内に記述した独自ルール
$this->form_validation->set_rules(‘year’, ‘年’, ‘req

【Laravel】Web開発初心者が1週間で入門チュートリアルを実施した記録(8)

以下の続き。

https://qiita.com/yotty19911207/items/613bbeb18cfa2f748bfe

前回までで、タスクの編集機能をつくった。

入門Laravelチュートリアル (8) ToDoアプリの認証機能を作る

認証機能の実装。
・会員登録機能
・ログイン機能
・ログインしたユーザーは自分のフォルダのタスクだけを閲覧できる機能

ユーザーとフォルダの紐付け。

単純にFoldersテーブルにユーザーIDカラムを追加するだけだと既存データのNot Null制約が邪魔してうまくいかないので、以下コマンドでテーブルを作り直す。

php artisan migrate:fresh

このコマンドでは、テーブルを全て削除してマイグレーションを実行し直す。
すると問題なくマイグレーションできる。なお、Usersテーブルは、既存の以下ファイルにて作成済み。
・2014_10_12_000000_create_users_table.php

ユーザーとフォルダは1対多(フォルダとタスクも1対多)の関係なので、ユーザーモデルにh

【Laravel】公式のDocker環境Laravel Sailを起動するまで

Laravel公式のDocker環境“Laravel  Sail“を起動するまでの流れをまとめました。起動時によくあるエラーの解決方法も説明しています。

# ゴール
Laravel Sailを利用してLaravelのデフォルト画面を表示する。
![スクリーンショット 2022-03-07 23.29.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654760/d0179e0c-a2bb-946c-f4b5-9c41de6ebaed.png)

# 準備
Docker Desktopを起動してください。
インストールの方法は[こちら](https://docs.docker.jp/desktop/index.html#desktop-download-and-install)から。

# 検証環境
– macOS Catarina 10.15.7
– Docker Desktop 4.6.0

# インストール

[公式サイト](https://laravel.com/docs/9.x/ins

【PHP】参照渡しの配列の要素をunsetしても参照は解除されない

タイトルの通りです。
参照渡し(参照の代入)が推奨できるかはさておき、挙動の一例として参考にしてください。

# テストデータの作成
配列“$foods“を作成し、“$ref_foods“へ参照を代入します。

“`php
$foods = [
‘fruits’ => [
‘apple’,
‘orange’
],
‘vegetables’ => [
‘carrot’,
‘tomato’
]
];

$ref_foods = &$foods;
“`

代入後、“$ref_foods“と“$foods“は同じ内容を指します。
“`php
var_dump($ref_foods);
/*
array(2) {
[“fruits”]=>
array(2) {
[0]=>
string(5) “apple”
[1]=>
string(6) “orange”
}
[“vegetables”]=>
array(2) {
[0

日付を取得する方法

・日付を取得する方法
コード
“`php
‘;
}
“`
`strtotime(‘+’ . $i . ‘ day’)`
文字列を`$i`日後の時間に変換

`$day = date(‘n/j(D)’, $time)`
月/日(曜日)の形で`$time`の日付を`$day`に代入

現在時刻を表示する方法

・現在時刻を表示する方法
①構造化プログラミング
コード
“`
date_default_timezone_set(‘Asia/TOKYO’);
echo ‘現在の時刻は、’ . date(‘G時 i時 s秒’) . ‘です’;
“`
現在時刻を取得するにはdate()を使う。
`date_default_timezone_set(‘Asia/TOKYO’)`で日本時間を取得するように設定している。
`echo`で表示するようにして初めて表示される。(`date()`は時間を返すだけ)

②オブジェクト指向
コード
“`
$today = new DateTime();
$today->setTimezone(new DateTimeZone(‘Asia/Tokyo’));
echo ‘現在の時刻は、’ . $today->format(‘G時 i分 s秒’);
“`
日本時間の設定方法が異なる。

「’」や「”」をechoで表示したいとき

・「’」や「”」をechoで表示したいとき

「I’m from Japan.」と表示したいとき、
“`
echo ‘I’m from Japan.’;
“`
では、シングルクォーテーション(‘)とアポストロフィー(‘)が同じ記号であるためエラーとなる。

これを解決する方法を載せておく。

①文字列をダブルクォーテーション(“)で囲む
“`
echo “I’m from Japan.”;
“`

②エスケープシーケンスを使う
“`
echo ‘I\’m from Japan.’;
“`

PHPのreadfile()でファイルサイズが大きいzipファイルをダウンロードできなかったためfopen()-fread()にした話

PHPのreadfile()でファイルサイズが大きいzipファイルをダウンロードできなかったためfopen()-fread()にした話

#修正前
“`php
readfile($zip_name);
“`

#修正後
“`php
$handle = fopen($zip_name, ‘rb’);
while (!feof($handle)){
echo fread($handle, 4096);
ob_flush();
flush();
}
fclose($handle);
“`