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

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

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

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とは、出された問題をオンライン実行環境でコーディングし、コーディング速度と実行速度を計測できるサイトです。
オンライン実行環境が準備されており、ソフトのインストール不要でだれでもすぐ参加できるため、

元記事を表示

LaravelのコアコードからMiddlewareとControllerの実行手順を理解する

# 前提
Laravelでは、ミドルウェア(主にリクエスト時とかレスポンス時にフィルタリングとしての機能を書く)からコントローラー(実際のリクエストに対する処理を書く)の実行を、柔軟に変更するためにIlluminate\Pipeline\Pipelineを実装し対応している

Pipelineは、実行前に個々の実装(ここではMiddleware)した処理を構成し実行することができる
多段のクロージャでタマネギみたいな構造を構成する
これでMiddlewareのオン、オフや優先度の変更が簡単にできるようになっている

Laravelはリクエストのハンドリングの際Pipelineで、適応するミドルウェアのスタックが走るように設計されている
App\Http\Kernelでミドルウェアスタックを管理している

“`php:App\Http\Kernel

元記事を表示

Laravel Socialiteを使ってQiitaアカウントでログイン

[Crieit – プログラマー、クリエイターが何でも気軽に書けるコミュニティ](https://crieit.net) というQiitaのようなサービスを運用しています。今回Qiitaアカウントで自分のサービスにログインできるようにしてみました。やり方とかを書いておきます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136506/0badb1b3-48a4-96c7-46e8-cc9207e2dc83.png)

## Laravel Socialite

CrieitというサービスはLaravelで作られています。LaravelにはLaravel Socialiteという外部サービスのOAuth認証を使って簡単にログイン機能を実装することが出来るパッケージがあります。今回それを利用しました。

Socialiteには、また別に様々なプロバイダ用の追加パッケージが用意されています。それらと連携させることで色々なサービスのアカウントでログインするための機能を簡単に作ることが出来るようになっています。

元記事を表示

AWS EC2にてwordpressを使うためのメモ

##はじめに
AWS EC2インスタンスでwordpressのインストールをしようとしたら少し手間取ったためその時のメモです。

##環境

– サーバ:Amazon EC2(Amazon Linux 2)
– インストールしたもの:httpd(Apache), php, php-mysql, php-mbstring, php-gd, MariaDB

##事象1
Wordpressをダウンロードしてブラウザからインストールページに移動したところ以下のエラーが出ていました。

“`:インストールページ
Your server is running PHP version 5.4.16 but WordPress 5.2.2 requires at least 5.6.20.
“`
###原因
[Updating the Minimum PHP Version](https://make.wordpress.org/core/2018/12/08/updating-the-minimum-php-version/)
PHPバージョンは5.6.20が必須となったようです。

AWSの

元記事を表示

Laravel プロジェクト作成まで

# PHP のインストール
“`bash
brew install composer
“`

# composer のインストール
“`bash
brew install composer
“`

# githubでプライベート・アクセス・トークンを作成

* github.com にログイン
* Setting > Developer settings に移動
* New Personal access tokens
* read:packages をチェック
* 作成されてプライベート・アクセス・トークンをコピー

# composer にプライベート・アクセス・トークンを設定
“`bash
composer config –global github-oauth.github.com ${プライベート・アクセス・トークン}
“`

# Laravel プロジェクト作成
“`bash
composer create-project –prefer-dist laravel/laravel ${プロジェクト名}
“`

# 参考文献
* [Laravel 6.0

元記事を表示

Instagram Graph APIを使って「いいね数」などを集計する

# 概要
InstagramGraphAPIを使って、自分のInstagramアカウントの投稿の「いいね数」「コメント数」「フォロワー数」などを取得し、それらを集計してcsvファイルに書き出してみます。

# 最終の書き出し例
“`csv
2019/10/28 13:25, フォロワー数:54, いいね累計数:545, コメント累計数:20
“`

# 全体の流れ
1. GraphAPIでデータ取得
1-1. インスタのアカウントをビジネスアカウントに
1-2. Facebookアカウントを用意して1-1のアカウントと連携
1-3. アクセストークン(APIを表示するのに必要な文字列)を取得
  1-3-1. facebook for developerでアプリを作成
  1-3-2. 1個目のアクセストークンを取得
  1-3-3. 2個目のアクセストークンを取得
  1-3-4. 3個目のアクセストークンを取得
  1-3-5. トークンの内容をチェッ

元記事を表示

【PHP8.0】PHPでunion型が使えるようになる

[Union Types 2.0](https://wiki.php.net/rfc/union_types_v2)というRFCが投票中です。
提案者はまたまたのNikita。
2019/10/25開始、2019/11/08終了で、受理には2/3+1の賛成が必要です。
2019/11/04時点で賛成55反対5であり、ほぼ導入確定です。

PHPのunion型って何かというと、[TypeScriptのunion型](https://qiita.com/uhyo/items/e2fdef2d3236b9bfe74a#union%E5%9E%8B%E5%90%88%E4%BD%B5%E5%9E%8B)とだいたい同じです。
`int|string $a`と書いたら`$a`は`int型`もしくは`string型`ですよ、ということです。

ちなみに別途RFCをGitHubで管理しようという実験が進行中で、このRFCの詳細は[GitHub上に存在します](https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types

元記事を表示

アクション内のreturn箇所での記述

## はじめに
【個人メモ】
コントローラでのアクションにて、returnに記述するViewやredirectを使用してたら、混乱してきたので整理した。

## viewの場合
パターンは大きく3つ。

1. view関数の第二引数
2. compact関数
3. withメソッド

### 1.view関数の第二引数

`return view(‘hoge.show’, [‘test’ => $test ])`

### 2.compact関数
`return view(‘hoge.show’, compact(‘test’));`

### 3.withメソッド
`return view(‘hoge.show’)->with(‘test’, $test);`
`return view(‘hoge.show’)->with([‘test’ => $test]);`
`return view(‘hoge.show’)->with([‘test’ => input(‘test’)]);`

※ 上記は、全てbladeで `$test` で受け取る/使用可能。

## redirect

元記事を表示

Fetch APIでPOSTしたJSONをPHPで受け取ってエコーするだけ

フロントエンドもままならないまま最近PHPに入門して、いろいろ戸惑ったのでメモです。

## 知見
– 非同期でやりたいので画面の遷移をキャンセルするための`preventDefault()`をしたいが、これだと``なフォームを未入力のまま`submit`しようとした際にフォームに表示されてほしいエラーメッセージが表示されない。これを`checkValidity()`で解決
– fetchでPOSTしても`$_POST`で受け取れない。`file_get_contents(“php://input”)`で受け取る
– `file_get_contents(“php://input”)`で受け取ってもJSONではなく文字列になってる。`json_decode` をかませてパースする
– `json_decode`するときは第2引数に`true`しとくとうれしい
– `json_encode`するときは第2引数に`JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES`しとくとうれしい

### html
“`html

元記事を表示

【PHP】Laravel 学習メモ / 簡易アプリで流れを掴む1(表示まで)

###〜簡易アプリで流れを掴む1(表示まで)〜

PHPのフレームワークであるLaravelの流れを掴むために簡単なアプリを開発してみます。

##目標アプリ
数字を入力したら計算してくれるというアプリ

##開発環境:
PHP 7.1.23
Laravel Framework 5.8.35
Composer version 1.9.0

開発環境が一通り終わっているという状態からのスタートとします。

###公式ドキュメント 
https://readouble.com/laravel/

##今回の目標
以下の画面まで表示させる
スクリーンショット 2019-11-04 13.33.32.png

#プロジェクトの開始

cal_numberというプロジェクトファイルを作ります(名前は適当につけました

元記事を表示

【2019年版】パーフェクトPHP解説その2 6章 Gitリポジトリ作成〜DB作成

IT学習75日目!
[前回](https://qiita.com/untrustworth/items/b58aa252c8245e45a3c5)に続いて、環境構築から始めます。
# 2 Gitリポジトリ作成
gitはすでにインストールされていますので、バージョンを確認しておきます。

“`
$ git –version
git version 2.14.5
“`

少々古いのですが、今回はこれで良いことにします。

Gitの仕組み、設定やGitHubの登録などについてはこちらの過去記事を参照してください。
[ローカルリポジトリ編](https://qiita.com/untrustworth/items/71ff1f37d5b158c2d523)
[リモートリポジトリ編](
https://qiita.com/untrustworth/items/74abfbd527d5df301482)

## 2.1 ユーザ登録

“`
$ git config –global user.name “perfect-php”
$ git config –global user.ema

元記事を表示

OTHERカテゴリの最新記事