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

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

CarbonのaddSecondsとaddRealSecondsの違い

CarbonのaddSecondsとaddRealSecondsの違い

・addSecondsはミリ秒も保持されたまま秒数が追加される。
・addRealSecondsはミリ秒が削除されて秒数が追加される。

addRealSecondsはタイムスタンプベースの追加になる。タイムスタンプは秒単位なのでミリ秒は消える。

“`.sh
>>> $b = now(‘Asia/tokyo’)
=> Illuminate\Support\Carbon @1607132885 {#4267
date: 2020-12-05 10:48:05.334754 Asia/tokyo (+09:00),
}
>>> $c = $b->copy()
=> Illuminate\Support\Carbon @1607132885 {#4265
date: 2020-12-05 10:48:05.334754 Asia/tokyo (+09:00),
}
>>> $b->addSeconds(10)
=> Illuminate\Support\Carbon @1607132

元記事を表示

LaravelでShopifyアプリを開発する方法

# はじめに
Laravelを使ってShopifyアプリを作成してみたので、Laravelインストール〜ショップ管理画面でアプリとして表示するまでをご紹介します。

## 動作環境
Mac OS Catalina
PHP 7.3.24
Laravel Framework 8.17.2

## Laravel インストール
“`shell
$ composer create-project laravel/laravel –prefer-dist sample-app
“`

## PHP Shopify SDK インストール
Shopifyフォーラムでおすすめされていた[php-shopify](https://github.com/phpclassic/php-shopify)を選定しました。
全て確認はできていませんが、ほとんどのShopifyAPIを網羅していると思われます。

“`shell
$ cd sample-app/
$ composer require phpclassic/php-shopify
“`

## 認証URL作成
### コントローラ作成

元記事を表示

※学習用メモ デザインパターン:Facade編[PHP]

# Facadeパターンとはどういうものか

Facadeとは**建物の正面**という意味です。
このパターンは異なるサブシステムを単純な操作だけを持ったFacadeクラスで結び、サブシステム間の独立性を高める事を目的としています。(wikipediaより)

クラスやメソッドが多い際、どれを使えばよいか迷ったり、呼び出し順に注意する必要が生じます。
その際にFacadeパターンを用いることで、使用する側はその詳細を知る必要が無くなるので、シンプルな形で利用することができます。

[参考サイト]
https://ja.wikipedia.org/wiki/Facade_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
https://qiita.com/i-tanaka730/items/911604bcd4136684ff1c
https://www.techscore.com/tech/DesignPattern/Facade.html/

# Facadeパターンを用いるメリット

・処理の窓口を少なくすることで、複雑なものを単純に見せることができる

元記事を表示

Laravel5.5 Eloquentモデルでupdated_atカラムがないテーブルを使うとき

Laravelの便利な機能“Eloquent“を使う際に、使い勝手が言い分困った!っと感じたこととその対応。

テーブルにupdated_atカラムが必要ない時ってありますよね。
updated_atがないテーブルにEloquentを使って、DBに新規登録するとエラーが出ます!

カラムがないよ!ってアラートです。
しかし!!出てきても大丈夫!

“`モデル
const UPDATED_AT = null;
“`
これを、新規登録するテーブルのモデルにかけばOKです〜!

以上になります!
今回、updated_atに少し翻弄されてしまったので備忘録として書きました。
LGTM大好物なんで、ポチッと投げ銭感覚でおねがいします〜! :sunglasses:

元記事を表示

Hackのルーターを触ってみよう

# Hack-Router

今回は、[Hack-Router](https://github.com/hhvm/hack-router)を使って、
簡単にHTTPに関する処理を実装してみましょう。

Hackはライブラリが多くなく(むしろ少ない)、
ルーターはこのライブラリくらいしかありません。
ライブラリを作りたい方はすでにあるHackのライブラリを触って、
コードを読んでから作ってみると良いでしょう。
今回はそんな定番とも言えるルーターライブラリを触ります。

PHPと異なり、Generics、Enumsを利用していますので、
PHPしか利用していない方は少しばかり難しいですが、
大したことはありません。

## 開発環境の用意

手元にHHVMなんてないよ!という方は、
[HHVM(proxygen) 環境を構築してみよう](https://qiita.com/ytake/items/37319c68512aebf745b1)にありますので、
事前に準備しておきましょう。

## インストール

まずは前日の[[2020] HHVM/Hackの始め方 導入編](https://

元記事を表示

PHPでファイルをダウンロードする【作成中】

[PHPでファイルをダウンロードする方法とよくあるエラー](https://www.flatflag.nir87.com/force-download-833)
[PHPでファイルを開いて読み込む](https://qiita.com/tadsan/items/bbc23ee596d55159f044)

元記事を表示

PHPでの文字列送信方法

21803
項目表示の為には以下の項目を書く。
こんにちは。今回はPHPでのデータ送受信方法が分からないという人の為に説明します。

php>
ここのPOSTというのはデータ送信を示しています。もう一つGETという物が有りますが、このGETという物はURLのところの最後のところは相手側から送られてきたデータの事ですので、その内容が見えてしまいます。なので、データ送受信の際にはPOSTを使う事をお勧めします。
次にこのaction属性を使う事で送信先を指定することが出来ます。この場合ですとtestform.phpにデータを送信します。次にこのtypeについて説明します。このtypeで”text”と指定する事により、テキストボックスでデータを送信することが出来ます。
次に

元記事を表示

php artisan serveに任意のphp.iniを指定する方法

#結論
“`
php -c php.ini artisan serve
“`

#背景
php artisan serveで動かしている開発用のサーバー上で大きなファイルをアップロードする必要があり、実際にアップロードしたところIlluminate\Http\Exceptions\PostTooLargeException とエラーが出た。

ここはphp.iniを変更すれば通るだろうと考え、upload_max_filesizeとpost_max_sizeを変更したものの、なぜか同じエラー。phpinfoで確認すると値はきちんと更新されている。

#原因
いろいろ調べてみたところ、php artisan serveは別のphp.iniを読みに行っているということまでは判明。

#解決
ただ、どのphp.iniを読みに行っているのか分からない。

php.iniと同じディレクトリにphp-cli.iniを作成するとそれを読みに行ってくれるとか、その他色々な情報があったものの結局、動いたのは冒頭で示したやり方。

元々読みに行っていたファイルを変更したほうがスマートな気もするが、We

元記事を表示

Laravel ログインテスト

# Laravel Unitテスト
 ポートフォリオを作成して、ユニットテストを実行するまでの一連の流れを備忘録として記述します。
 作成したポートフォリオでは初期画面からホーム画面に遷移するのにログインする必要があるシステムでした。コントローラーのテストで下記のように実行してもエラーが表示された為、ログインテストを別で作成してモデルのテストを実行しました。

“`
pubulic function testBasicTest() {
$this->get(‘/home’)->assertStatusOk();
/// /homeにはログインが必要な為アクセスできない
}
“`

## 1.テスト用のDatabaseの準備
今回はMySQLを使用しました。使用するデータベースに応じてテスト用のデータベースを準備。

“`
$ mysql -uroot -p
$ ?(password入力)
mysql> create database データベース名
mysql> show databases
    今回作成したデータベースがあるか確認
mysql> exit
`

元記事を表示

windows php file grep 方法

php -i | find ‘”fileinfo”‘

元記事を表示

フレームワーク各種ローカルサーバ接続用コマンドチートシート

いろいろなフレームワークを、centOS7で接続するときに便利なローカルサーバ接続用のコマンド集です。ローカルホスト接続はよく見るのですが、この条件を毎回調べるのが面倒なので、今までにテスト起動した上で備忘録としてまとめたものです。

※随時修正

#①PHP編

##1:Laravel8
デフォルトポートは8000

プロジェクトに遷移し、以下のサーバ起動コマンドを打ち込む

“`
#php artisan serve –host 0.0.0.0
“`

**192.68.11.xx:8000**

##2:cakePHP4
サーバ起動不要

**192.168.11.xx/プロジェクト名/index.php**

##3:CodeIgniter4
サーバ起動不要

**192.168.11.xx/プロジェクト名/public**

##4:Symfony4
デフォルトポートは8000

“`
#php bin/console server.run 0.0.0.0
“`

**192.168.11.xx:8000/**

##5:Yii2
デフォルトポートは8000

元記事を表示

PHP 連想配列の値とキーを取得する方法

# 目的

– 連想配列に格納された値とそのキーを取得する方法をまとめる。

# 前提情報

– 下記サービスを用いて動作を確認した。
– [https://paiza.io/ja](https://paiza.io/ja)
– 超基礎の内容であるが理解できていなかったのでまとめる。

# 詳細

– 下記のようにforeach文を使用することで値とキーを取得する事が可能である。

“`php
‘こんにちは’,
‘str2’ => ‘おはようございます’
];

foreach ($strList as $key => $value){
echo “キーは $key” . “\n”;
echo “値は $value” . “\n”;
}
?>
“`

– 上記のコードを実行すると下記のように出力される。

“`
キーは str1
値は こんにちは
キーは s

元記事を表示

※学習用メモ デザインパターン:Decorator編[PHP]

# Decoratorパターンとはどういうものか

Decoratorとは**装飾者**という意味です。
このパターンは既存のオブジェクトを新しいDecoratorオブジェクトでラップすることで機能やその状態の拡張を実現します。
また、ラップされていることで、基の状態を維持する事につながり、1つのベースに対して状態のバリエーションを作り出す事も出来ます。

>Decoratorパターンの方針は、既存のオブジェクトを新しいDecoratorオブジェクトでラップすることである。その方法として、Decoratorのコンストラクタの引数でラップ対象のComponentオブジェクトを読み込み、コンストラクタの内部でそのオブジェクトをメンバに設定することが一般的である。(wikipediaより)

[参考サイト]
https://ja.wikipedia.org/wiki/Decorator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
https://www.ritolab.com/entry/132
https://qiita.com/i-tanaka730/ite

元記事を表示

PHPでの入力フォーム作成

#PHPでの入力フォーム作成について

以下のような入力フォームをPHPで作成し、
別ファイルへ出力するようにした。

![スクリーンショット 2020-12-03 20.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794525/49907ce2-4028-3adc-c667-c57eb815977c.png)

ソースコード(ファイル名index.php)

“`






Document

名前: 最近やったことのメモ(MVVM, asyncとdefer)

#MVVM
Webサービスの設計思想(ソフトウェアアーキテクチャ)
MはModel、VはView、VMはViewModelのこと

View -> View Model -> Model の順

役割でいうと、
表示 → 表示するために値の取得と加工 → 値  こんな感じ?

View Modelが値と表示の間を取り持ってくれます。超優秀ですね☆

#asyncとdefer
JavaScriptファイルの非同期での読み込み
“`
“`

asyncとdeferどちらもドキュメントのパース中にスクリプトをダウンロード実行。

async・・・パースが完了前に実行。asyncスクリプトの実行は必ずしも順番通りではない。
defer・・・パース完了後に実行。deferスクリプトの実行は順番に行われる。

スクリプトが独立 → async
スクリプトが依存 → defer

#今日の名言
Perfection is

元記事を表示

HHVM(proxygen) 環境を構築してみよう

# HHVM構築

ひと昔前はHHVMを用意するのにも大変な時代がありましたが、
現在はDockerを利用して簡単に構築することができます。
今回は一からHHVM開発環境を作成してみましょう!

HHVMのコンテナ自体はDocker Hubにて公式が公開しています。

[hhvm/hhvm-proxygen](https://hub.docker.com/r/hhvm/hhvm-proxygen/)

本番運用などを考えると、fastcgiで動かすメリットはあまりありません。
proxygenを利用することで、HHVM自体の管理機能やパフォーマンス面でもアドバンテージがあります。
(実際のコンテナ運用ライクな内容は別で紹介します。)

GCP/AWSなどで運用する場合はhhvm-proxygen単体でも十分ですが、
今回はNginxをフロントに置き、upstreamでhhvm-proxygenに流す構成にします。
(log収集などもそちらの方が楽でしょう!)

## HHVM container

まずはhhvm/hhvm-proxygen:latestを利用します。

“`dock

元記事を表示

技術備忘録【composer・環境変数設定】

自分自身の学習記録として記録しています。

今回は「Composer」についてです。
![Logo-composer-transparent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568321/6bdfa09c-1987-c7ec-0aec-2701eeca8773.png)

公式サイト:https://getcomposer.org/

composerはパッケージ管理ツールです。

どういう事かというと、
何かしらのWebサービス等を開発する際に、
先人達が開発した「ライブラリ」を使う事で、
素早くサービスを開発したり、機能を追加することが出来ます。

※ライブラリって?
特定の機能を提供するコードをひとまとめにしたようなものを言います

しかしながら、そのライブラリ自体も様々なライブラリを組み合わせて作られていることも多く、
一つのライブラリのバージョンが異なる事で正常に機能しなくなってしまう事もあります。

そこで、このcomposerを使用することで、
「ライブラリ同士の依存関係」を

元記事を表示

Basic認証がある環境でBearerトークンを使用する(Sample: nginx+PHP Laravel)

これは[SOUSEI Technology アドベントカレンダー](https://qiita.com/advent-calendar/2020/st)3日目の記事です。
記事の内容は会社の業務とは一切関係ありません。

## 前置き

セキュリティ的に良いとは言えないですが、まだ開発中で非公開だし、クローラやボットの巡回で画面が表示されたりするのを避けられれば良いやくらいのお手軽な手法として、今でもBasic認証は度々使われることがあると思います。
そんな他のアクセス制御かかかった環境にAPIを追加するようなケースでのお話なので、開発用の環境を想定しています。
結果的にRFCを無視しますので、所謂production(実運用している)環境でやるようなことではありませんよー、と前置きさせていただきます。

**nginxのBasic認証の設定については、他に良い記事がたくさんありますので省略しています。**

## ざっくりまとめ

結論から言うと、ミドルウェア(nginx)の設定を変えるのが難しい(できない?)ので、Bearerトークンを送るHTTP headerを変える。アプリケー

元記事を表示

【PHP】BacklogのAPIを使って課題を取得&更新してみる

業務でBacklogの課題を一括更新する要件があったので、APIを使って行った対応内容をまとめます。

一括作成に関してはAPIでもできますが、スプレッドシートを使う方法が楽なのでそちらを参考にしてください。

[Google スプレッドシートを使って、Backlogに課題を一括登録しよう | Backlog](https://support-ja.backlog.com/hc/ja/articles/360042820873-Google-%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-Backlog%E3%81%AB%E8%AA%B2%E9%A1%8C%E3%82%92%E4%B8%80%E6%8B%AC%E7%99%BB%E9%8C%B2%E3%81%97%E3%82%88%E3%81%86)

## 環境
PHP 7.3.11
Backlog API v2

## 前準備
BacklogのAPIを使うにはいくつ

元記事を表示

テスト実行時に DB の Port Listen を待つ

# 簡潔に

`wait-for-it` で特定の Port の Listen を待って、任意のコマンドを実行することができます

“`bash
$ ./wait-for-it.sh -s -t 60 db:3306 — php artisan test –testdox
“`

# 対象読者

– テスト実行時に DB などの Port Listen を待つ必要がある
– 特に、 CI 環境で DB をコンテナで立ち上げるときなど
– 今は `sleep` でなんとなく待って凌いでいるけど、本質的な解決じゃないのでなんとかしたいと思っている

以上の質問に全部 YES と回答した方

# wait-for-it とは

https://github.com/vishnubob/wait-for-it

– 特定のホストと TCP ポートが利用可能になるまで待つ機能をもった bash スクリプトです
– 利用可能になるまで待ったあと、任意のコマンドを実行できます
– 待つ時間の上限を指定できます ( `-t | –timeout` オプション )

## In

元記事を表示

OTHERカテゴリの最新記事