PHP関連のことを調べてみた2019年11月07日

PHP関連のことを調べてみた2019年11月07日
目次

php7.0から使える「宇宙船演算子」が名前がかっこいいw

php7.0系の新機能として「宇宙船演算子」なるものがありました。
私はそんなに使う場面ないですが名前がかっこいいのでせっかくなのでメモしておきますw

ちなみに英語版ドキュメントの表記では
「**Spaceship operator**」
でした。

確かに宇宙船演算子ですw

## 宇宙船演算子

二つの式を比較するために使うものです。

“`
echo $a <=> $b;
“`

“$a“が右辺の“$b“より大きい場合は “1“
“$a“と“$b“が等しい場合は “0“
“$a“が“$b“より小さい場合は “-1“
をそれぞれ返します。

下記の動作も公式のサンプル通り同様です。

“`php
// 整数値
var_dump(1 <=> 1); // 0
var_dump(1 <=> 2); // -1
var_dump(2 <=> 1); // 1

// 浮動小数点
var_dump(1.5 <=> 1.5); // 0
var_dump(1.5 <=> 1.6); // -1
var_dump(2.1 <=> 1.5); //

元記事を表示

ComposerでSlim4を導入

#はじめに
普段PHPで開発を行っていますが、しばらく前からSlim3というフレームワークで開発を行うようになりました!
前回はComposerとXamppの導入を行ったので、今回はフレームワークを入れて、PHPが組める環境にしていきます。

##目次
・実行環境
・環境構築
 - Xampp、Composerの用意
・Slim4導入
 - env作成(設定ファイル)
 - DB接続設定
・Xampp実行(WEBサーバー、DBサーバー)
・初期設定
・動作確認

##実行環境
・Windows
・Composer
・Xampp(Apache,Mysql)
・Slim4
ネットにつながるWindowsPC1台で完結します!

##環境構築
今回以下のディレクトリ配下で作業することを想定しています。
C:\demo\slim4
上記のディレクトリを事前に作成し、PowerShellで開いておいてください。
プロジェクト作成後は
C:\demo\slim4\my-app
がルートディレクトリになります。(my-appは自動作成です。)

###Xampp、Composerの用意
前回の記事

元記事を表示

【備忘録】セッションとは、

#背景
リソース型について調べていたら、「curlセッション」という単語が出てきたが、理解できなかったため

#参考資料
[PHP公式マニュアル セッション](https://www.php.net/manual/ja/session.examples.basic.php)

[「Cookie」と「セッション」と「セッションCookie」の違い](https://ips.nekotype.com/2441/)

[セッション Cookie の概念](https://www.ibm.com/support/knowledgecenter/ja/SSPREK_9.0.2/com.ibm.isam.doc/wrp_config/concept/con_sess_cookies_conc.html)

[セッションとは]
(https://www.seohacks.net/basic/terms/session/)

#セッションとは
PHPでの基本的な使用例
>セッションは、シンプルな方法で個々のユーザーのデータを格納する仕組みで、 個々のユーザーに対して一意なセッション ID を用意しま

元記事を表示

会員登録して書き込む掲示板をPHPで作成してみた【初心者】

#制作物

こちらになります。
[普通の掲示板](http://siro-to.work)

この記事は自分の知識確認のために記載しているため読みにくい箇所が多々あるかもしれません。申し訳ありません。

##実装した機能
下記のことを行えるようにしています。

+ 会員登録
+ ログイン
+ スレッド作成
+ 記事投稿
+ ページネーション

##追加した機能
+ マイページの編集

開発環境はXAMMP。ソースコードはGitHubで管理し、サーバーにssh接続をしてGitHubからpullすることでバージョン管理を行いました。サーバーはmixhosutを利用しています。
Git、GitHubどちらも全然使いこなせていないので今後の課題です。

##データベース設計

・membersテーブル

| 名前 | データの型 | 備考 |
|—|—|—|
|id| int【PRIMARY、A_I】 | primary key,auto_increment |
| name | varchar(255) | 名前 |
| us

元記事を表示

PHPのarray_uniqueを使って、3つ以上のDateTimeが同じ日時かどうか比較する

単純な話なんだけど忘れそうなのでメモ

# 結論

DateTimeクラス同士を比較する場合は、Unixタイムスタンプに出力してから比較を行う。
PHP7.0.4以前のバージョンの場合、modify()をした後にgetTimestamp()を実行すると意図せずに日付が変わることがあるらしいので注意。

参考:[DateTime::getTimestamp()すると日付が変わる件]()
参考:[PHP :: Bug #71525 :: Calls to date_modify will mutate timelib_rel_time, causing date_date_set issues](https://bugs.php.net/bug.php?id=71525)

“`php
// 比較したいDateTimeクラスのオブジェクトを配列に格納する
$dates = [
new DateTime(‘2019-01-01’),
new DateTime(‘2019-01-01’),
new DateTime(‘2019-01-01’)
];

// 配列の要素

元記事を表示

LINE Messaging APIの改行について

LINE Messaging APIの改行について

“`”改行前\n 改行後の文字列 ““`

で改行できました。

ポイントとしては、”(ダブルフォーテーション)でくくること。

![LINEキャプチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175837/3979d46c-ae08-e133-c7c4-575dd5bdf1ad.png)

元記事を表示

老体エンジニアまだまだ頑張る開発サイト!!

みんな独学ですが当年69歳まだまだ頑張る開発サイトとして今後も息子(初心者)と投稿しては反省して開発を続けてて行きたいと思っています。
あらためて
https://qiita.com/shinsakujazzbass/items/87a90b46c8da29234bbe
をはじめ色々挑戦してゆきますので、興味のあるかたはご覧ください。
今挑戦しているのは、小規模SNSをWordPress等と組み合わせ構想しています。
これは私共のクライアントの団体組織のコミニケーションツールとして利用可能サイトとそれに連動するアプリとしての構想です。
![system_image001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101462/cc69b75d-0587-c4ce-4c5f-f9a75b055eaa.jpeg)
このシステム構築にまつわるサーバー再度、とアプリ関連の投稿を行って行きたいとおもいます。
今テストを行なっているXcodeのiphoneアプリのダイアグラム以下のようなものです。
![スクリー

元記事を表示

クラス・メソッド・インスタンスの名前を統一してしまうと、インスタンス生成時にメソッドが実行されてしまうバグを、異世界転生モノっぽく説明してみた。

### はじめに
クラス構文の動作確認のため、あまりにも適当なテストコードを書いた際に、
とある小さなバグ(?)を発見した。

(くだらない話なので、異世界転生モノ風に語ってみようと思う。)

### プロローグ
ボクはどこにでもいる普通の男子高校生。
ある日、道端の猫がトラックに轢かれそうになっていたので身を挺して助けたのだが、
不運にもトラックを避けきれずボクは死んでしまった。猫は逃げた。

気がつくと目の前には女神様がいて、ボクは「ニホン」という異世界を救うために転生させられた。
ニホンは、「ピーエイチピー」と呼ばれる魔法文明を気付いていた。
ボクは女神様から「ブラインドタッチ」というチートスキルを授かったため、この世界で最強のピーエイチピー使い「ペチパー」と呼ばれる賢者を目指し、修行をはじめた。

** (中略)**

### 最終章 バグ(?)との遭遇
ピーエイチピーには「クラス」と呼ばれる強力な魔法があると聞いて、さっそくボクは修行をはじめた。
命名規則とかめんどくさいし、最初は適当に試してみようっと。

“`PHP:PHP
class Hoge {
private

元記事を表示

laravel Eloquent groupBy カスタムカラム(column)をつかったgroupBy

例として、テーブルは3カラム[id・year_month・price] 年度ごとの金額を保持しているとする。
この時、年度に関係なく、月で金額を計算したい場合、下のようにする。

“`:php
$query = $this->model->newQuery();
$list = $query
->select([‘id’,DB::raw(“date_format(year_month, ‘%m’) AS month, SUM(price) as price”)])
->groupBy( DB::raw(‘month’))
->get();
“`

selectの際に、DB::rawで変更を加えたカラムは、groupByする際もDB::rawを付けないとエラーになる(公式ページより)

[参照]
https://qiita.com/t_mitarai/items/50ddcc9d0be4275eedb9

元記事を表示

初学者のVPSサーバー構築手順書(4)

ゼェ・・・ゼェ・・

次にWebサーバーとして利用できるようにするためのアプリケーションApache (アパッチ)のインストールと、DNSの設定をして行く序でにLAMP全部入れる。

#httpサーバーApacheをインストールする

まずはサーバーにログイン

“`
$ ssh -i ~/.ssh/kaiji tonegawa@tk0-000-00000.vs.sakura.ne.jp
Last login: Tue Oct 22 00:41:48 2019 from kd0000000000.ppp-bb.dion.ne.jp

SAKURA Internet [Virtual Private Server SERVICE]

[tonegawa@tk0-000-00000 ~]$

“`

次にrootにスイッチ

“`
[tonegawa@tk0-000-00000 ~]$ su –
パスワード:
最終ログイン: 2019/10/22 (火) 00:56:48 JST日時 pts/0
最後の失敗ログイン: 2019/10/30 (水) 01:14:20 JST日時 p

元記事を表示

深い位置のプロパティにいきなり代入する

PHPで深い位置のプロパティに、いきなり値を代入したいが
次のようなコードでは、警告が発生してしまう。

“`php
$a = new stdClass;
$a->b->c = 1; //代入はできるが警告が出る
“`

マジックメソッド“__get()“を利用することで、目的が達成できた。

“`php
class exClass{
function __get($name){
$this->$name = new self;
return $this->$name;
}
}

$a = new exClass;
$a->b->c = 1; //成功
“`

ただし問題があって、未定義のプロパティをgetした場合は、exClassオブジェクトが返ってくる。

元記事を表示

画像ダウンローダー構築手法(sample e-hentai.org)

#はじめに
学生のころからいろんなサイトの画像ダウンローダーを作っていて、この手順でやればだいたい上手くいくって構築手法が確立しつつあるので、それの紹介。ダウンローダーのプロトタイプは[まとめ](#まとめ)に載せた。~~何かあったらこの記事消します。~~
#環境
– windows8
– xampp
– php 7.3.11
– firefox

#構築する画像ダウンローダーの概要
shellを立ち上げたら` php hogehoge.php `でhogehoge.phpを起動。画像が設置してあるurlをコピペして入力に使う。urlを引数にしてfile_get_contentsで画像ファイルを取り込み、file_put_contentsで出力する。いつも使う書き方は以下の通り。引数にするurlを変えつつ、この処理を繰り返し、複数枚の画像を自動でダウンロードする。

“`php
///
// $imgurl -> download img
///
function get_img($imgurl,$title){
$img = file_get_contents($imgurl

元記事を表示

Moodle 3.7 マニュアル – アップグレード

[原文](https://docs.moodle.org/37/en/Upgrading)

このページは、Moodle のアップグレード方法の詳細について説明しています。手順のまとめは、[アップグレード概要](https://qiita.com/intrajp/items/a2e69519831512ecc0d8)を参照してください。

Contents

[1 要件をチェックする](#1-要件をチェックする)
[2 アップグレードの前に](#2-アップグレードの前に)
[3 重要なデータのバックアップ](#3-重要なデータのバックアップ)
[4 プラグインのアップデートをチェックする](#4-プラグインのアップデートをチェックする)
[5 あなたのサイトをメンテナンスモードにする](#5-あなたのサイトをメンテナンスモードにする)
[6 新しい Moodle ソフトウェアをインストールする](#6-新しい-moodle-ソフトウェアをインストールする)
[6.1 標準インストールパッケージ](#61-標準インストールパッケージ)
[6.1.1 Linux](#611-linux)

元記事を表示

LaravelのtinkerでRedisが動かなかった時の対処法

# tinkerでRedisを動かす

“`sh
$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.11 — cli) by Justin Hileman
>>> Redis::set(1,2)
PHP Error: Non-static method Redis::set() cannot be called statically in Psy Shell code on line 1
“`

エラーが出てしまった。

# 対処法
`use Illuminate\Support\Facades\Redis;`でRedisを呼び出す。

“`sh
>>> use Illuminate\Support\Facades\Redis;
>>> Redis::set(1,2)
=> true
>>> Redis::get(1)
=> “2”
“`

これで解決。

元記事を表示

[PHP] SheetAPIでAppendする時にはスプレッドシート側ではフィルターかけてると挙動が変わるので注意

“`php5
/**
* データ書き込み
*
* @param array $data
* @throws \Exception
*/
private function append(array $data)
{
$value = new Google_Service_Sheets_ValueRange();
try
{
foreach ($data as $val)
{
$value->setValues([‘values’ => array_values($val)]);
$this->service->spreadsheets_values->append($this->spreadsheetId, “シート1!A1”, $value, [‘valueInputOption’ => ‘USER_ENTERED’]);
}

元記事を表示

Transformerという概念を取り入れてみよう【Laravel】

オープンソース見ていていいなと思ったので紹介します。
一言で言えばDB上のデータを整形するクラス。
機能というよりは概念なのでそんな難しいことじゃないです。

男の子はTransformerって響き好きですよね?!
あの、変形するやつです(車が変形するってことしか知りませんが…)
~~正直Transformerって言いたいってそれだけの勢いで執筆してます~~

# どういう時につかう?
“`
名前:{{ $student->name }}

性別:{{ config(“trans.gender.{$student->gender}”) }}

生年月日:{{ $student->birthday_y }}年{{ $student->birthday_m }}月{{ $student->birthday_d }}
“`

こんな感じのbladeテンプレート記述した人は多いと思います。

一回書くだけなら、何も問題ないのですが、色々な場所で性別描画したいとか、
誕生日描画したいとかなってくると結構うざいですよね?
そんな時にデータベースから引っ張ってきてすぐ描画できる形に変換する

元記事を表示

[PHP] 透明で軽量な favicon.ico の Base64_Encode イメージ(16x16px, 1.1KB)

> [favicon](https://ja.wikipedia.org/wiki/Favicon).ico のいらない Web API でも毎回ブラウザからリクエストされる。無視するのも気持ち悪いので `blank` で `transparent` で `lightweight` な 16×16 px の favicon.ico の Base64 文字列が欲しい。

## TL;DR(Base64 Encoded Blank And Transparent favicon.ico image)

“`text:16x16pxの透過favicon.icoのBase64エンコード文字列
AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A///

元記事を表示

PHP Slim 環境構築(16) ECS(EC2)+ローリングデプロイ

# PHP Slim 環境構築(16) ECS(EC2)+ローリングデプロイ

## Introduction

[前回](https://qiita.com/dynamitecoolguy/items/d6aff53757ef475d7942)は、ECS(Fargate)の構築を行いました。
今回は、一つ戻って、ECS(EC2)のDeployを試してみます。

この一連のシリーズは、自分への備忘録が第一目的のため、だいぶ不親切です。
申し訳ございません。

## ローリングデプロイ

### 手動

手動で行う方法は、[前々回](https://qiita.com/dynamitecoolguy/items/1074132b8b082910abcf)に記載していますが、適当なec2のshell上で、docker build → docker push → task 更新 → サービス更新です (詳細は割愛)。

“`
# docker build -t hoge-repo:latest –build-arg environment=devaws -f compose/web_h

元記事を表示

php7.0からの新機能null合体演算子の使い方

php7系は5.6からメジャーバージョンとして大幅に変更されていますが、
タイプヒンティングなど有意義なものが多いです。

null合体演算子はその中でも便利な新機能です。

## null合体演算子

phpはissetやempty、is_nullなどの型判定がありますが
isset()と三項演算子を組み合わせたパターンはよくあると思います。

“`php
$hoge = ‘a’;
$test = isset($hoge) ? $hoge : ‘other’;
var_dump($test);
“`

これを

“`php
$hoge = ‘a’;
$test = $hoge ?? ‘other’;
var_dump($test);

$hoge = null;
$test = $hoge ?? ‘other’;
var_dump($test);
“`

と書くことができます。

“`
出力結果
ーーーーー
string(1) “a”
string(5) “other”
“`

スッキリしたコードになるので地味にとても便利です。

元記事を表示

20代エンジニア格付けチェックCODING ~定時後の勉強会スペシャル~ 開いてみた【社内勉強会・Paiza編】

前提

自分の現在の所属はシステム開発部、既存パッケージの改修・保守を行っている部署です。
かなり息の長い自社パッケージ(LAMP構成)を2か月に一度改修しリリースするサイクルで活動しています。
開発部メンバーは、エンジニアとしての経験が深い方から、新卒入社の社員まで様々です。

そんな中でPaizaを使って格付けチェックしてみたので、その報告と感想です。

なぜ勉強会をやろうと思ったか?

* 自社パッケージの改修・保守に傾注しているため、スクラッチでコードを書く機会がない
* 中途社員はともかく、新卒社員が自社パッケージの言語以外に触れる機会がない
* メンバー間で各人の得意なスキルを知る機会がない

やったこと

20代の開発メンバー5~6人に声をかけて、だいたい週2回のペースで[Paiza](https://paiza.jp/)の問題を解きました。
Paizaとは、出された問題をオンライン実行環境でコーディングし、コーディング速度と実行速度を計測できるサイトです。
オンライン実行環境が準備されており、ソフトのインストール不要でだれでもすぐ参加できるため、

元記事を表示

OTHERカテゴリの最新記事