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

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

PHP7.4で、$_SESSIONとACPuはどのようにキャッシュされるのか

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|—|

PHP7.4での値渡しと参照渡しについて、もう少し調べてみた。`$_SESSION`や`ACPu`で保持した場合、値はコピーされるのか、参照として取得できるのか。

前回、「[PHPのforeachでは、多くの場合、参照渡しの方がいい?](https://qiita.com/taconana/items/e1a568de0b39b60c4dce)」でforeachにおいて、配列要素がユーザー定義のクラスをインスタンス化したオブジェクトの場合、値渡しにしても参照渡しになることを確認した。もちろん、配列要素が整数などプリミティブな型、文字列、配列の場合、値渡しにするとコピーされることも確認した。

## foreachでの値渡しと参照渡しの確認

再度、復習を兼ねて確認しておく。ユーザー定義のクラスをインスタンス化したオブジェクトとして、Userクラスを使う。`$name`という属性を持たせている。以下の4つが確認できる。

– 配列要素がUser

元記事を表示

【PHP基礎⑮】ループ処理-5. 2ずつカウントアップ

[問題]
整数値を入力させ、0から入力値を超えない値まで2ずつ増やして表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
for($m = 0; $m < $a; $m = $m+2){ echo "$m \n"; } ``` ↓「10」と入力 # 結果 ``` 0 2 4 6 8 ``` ↓では、入力値から0を下回らない値まで2ずつ減らす場合は? ```php $a = intval(fgets(STDIN)); for($m = $a; $m > 0; $m = $m-2){
echo “$m \n”;
}
“`

結果
“`
10
8
6
4
2
“`

☆2ずつ減らす場合の増減式は、
 $m = $m-2 または$m-=2

元記事を表示

IoTのプロダクトを作りたくてG’s ACADEMYに入った変わり者の制作記録

# 始めに、
はじめまして、 G’s ACADEMY(ジーズアカデミー)TOKYO LAB12期のI_Tetsuと申します。
この記事では私がジーズアカデミー LABコース6ヶ月間で制作したプロダクトの中から、
JS選手権、PHP選手権、卒業制作で制作したプロダクトを紹介したいと思います。
(JS選手権、PHP選手権とはそれぞれ一通りの講義の後に行われる選手権で、そこまでに学んだことを活かして制作したプロダクトを発表し、発表の際に投票で順位まで決める発表の機会です。)
※ジーズアカデミーでの講義内容や経験談等は他の方がQiitaやnoteで書かれているのでそちらを参考にしてください。
ykiyoshimaさんのnote:[ジーズアカデミー現役生が前半戦(BOOTCAMPフェーズ)を終えて感じたこと](https://note.com/ykiyoshima/n/n03c5d256d449)

前提として、ジーズアカデミーでは**IoT**に関する講義は**ありません。**

元記事を表示

【Zoom API】クラウド録画をPHPで一括ダウンロードする

この記事は、[「Qiita Engineer Festa 2022」](https://qiita.com/official-campaigns/engineer-festa/2022)に参加するために執筆した記事です。

[**Zoom API/SDKを使ってみよう! – Qiita**](https://qiita.com/official-events/86d8555146e1b14fef24)
‘**Zoom APIを実装してみた**’のテーマで執筆します!

# 環境
– PHP8.0
– Composer 2.3.5

# こんな人に読んでほしい
– Zoomにクラウド録画が溜まってきた
– 期間を指定して、ローカルに一括でダウンロードしたい
– ダウンロード時にフォルダ作成、ファイル名もわかりやすく付けたい

# ごあいさつ
はじめまして。KeiOTNです。福岡の小さな会社でコード書いたり事務作業したり何でも屋さんしています。プログラミング歴は約1年。実は、Qiita記事を投稿するのは初めてです。
「アウトプットしなければ、、」と思いつつきちんと記事にまとめることをしてこ

元記事を表示

オリジナルアプリのデータベース登録で、createを使った。

オリジナルアプリのデータベース登録で、悩みに悩み試しにcreateを使ってみることにしました。

# モデルにfillable属性を追加
“`Playerdata.php

元記事を表示

【Zoom API】クラウド録画をPHP curlでダウンロードする(Postman併用)

# 環境
PHP 8.0

# 準備
### 1. JWTトークン発行
[Zoomマーケットプレイス](https://marketplace.zoom.us/)でJWTトークンを発行してください。
私が参考にさせていただいた記事は[こちら](https://qiita.com/yosuke-sawamura/items/d8ec07ac8b7b0335a22b)です。

定期的に動かす場合は、プログラム側でJWTトークン生成した方が良いです。当初、生成する方針で進めていましたが、エラー解消できず、今回はZoomマーケットプレイスから発行しました。
参考: [https://qiita.com/gentuki/items/d64f15447cb556eafd3b](https://qiita.com/gentuki/items/d64f15447cb556eafd3b)

### 2. ZoomユーザーIDを取得
postmanを使用してユーザーIDを確認しました。postmanの使用方法については省略します。
[ZoomAPIテンプレート](https://www.postman.c

元記事を表示

php で csv を読み込む上での備忘録

# はじめに

仕事で Laravel 内でcsv を読み込むコードを作成したのでその上で知ったことに関して備忘録代わりにこちらで記載しておきます。

# Shift-JIS な CSV を読み込む

windows 向けを前提とした CSV の場合、 **Shift-JIS** の CSV を扱うことになるかと思います。

その際、php 側は utf-8 で動いているような状態であるなら、当然ながら文字コードの変換が必要になります。

php において文字コードの変換の手法はいくつか存在しますが、保存されているファイルを読み込むような場合においては、以下の様に書くことで一行で文字コードの変換フィルターをかけたうえで読み込むことができます。

“`php
$path = ‘(本来のCSVファイルのパス)’;
$file = new \SplFileObject(‘php://filter/read=convert.iconv.cp932.utf-8/resource=’ . $path);
“`

“`php://filter“` については **php 入出力ストリーム*

元記事を表示

【PHP】期間を指定すると、月初と月末を返してくれる関数を作ったよ

# 環境
php 8.0
# この記事の内容
開始年月YYYY-mmと終了年月YYYY-mmを渡すと、月初日と月末日を配列で返す関数をPHPで作りました。
“`php:例
//例えばこんな値を渡すと
$from = ‘2021-04’;
$to = ‘2022-03’;

//こんな配列が返ってきます
[
[‘2021-04-01′,’2021-04-30’],
[‘2021-05-01′,’2021-05-31’],
[‘2021-06-01′,’2021-06-30’],
[‘2021-07-01′,’2021-07-31’],
[‘2021-08-01′,’2021-08-31’],
[‘2021-09-01′,’2021-09-30’],
[‘2021-10-01′,’2021-10-31’],
[‘2021-11-01′,’2021-11-30’],
[‘2021-12-01′,’2021-12-31’],
[‘2022-01-01′,’2022-01-31’],
[‘2022-02-0

元記事を表示

【PHP基礎⑭】ループ処理-4.カウントダウン

[問題]
整数値を入力させ、入力値から0まで数を1ずつ減らして表示するプログラムを作成しなさい。
なお、入力値に0以下の値を入力した場合は考慮しなくてもよい。

# コード
“`php
$a = intval(fgets(STDIN));
for($m = $a; $m >= 0; $m–){
echo “$m \n”;
}
“`

↓「7」と入力

# 結果
“`
7
6
5
4
3
2
1
0
“`

☆1ずつ減らす→ $m–

元記事を表示

【PHP基礎⑬】ループ処理-3.カウントアップ

[問題]
整数値を入力させ、0から入力値まで数を1ずつ増やして表示するプログラムを作成しなさい。
なお、入力値に0以下の値を入力した場合は考慮しなくてもよい。

# コード
“`php
$a = intval(fgets(STDIN));
for($m = 0; $m <= $a; $m++){ echo "$m \n"; } ``` ↓「7」と入力 # 結果 ``` 0 1 2 3 4 5 6 7 ```

元記事を表示

【PHP基礎⑫】ループ処理-2

[問題]
整数値を入力させ、その値の回数だけHello Ruki!を繰り返して表示するプログラムを作成しなさい。

# コード
“`php
$a = intval(fgets(STDIN));
for($m = 1; $m <= $a; $m++){ echo 'Hello Ruki!',PHP_EOL; } ``` ↓「5」と入力 # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! ``` ☆$m++は$m=$m+1と同じなので、  2ずつ増やしたい時は$m = $m+2とする。  または、$m+=2 でもOK。 ↓ 2ずつ増やした場合(入力値は「5」) ```php $a = intval(fgets(STDIN)); for($m = 1; $m <= $a; $m = $m+2){ echo 'Hello Ruki!',PHP_EOL; } ``` 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! ```

元記事を表示

dockerを使ってサクッとPHPとMySQL環境を手に入れる

ちょっと何かを試したいときdockerは便利です。
環境構築と破棄を気軽にできるからです。
というわけで今回は、dockerでサクッと作れるPHPとMySQL環境を作ってみようと思います。
何かを検証したいときにこういった環境を手軽に作れると時短になるので便利です。

# ディレクトリ構成
“`
./
│ docker-compose.yml

├─app
│ └─htdocs
│ index.php

└─docker
├─db
│ │ Dockerfile
│ │ my.cnf
│ │
│ └─init
│ 1.create-db.sql
│ 2.grant-user.sql
│ 3.create-table.sql
│ 4.insert-data.sql

└─web
Dockerfile
php.ini
“`

# 各ファイルの説

元記事を表示

【Laravel】Mailable jsonを受け取りメールを送信するAPIを作る

Mailableを使ったメール送信方法を試してみました。
今回は外部から以下に記述するJSONをPOSTで受け取り、JSONに記述されているメールアドレス(email)宛に内容(name, body)をメール本文に記述して送信するというAPIを作成します。GmailのSMTPサーバーを使用します。

#### 受け取るJSONファイル
“`json:json
{
“name”:”example name”,
“email”:”target@xxxxxx.com”, //送り先のアドレス
“body”:”test body”
}
“`

## .env の編集
.envファイルにGmailのSMTPサーバーを使う設定を行います。
事前にGmailのアプリパスワードを生成する必要があります。
参考: https://pc-karuma.net/google-account-generate-app-password/

“`
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxx

元記事を表示

オリジナルアプリ作成進捗(スクレイピング処理記述もあと少し)

オリジナルアプリ作成も終盤に入り、スクレイピング処理の記述ももう少しのところまで来ています。

# スクレイピング処理のコードはこんな感じです。
“`ScrapingController.php
request(‘GET’, ‘https://baseball.yahoo.co.jp/npb/teams/3/memberlist?kind=p’);
$info = $crawler->filter(‘.bb-playerTable__row’)->eac

元記事を表示

サブドメインを使ってPHPを動作させる方法

|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|

既存のサーバー、既存のドメインで httpd + Tomcat が動作している環境で、テスト的にPHPを試してみたい場合の最も簡単な方法は、サブドメインを使う方法かなと思う。例えば、既に kankeri.com で httpd + Tomcatが動作している場合、Tomcatに干渉しないでPHPをテストしたいときは、php.kankeri.com のようなサブドメインを使うと非常に簡単である。

ただし、委任先のDNSサーバにサブドメインを追加する作業が必要であり、反映されるまで若干待つかもしれない。CNAMEを1行追加するだけである。以下の感じである。

“`
php CNAME kankeri.com.
“`

そして、httpdのVirtualHostに php.kankeri.com:80 を追加する。以下の感じである。例えば、vhost-php.conf を作成して記述する。phpのコードは、/opt/php74/webap

元記事を表示

LaravelのMigrationで外部キーを使用したら、エラー発生

Laravelのmigrationをしようとした際、
![スクリーンショット 2022-06-21 12.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1714247/3b636871-dc53-ecf2-8e47-8d524384ca30.png)

“`
SQLSTATE[42000]: Syntax error or access violation: 1702 Key column ‘categoryId’ doesn’t exist in table
“`
というエラーにハマってました。

## 解決方法
unsignedBigIntegerを外部キー参照している前の行に記入!
“`php:unsignedBigInteger.php
$table->unsignedBigInteger(‘categoryId’); //ここ
$table->foreign(‘categoryId’)->references(‘categoryId’)->on(‘category’)->on

元記事を表示

PDOで「Packets out of order. Expected 1 received 0」のワーニングが出る

|[../](https://qiita.com/taconana/items/d382d08a83a2a67f3b6a) |
|—|

CentOS Stream 8でPHP7.4からPDOでMySQL8.0に接続する際に「Packets out of order. Expected 1 received 0」のワーニングが出る時がある。毎回確実に出る訳でもなく、どのような状況の時に出るのかは判明できていない。心当たりのある原因を後述しておく。

“`
PHP message: @@ enter getUsers(‘admin’,false)
PHP message: @@ new UserManager()
PHP message: @@ new UserDataAccessor()
PHP message: @@ PersistenceBase::__construct()
PHP message: @@ PersistenceBase::pdo = null
PHP message:
PHP Warning: Packets out of order. Expect

元記事を表示

LINEで送るのタグの改行をする

aタグでlineで送るボタンをカスタムしたボタンで実装したい。
しかもメッセージは長めなので改行する必要性がある。
と言う時に、\nの改行コードではダメだった。

## 前段として
LINEで送るをリンクで実装する場合の事なので
“`php
リンク先
“`
のような書き方になり、$hensu部分にエンコードした文字列を入れる。
しかし改行コードが\nだと動かない。

“`php:解決策
$kaigyou = utf8_encode(“%0d%0a”);
$hensu = “こんにちは”.$kaigyou.”改行します”;
“`
とした場合にLINEメッセージで得られる出力は
“`
こんにちは
改行します
“`
と言う事になる。

改行コードを明示的にutf8でエンコードしたら解決出来たと。

元記事を表示

【Laravel】Middleware は設定する場所によって実行される順番が異なる

# はじめに
以前Laravelのミドルウェアを用いてLaravel内部で作成したAPIのレスポンスを返す前にログをDBへ記録しようとした際に、ミドルウェアの順番の問題によってかなり手間取ってしまったことがありました。
そのため一度Laravelのミドルウェアの順番に関して把握しておくべきだと考え、調べてみました。
# 環境
OS: Ubuntu-20.04 (Windows 10 の WSL2 上に設置)
PHP: 8.0.10
Laravel: 8.61.0
# 検証に使用するミドルウェアの中身
Laravelのミドルウェアは、リクエストがアプリケーションによって処理される**前**にタスクを実行するものと、リクエストがアプリケーションによって処理された**後**にタスクを実行するものの2種類があります。

今回はミドルウェアの順番を調べるため、storage/logs/laravel.logにデバッグログを出力するミドルウェアを作成します。ログの内容はミドルウェア名とします。

## リクエストがアプリケーションによって処理される前にログを記録するミドルウェアの例
“`app/

元記事を表示

【PHP基礎⑪】ループ処理-1.for文とwhile文

[問題]
Hello Ruki!を10回繰り返して表示するプログラムを作成しなさい。

1.for文の場合
# コード
“`php
for($a = 1; $a <= 10; $a++){ echo "Hello Ruki! \n"; } ``` # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! ``` 2.while文の場合 # コード ```php $a = 0; while($a < 10){ echo 'Hello Ruki!',PHP_EOL; $a++; } ``` # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello

元記事を表示

OTHERカテゴリの最新記事