PHP関連のことを調べてみた2020年08月14日

PHP関連のことを調べてみた2020年08月14日
目次

Laravel x GAS API で Spreadsheet 自動作成してみた

# はじめに
実務で、GAS(Google Apps Script)を使って Spreadsheet 作成APIを作ったので、そのやり方を書く。
今回は、Laravel の Guzzle を使って APIを叩いたので、そのテンプレも書くことにした。

ここでは、clasp などのコマンドラインでの作業の説明は割愛する。

# Guzzle テンプレート

“`php
$client = new \GuzzleHttp\Client();

url = https://script.google.com/a/XXXX.co.jp/macros/s/XXXXXXXXXXXXXXXXXXXXXXXX/exec

$sheets = [‘[シート名]’ => [[‘名前’, ‘Soma’, ‘Sekimoto’],[‘住所’, ‘Tokyo’, ‘Suginami’], [‘年齢と性別’, ‘ 23歳’, ‘男’]]]

$res = $client->post(
$url,
[\GuzzleHttp\RequestOptions::JSON

元記事を表示

docker-compose を用いて Apache・PHP・MySQL の開発環境を構築してみた

# はじめに

docker-compose を用いて Apache・PHP・MySQL の開発環境を構築してみた備忘録になります。

docker-compose はインストールされていることが前提になります。
今回は以下のバージョンでの動きになります。

“`shell
$ docker-compose -v
docker-compose version 1.26.2, build eefe0d31
“`

# ディレクトリ構造

ディレクトリ構造は以下のようになります。

“`shell
.
├── config
│   ├── mysql
│   │   ├── Dockerfile
│   │   ├── initdb.d
│   │   │   └── init.sql
│   │   └── my.cnf
│   └── php
│   ├── Dockerfile
│   ├── apache2.conf
│   ├── php.ini
│   └── sites
│   ├── 000-default.conf

元記事を表示

PHPで「ここはis_null?empty?isset?」ってなったので比較してまとめた。

is_null?empty?isset?ってなることが多々あったので、比較実験した。

## 実験内容
それぞれに以下を与えて結果を取得する。

* $string; //変数を宣言するだけ
* $string = ‘test’; //文字列
* $string = null; //null
* 未定義の変数
* 空文字

最終結果はページの最後に表にしています。

## is_null()
変数がNULLかどうか調べる。つまり、**null**ならば**true**が、それ以外であればfalseが返ってくる。

“`php
$string;
is_null($string); // true
“`

“`php

$string = ‘test’;
is_null($string); // false
“`

“`php

$string = null;
is_null($string); // true
“`

“`php

//定義していない $a
is_null($a); // true
“`

“`php

//空文字
is_null(”); // f

元記事を表示

PHP・GCの話-2話)変数の管理情報、zval containerとreference count

## 前書き

– すべての記事は、自分の勉強目的と主観の整理を含めています。あくまで参考レベルで活用してください。もし誤った情報などがあればご意見をいただけるととっても嬉しいです。
– 内容では、省略するか曖昧な説明で、わかりづらいところもあると思います。そこは、連絡いただければ補足などを追加するので、ぜひ負担なくご連絡ください。
– 本文での「GC」は、「Garbage Collection, Garbage Collector」の意味しており、略語として使われています。
– この記事は、連載を前提に構成されています。

**※ 連載目録**
> – [PHP・GCの話-1話)なぜGarbageCollection? メモリとGCを意識する](https://qiita.com/genie-oh/items/e6dfc49fb9899f931271)
> – PHP・GCの話-2話)変数の管理情報、zval containerとreference count (←現在の記事)
> – PHP・GCの話-3話)変数データのメモリからの消滅 ⇨ 準備中
> – PHP・GCの話-4話)

元記事を表示

【PHP】usortと比較演算子<=>を使ってクラスのプロパティでソートする

PHPでクラスのプロパティを見てソートしたい時とか
複数条件でソートしたい時に

PHP7以上で動く(多分)

たとえばこんなクラスがあって

“`php
class Player
{
public $name;
public $age;
public $level;

public function __construct($name, $age, $level)
{
$this->name = $name;
$this->age = $age;
$this->level = $level;
}
}
“`

こんな配列があったとする

“`php
$players = [(new Player(“p1”, 35, 1)),
(new Player(“p2”, 20, 2)),
(new Player(“p3”, 15, 1)),
(new Player(“p4”, 15, 3))];
“`

# 昇順でソート

元記事を表示

GAEスタンダード環境でMemorystore for Redisを使う(Laravel)

Redisの使い方とローカル環境に関しては割愛。

## Laravelにpredisを追加

“`bash
composer require predis/predis
“`

## redisを設定

GCPの管理画面からインスタンスを作成。
リージョンはGAEと同一にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533120/675275b8-f0fb-2811-3712-3cecbc07cb37.png)

作成後、IPアドレスとポートをメモっておく。

## サーバーレス VPC アクセスを作成

GCPの管理画面からコネクタを作成。
リージョンはGAEと同一にする。IP範囲は10.8.0.0でいいらしい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533120/1658d037-9fa8-b03a-5f6f-5532014cd776.png)

作成されたら、コ

元記事を表示

Laravel Validator 複数の日付フォーマットに対応したい場合

# やりたいこと
Laravelのバリデーションで複数のフォーマットを許可するバリデーションを書きたい。

具体的には
– 2018/01/01 (Y/m/d)
– 2018/1/01 (Y/n/d)
– 2018/01/1 (Y/m/j)
– 2018/1/1 (Y/n/j)

のどれかでだったらOKというバリデーションが書きたかった。

※そもそもなんでそんな状況になる? というのは触れずに。。。

# 前提
Laravel 5.5
PHP 7.2

# 解決方法
複数記載できるバリデータを作成した。
フォーマットのチエック処理は本家に合わせた
→[本家 date_formatバリデータの実装](https://github.com/laravel/framework/blob/5.5/src/Illuminate/Validation/Concerns/ValidatesAttributes.php#L353)

“`php:app/Rules/DateFormats.php

元記事を表示

Codeceptionでセンシティブな情報を.envから取得する

## テストコードにパスワードを直書きしたくない
“`php:AdminLoginCept.php
$I = new AcceptanceTester($scenario);
$I->wantToTest(‘管理画面にログイン’);

$I->amOnPage(‘/admin/’);
$I->seeCurrentURLEquals(‘/admin/login’);
$I->fillField(‘login_id’, ‘hideki’);
$I->fillField(‘password’, ‘hidekisuteki’); // ?
$I->click(‘ログイン’);
$I->seeCurrentURLEquals(‘/admin/’);
“`
– 直書きせずに、環境変数ファイルから取得する方法があるはずと思って調べたのですが、思ったより面倒だったので書き残しておきます。

## Codeception Config Module をインストール

– [JustBlackBird/codeception-config-module](https://github.com/Just

元記事を表示

belongsToManyの引数

#用途
多対多の関係を持たせるためのメソッド
#引数に何を入れるか
usersとrolesが多対多の関係を持っている
Userのモデルに記載するbelongsToManyの書き方

“`
belongsToMany(‘User側の外部キーがあるテーブルがあるクラス名’,
‘User側の外部キーがあるテーブル名’,
‘リレーションを定義しているモデル(User)の外部キー名’,
‘結合するモデルの外部キー名’)
“`

元記事を表示

DBにてデータ登録時に入力必須ではないカラムの処理の仕方

#1 想定ケース
PHPでメンバーがログインしてメッセージを投稿するという機能を実装すると想定。投稿データはpostsというDBに保存します。
『よくわかるPHPの教科書 【PHP7対応版】 』(マイナビ出版)p267ページで躓いたことによる学びをメモします。

##1-1 投稿を保管するデータベース

| カラム |位置付け |設定|
|:—————–|:——————-|:——————|
|id|ID|INT、プライマリーキー、オートインクリメント|
|message|ユーザーが投稿したメッセージ|TEXT|
|member_id|ユーザーID|INT|
|**reply_post_id**|**投稿が別の投稿への返信だった場合、その別の投稿のID**|INT|
|created|投稿日時|DATETIME|

reply_post_idは、投稿が返信だった場合のみ発生するので、これだけ必須項目ではないという状況です。そのようなカラムをどう処理するかという記事です。

##1-2 投稿をDBに登録するPH

元記事を表示

DockerのLAMP環境でPHPからMySQL接続に詰まった話

# Dockerで環境作るの一瞬で便利だよね

下のブログを参考にLAMP環境を作りました。厳密には、Linux使わずDockerだからDAMPだね。
[Docker で Apache \+ PHP \+ MySQL 環境構築 – WebSpaceBlog](https://webspace.jp/blog/229/)

ブログよりも簡略化しています。

## Docker-compose.yml

参考ブログと同じにしたので割愛

## フォルダ構成
/
├─mysql
│ ├─data
│ │ ├─mysql
│ │ ├─performance_schema
│ │ ├─sys
│ │ └─test
│ └─init
├─php
│ ├─Dockerfile
│ └─php.ini
└─www
└─html

## php/Dockerfile

もう最小限です。

“`
FROM php:7.1.5-apache
RUN apt-get upd

元記事を表示

EC-CUBE2.17でendroid/qr-codeの最新バージョンがインストールされない

# はじめに
EC-CUBE2.17環境で、composerでendroid/qr-codeを入れようとした際に最新バージョンがインストールされなかった場合の対処法です。

## やりたいこと
– EC-CUBE2.17のマイページにQRコードを表示したい

# endroid/qr-code
## インストール

Packagist:https://packagist.org/packages/endroid/qr-code

“`shell
$ composer require endroid/qr-code
Using version ^1.9 for endroid/qr-code
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 4 installs, 17 updates, 19 removals
– Removi

元記事を表示

PHPで動的変数(可変変数)を扱う

#変数を動的に作成する(可変変数)
変数を動的に作成したら楽なのにな…と思うけど案外使っている方が少なかった?ので記録として。
例えばPHPの場合、変数の初期化宣言をしなくても代入を書いてしまえば使えてしまうわけですが、以下のように初期化宣言している場合です。

“`test.php
$apple = “”;
$peach = “”;
$grape = “”;
“`
上記のような例はよく見られると思います。
場合によってはもっと多くの変数を宣言しないといけない…なんて事もあるかもしれません。
これを動的に作成する方法は以下のようになります。

“`test_arr.php
$arr = array(
“apple”,
“peach”,
“grape”
);

foreach ($arr as $value) {
${$value} = “”;
}
“`

`${}`の中にforeachでloopしたvalueを入れてあげることでtest.phpとやっていることは同じになります。
コード量増えたじゃん!って思うかもですが、稀にtest.phpのように初期化処理を行

元記事を表示

ウクライナではPHPエンジニアの採用にいくらかかるのでしょうか?

現代のプログラミングの世界では、選択できるプログラミング言語がたくさんありますが、PHPはおそらく最も古い言語の1つであるにもかかわらず、今なお人気があります。 PHPは1994年にRasmus Lerdorfによって作成されました。当時は、Cと呼ばれる別の優れたプログラミング言語によって作成されたCGIバイナリのセットにすぎませんでした。しかし、長年にわたって人気を集め、より大きなものに成長してきました。

簡単に言えば、PHPはWeb開発で使用される言語の1つです。 PHPはプログラミング言語であり、主に以下の3つの分野で使用されています。

・サーバー側のスクリプト:これはPHPの主な目的です。サーバーによって処理され、クライアントがその結果を受け取ることはPHPの主な機能になっています。そして、クライアント側でアクションの論理を見ることはできません。
・コマンドラインスクリプト:PHPの優れたところは、サーバーやブラウザーなしで実行できることです。必要なのはPHPパーサーだけです。私たちはWindows向けのタスクスケジューラーをお勧めします。
・デスクトップアプリケーションの

元記事を表示

Laravel で Docker 使って開発したいなら Vessel にしておこう

[Vessel](https://vessel.shippingdocker.com/) そこそこ使ってる人はいるんだろうけど、 [Laradock](https://laradock.io/) 使ってツラいことになってる人がそこそこいそうなので [Vessel](https://vessel.shippingdocker.com/) 使うと楽だよということをに書いておきます。

# Vessel とは

[Vessel](https://vessel.shippingdocker.com/) は簡単に下記環境を Docker で作成することができます。

– PHP7.4
– MySQL 5.7
– Redis
– NodeJS, NPM, Yarn, Gulp

ちょっと自分の環境にあわない(例えばデータベースに PostgreSQL を使っている等)場合は書き換えることができます(各種ファイルがコピーされるだけなので)。おおむね、PHP, データベース, キャッシュストレージ, NodeJS があれば 8〜9 割くらいの現場ではフィットするんじゃないでしょうか。

# 使用にあた

元記事を表示

laravel SQLSTATE[HY000] [2002] Connection refused

###SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = laravel and table_name = migrations and table_type = ‘BASE TABLE’)エラー対処

メモ

.envの修正もしたのに解決しなかった場合、下記コマンド実行したら解消しました。

“`
php artisan key:generate
php artisan cache:clear
php artisan route:clear
php artisan config:clear
php artisan view:clear
“`

元記事を表示

Dockerでpostgresとpgweb(GUI)を構築した

DockerによるPHP、Apache、PostgreSQLの開発環境を構築した時の流れをまとめようと思います。

また、データベース管理インタフェースを使うと直感的に操作できて便利なので、PostgreSQLについてはモダンなUIであるpgwebも導入してみます。
## 環境
– Mac for Docker
– Apache2.4
– PHP7.1
– PostgreSQL9.6

## 構成
スクリーンショット 2020-08-11 12.15.42.png

## ファイル群
docker/web/Dcokerfileに以下を記述します。

“`docker/web/Dockerfile
FROM php:7.1-apache

COPY ./php.ini /usr/local/etc/php/

RU

元記事を表示

[PHP] 簡易ログインアカウント登録機能を実装してみた

### はじめに
前回の記事でログイン機能を実装しました。
**https://qiita.com/N46_myHearter/items/ae4f776790c4c4666a66**

この記事では、ログインする際に使用するアカウントをデータベースに登録する機能を実装してみたいと思います。

**基本的な流れ**
 1. 登録するユーザ情報(ID、パスワード、ユーザ名)を入力します。
 2. 入力値チェックを行う。
 3. ユーザ情報をDBに登録する。

簡易なので…笑笑

### データベース
今回は、MySQLを使用しています。
データ項目は、**ID**、**パスワード**、**ユーザ名**の3つのみで構成しています。
プライマリーキーにIDを指定しています。
パスワードは、ハッシュ化で暗号化。(調べた時にハッシュ化だと簡単に出来たから笑笑)

### 該当ソースコード
#### 1. register.php

アカウントを登録するための入力画面です。
入力項目は、ID、名前、パスワード(確認のため2回入力)です。
入力項目すべて入力されているか、2回入力したパスワードが

元記事を表示

MW WP Formのお問い合わせデータを日付指定でフィルタする

普段あまりWordPress触らないのですが、急遽サポートで対応した内容になります。
調べても案外情報がなかったので、あまりそういう要件がないのかな。
※急ぎでの対応でしたのでもっと最善策があるかもしれません。

# 環境
WordPress 5.2
PHP 7.0.32
Apache バージョン不明

# MW WP Formとは
[MW WP Form](https://ja.wordpress.org/plugins/mw-wp-form/)

WordPressのフォームプラグイン。
簡単にフォームを構築できて、入力内容を保存、閲覧も可能な便利なプラグイン。

# 問題点
MW WP Formの管理画面では、フォームの入力内容を一覧で見ることができるが、その際にフィルタリングが「月指定」でしかできない。
そのため、これに「日付指定」を追加したい。
また、画面上のフィルタリングがCSVダウンロードに反映されない。

まとめると2点。

* 「月指定」のフィルタリングしかできない
* フィルタリングがCSVダウンロードに適用されない

上記2点を改善します。

# 改修内容

*

元記事を表示

お名前.comにて、拡張子htmlのままphpを動かす(レンタルサーバー RSプラン)

初投稿です。

今まで自分が利用したことのあるレンタルサーバーとは異なったため、サポセンに問い合わせたら

>お問い合わせの件につきまして、「.html」ファイルを別の拡張子で
>動作させる場合は.htaccessにて AddHandler など、「.html」ファイル
>をcgiとして実行いただく記述でご利用いただけます。
>
>なお、独自にご準備された.htaccessの設置についてはサポートを
>控えさせていただいております。
>
>具体的な記述や設定方法につきましては、市販の書籍や参考書など
>にてご確認くださいますようお願い申しあげます。

とのことでしたのでインターネットで調べたところ、Qiitaに有益な情報を見つけました。

参照元:[お名前.comにて、拡張子htmlのままphpを動かす](https://qiita.com/taguchinbo/items/bf560c3b6968f9fe69f3)

こちらはお名前.comでも共用サーバー SDプランのことなのか、レンタルサーバー RSプランだとこのままでは動作せず、どなたかが同じように悩んで時間を浪費しないようメモ

元記事を表示

OTHERカテゴリの最新記事