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

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

【Laravel】 Eloquent の has() や whereHas() が遅い?なら速くしてやるぜ

# はじめに

Laravel は「リレーション先が存在するか」という制約条件を `has()` `whereHas()` メソッドで表現できます。

– [Eloquent: Relationships – Laravel – The PHP Framework For Web Artisans](https://laravel.com/docs/7.x/eloquent-relationships)
– [Eloquent:リレーション 7.x Laravel](https://readouble.com/laravel/7.x/ja/eloquent-relationships.html)

取得結果が複数になる `HasMany` と,取得結果が単一になる`HasOne` `BelongsTo` の, 2 通りのパターンを考えましょう。

# 例

以下のようなモデル定義があるとします。

“`php
class Post extends Model
{
use SoftDeletes;

public function comments()
{

元記事を表示

Laravel 7で簡易的なECサイトを作る+Twitter OAuth ログインを実装する

以下のサイトを参考に、ECサイトを構築します。
エラーが起こった箇所のみ書いていますが、結構長いです。
・[Laravel6.0(PHP7.3)+MySQL+Laradockで簡易的なECサイトを作る](https://note.com/mukae9/n/n12cc13fd4f90?magazine_key=mf7a8ea438ba1)
・[TwitterAPI アカウント申請〜許可まで【2020年版】](https://note.com/mukae9/n/nb249bcfe6ee9)
・[Laravel6.0+SocialiteでTwitterログインを実装する](https://note.com/mukae9/n/n91ff7bccfcd8)
・[Laravel 6.5 と Socialite で Twitter OAuth ログインを実現する](https://econosys-system.com/blog/archives/419)

※ソースコードは[github](https://github.com/neneta0921/ec_app)にて公開しているので、宜しけば参考

元記事を表示

PHP基礎<変数と定数>

#前書き
PHPを基礎から学習しています。
積み重ねのアウトプットとして更新していきます。

#変数とは
データを入れる「箱」のようなものです。 この「箱」の中には色々なものを出し入れすることができます。
「変数」は変わる数で、「定数」は変わらない数を示します。

“`index.php

元記事を表示

Docker で PHP 8.0.0 Alpha 1 環境構築

# 概要

2020年6月25日に [PHP 8.0.0 Alpha 1](https://www.php.net/archive/2020.php#2020-06-25-1) がリリースされました。
[Docker イメージ](https://hub.docker.com/_/php) も公開されていたので最低限の環境を構築してみます。

# 構成

“`
$ tree
.
├── docker-compose.yml
├── nginx
│ └── default.conf
└── public
└── index.php
“`

# ファイル

“`yml:docker-compose.yml
version: “3.8”

services:
nginx:
image: nginx
ports:
– “80:80”
volumes:
– ./public:/var/www/html
– ./nginx/default.conf:/etc/nginx/conf.d/default.conf
php:

元記事を表示

ラズパイでcronがうまく設定できないときのTips

# 概要
ラズパイを買って、なにかしら定期処理させようとしたときにちょっとハマった。
そもそもcron触ったことない場合のcronの注意と
ラズパイだとコマンドちょっと違うよっていう話。

僕と同レベルの初学者向けに書いてます。

# ラズパイ編

## cronの起動、再起動

“`
/etc/init.d/cron start
/etc/init.d/cron restart
“`
↓は検索するとよく出てくるけど

“`
service crond restart
“`
debian(ラズパイのOS)だとそんなものないよってなるので注意。

## ログ

### 設定

“`/etc/rsyslog.conf(抜粋)
###############
#### RULES ####
###############

#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/

元記事を表示

最後のおさらい!PHP8で削除される&動かなくなる機能 ~レガシーシステムでありそうなものピックアップ~

まえがき
—-
PHP8が2020/12にリリースされる予定で、先日2020/06/25にアルファ版が公開されました。

PHP7.2~7.4では既に非推奨になっている機能が廃止され、エラーで止まったりするということで、今一度PHP8で動かなくなる機能を調べ、そのなかでもレガシーシステムで使われてそう・古いFWで使われてそうで万人に身近そうなものを独断でピックアップして記載したいと思います。

PHP8で削除される&動かなくなる機能

## PHP7.2から非推奨→廃止

### $errcontext argument of error handler
エラーハンドラのコールバック関数のシグニチャに指定できる`$errcontext`が廃止されます。
この変数にはエラーが起きたときのローカル変数の値をすべて保持しています。

が、現在はデバッガで確認するような内容で実運用では使用頻度があまりなさそうなものにこれからもこの変数を実現するために

元記事を表示

PHP: $HTTP_GET_VARS [非推奨]の書き換え

[$HTTP_GET_VARS](https://www.php.net/manual/ja/reserved.variables.get.php)は非推奨になっています。

しかし、古いプログラムでは使われています。
例えば、

“`php:test_args.php
“;
echo ‘‘;
echo ““;
echo “test_args.php

“;
echo “

テスト

“;
$in_vars = “”;
while (list($key, $val) = each($HTTP_GET_VARS)) {
$in_vars .= $key.”=”.$val. “

“;
}
echo $in_vars;
echo “Jun/28/

元記事を表示

【Laravel】idごとの情報を表示する

ユーザーのマイページのような、特定のidの情報を表示する方法のメモ。

#Route
“`web.php
Route::group([‘prefix’=>’~~~~~~’,’middleware’=>’auth’], function () {
Route::get(‘index’, ‘*******Controller@index’)->name(‘~~~~~~.index’);
Route::get(‘create’, ‘*******Controller@create’)->name(‘~~~~~~.create’);
Route::post(‘store’, ‘*******Controller@store’)->name(‘~~~~~~.store’);
Route::get(‘show/{id}’, ‘*******Controller@show’)->name(‘~~~~~~.show’);//この部分
});
“`

#Controller
“`****Controller.php
public function show($id)

元記事を表示

【Laravel基礎】DBにデータを保存・保存内容を表示

LaravelでDBにデータを保存する方法と、保存した内容を表示する方法のメモ。

#前提
resourceでControllerを作っています。

####注意
コード部分の「****」「&&&&」みたいなのは代替文字です。

#DBに保存
Controller,Route,Viewのそれぞれに書いていきます。

##Route
“`web.php
Route::group([‘prefix’=>’~~~~~~’,’middleware’=>’auth’], function () {
Route::get(‘index’, ‘*******Controller@index’)->name(‘~~~~~~.index’);
Route::get(‘create’, ‘*******Controller@create’)->name(‘~~~~~~.create’);
Route::post(‘store’, ‘*******Controller@store’)->name(‘~~~~~~.store’); //この部分
Route::get(‘sho

元記事を表示

PHP-Parserで、phpコードを拡張・作成するメタプログラミング入門

# 背景

仕事で、レガシーなソースコードに名前空間やPHPDocを機械的に付与するために調べました。

基本的に、nikic/PHP-Parserの公式docの和訳まとめです。
英語に抵抗がなく、急いでない方は公式を読まれると良いと思います。

https://github.com/nikic/PHP-Parser/tree/master/doc

# 要約

– PHP-Parserで既存のファイルを最小限の変更で拡張できる
– 名前空間を付与したり、特定の関数の書き換え、PHPDocの追加なども可能
– かなり自由なPHPのメタプログラミングができる

# nikic/PHP-Parser

https://github.com/nikic/PHP-Parser

phpで書かれたphpパーサーです。phpだけで動くので、使いやすいです。

PHP 5.2からPHP 7.4のコードを解析でき、ヒューマンリーダブルなphpファイルに出力できます。

安定版のv4.0以上の実行環境は、php7.1以上です。

静的解析ライブラリの[phpstan/phpstan](https://

元記事を表示

【heroku,FuelPHP】デプロイ時のyahooメール設定方法

思うようにメール設定がうまくいかず時間がかかったので、同じ環境の方がさくっと対処できるように手順を残しておきます。

#対象の方
herokuにFuelPHPを使ったwebサービスをデプロイ済みでyahooメール設定がうまくいかない方。
※MacOS環境での方法を記載しています。

#手順
5ステップで解説していきます。

1.config.phpにemailを追加
2.email.phpを..fuel/app/configに複製
3.email.phpを編集
4.yahooメールの設定変更
5.email.phpのnewlineを編集(それでもエラーが出る場合)

##1.config.phpにemailを追加
fuel/app/config/config.phpのpackages=>array()にemailを追加
※Emailパッケージ読み込んでEmailクラスを利用できるようにします。

“`fuel/app/config/config.php

‘packages’ => array(   //
‘email’,      //新規で追加
),

“`

元記事を表示

カラーミーAPIを利用して商品一覧のjsonを取得する

「カラーミーAPI」を利用して、
カラーミーで作ったショップの全商品一覧および各商品の詳細を、
別サーバー(ここではheteml)にjsonとして保存した時のソースコードです。
以下のようなコードをhetemlのweb以下に「products.php」として置き、
cronで10分ごとに動かし、
同ディレクトリに「cache.json」として保存します。

“`
#!/usr/local/php/7.3/bin/php
array(
‘method’ => ‘GET’,
‘header’=> “Authorization: Bearer オーソリゼーションコードだよ〜\r\n”
)
);
//アクセストークンなどAPI取得に必要な情報だよ
$context = stream_context_create($request_options);
//商品一覧を取得する
//先に商品が全部でいくつあるか取得する
$url = ‘https://api.shop-pro.jp/v1/produ

元記事を表示

(自分用)Flask_AWS_1(AWS仮想環境にPHP,MySQL,phpMyAdmin,Pythonのインストール)

# 項目
1. PHPのインストール
2. MySQLのインストール
3. PHPMyAdminのインストール
4. Pythonのインストール

# 1.PHPのインストール
“`bash:ターミナル
# まずLinux仮想マシンに接続、ここを覚えてないなら1つ前のやつを見て
$ ssh -i ~/.ssh/FirstKey.pem ec2-user@(パブリックIP)

# 管理者権限に変更
$$ sudo su

# PHPをインストール
$$ yum install -y php

# PHPの設定を変える前にバックアップを取っておく
$$ cp /etc/php.ini /etc/php.bak

# viでPHPの設定変更
$$ vi /etc/php.ini
“`

– `:set number`で行番号を表示
– `:520`で520行目に移動
– `i`にて記述モードにし、`error_reporting = E_ALL & ~E_DEPRECATED`という行を、`error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTI

元記事を表示

環境を汚さずに Composer を使いたい

# 要約

* Docker には Composer イメージがあって Docker Compose から使うと便利
* [使い方とサンプルコード](https://github.com/SnowCait/docker-compose-composer-example)

# Composer どうやって実行してますか?

PHP 開発に [Composer](https://getcomposer.org/) は必須です。
ではどうやって実行しているでしょうか。

* ローカルで composer コマンドを使う
* ローカルにインストールする
* composer.phar をコミットする
* Docker コンテナで composer コマンドを使う
* PHP コンテナにインストールする
* 自前インストール
* Composer イメージを使ってインストール
* コミットされた composer.phar を PHP コンテナ内で使う
* Composer コンテナを使う
* Docker

元記事を表示

PHPUnit 配列の順番は考慮・気にしないAssert

## 概要

配列(連想配列も含む)の順番は気にせず、要素は同じであることを検証するためのAssert

※ そもそも、順番も保証された上でのテストであったほうが良いというのも分かるのですが、今回はスコープ外とします

※ こんなAssertがあればいいなと作成したものなので「既にPHPUnitで用意されてるよ」などあればコメントお願いします?

## 本題

利用したいテストでこのTraitを使う想定でこんな感じで実装しました :pencil:

“`php
assertSame([

元記事を表示

学習日記8日目(2020/6/27)

# 学習内容

– JavaScript基礎学習:Progateの学習コース全終了

 JSの学習を終了してPHPやLaravelの学習に移っていきたいと思います。

# その他

– タイピング練習
– paizaのスキルチェックに挑戦

 参加しているサロンの方々がやっているのを目にし、気になったのでpaizaのスキルチェックやってみました。しかし、、**標準入力ってなんやねん!**という感じでそもそも入力値を変数等に代入できなくて積みました?

 そんなこんなでfgets関数を使ったことがなかったので調べ、どうもfgets関数を繰り返し実行すれ入力を一行目から順に取り出せるらしいことがわかったので明日以降Cランクの問題にチャレンジしようと思います。今日はDランクの問題1問解いて終了です。

# 明日の予定

– UdemyでPHP&Laravelの学習

元記事を表示

Laravelアプリ同士をWeb APIで連携させるには

オンプレで動く Laravel と、クラウドで動く Laravel を、Web API でシステム間連携させてみた話。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/990023f8-3c07-27a6-f225-7ed013663ad5.png)

# やりたいこと
社内オンプレの給与明細APサーバにアクセスすると、クラウドの勤怠打刻APサーバのデータも取得し、給与明細と合わせて勤怠実績明細も表示できるようにする。
シーケンス図で書くと次のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/807f5916-ea81-721f-c6df-ababbd270e2c.png)
明細表示例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/7727c

元記事を表示

Laravel MySQL DBのカラムタイプを途中で変更する

# 目的

– Laravelにて新規作成後のDBのカラムタイプの変更方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/ad

元記事を表示

Laravel MySQL DBのカラム名を途中で変更する

# 目的

– Laravelにて新規作成後のDBのカラム名の変更方法をまとめる

# 実施環境

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |

– ソフトウェア環境

| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaa

元記事を表示

【Laravel】グローバルスコープを用いてコード量を減らす

##はじめに
実装していてモデルのクエリに制約で何度も同じ実装することはありませんか。
そんな時はグローバルスコープというLaravelの機能のグローバルスコープを使って1回の実装で済むようにするのも1つの方法かなと思います。

##グローバルスコープとは

>グローバルスコープにより、指定したモデルの全クエリに対して、制約を付け加えることができます。Laravel自身のソフトデリート機能は、「削除されていない」モデルをデータベースから取得するためにグローバルスコープを使用しています。独自のグローバルスコープを書くことにより、特定のモデルのクエリに制約を確実に、簡単に、便利に指定できます。

引用:[Eloquent:利用の開始 7.x Laravel](https://readouble.com/laravel/7.x/ja/eloquent.html)

グローバルスコープを1回の実装すれば特定のモデルのクエリに制約ができ、かなり便利です。

##グローバルスコープの実装

`Illuminate\Database\Eloquent\Scope`配下に適当なファイルを作成します。

元記事を表示

OTHERカテゴリの最新記事