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

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

変数の使用イメージ

– 左辺で代入したら、様々な目的地に応じて値を運び、右辺から値を取り出す。
– 下から上には運べないので、上から下に下ろしていく。
– 下であれば、必要なときに何回でも取り出せる。の範囲を飛び越えて運ぶことも可能。

– また、途中で値を再代入(上書き保存)できる。
その場合は、前のデータは共存できず消えてしまい別の値を運ぶことになる。
![val.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14068/29b9b93a-2e93-1f51-cb35-2f7cf7ce1c60.jpeg)

元記事を表示

このPHPがテンプレートエンジンのくせに慎重すぎる (前篇)

この記事では[Packagist]で公開可能な形式のPHPのライブラリ([Composerパッケージ][Composer])を公開するための道具立てを紹介します。あと、現代のPHPerはツールを組み合せてさくっと開発しているんだという自慢です。

タイトルは「[この TypeScript が Hello, world! のくせに慎重すぎる](https://qiita.com/matzkoh/items/90baab22ad489b78384b)」と
「[この勇者が俺TUEEEくせに慎重すぎる](https://dic.pixiv.net/a/%E3%81%93%E3%81%AE%E5%8B%87%E8%80%85%E3%81%8C%E4%BF%BATUEEE%E3%81%8F%E3%81%9B%E3%81%AB%E6%85%8E%E9%87%8D%E3%81%99%E3%81%8E%E3%82%8B)」の*ぱくr*… パロディです。

テンプレートエンジンのくせに型安全なんてなまいきな。

[Packagist]: https://packagist.org/
[Composer]:

元記事を表示

(Laravel)bladeで変数$errors に任意のエラーメッセージを追加するディレクティブ

##(Laravel)bladeファイル内での $errors に、任意項目のエラーメッセージを追加するマクロ

“`app/Provider/BladeCustomizeProvider.php
\Blade::directive(‘register_message_to_errors_variable’, function ($expression) {
[$key, $message] = explode(‘,’,$expression);
return “hasBag()){‘.’$errors->put(“default”, (new \Illuminate\Support\MessageBag));}’.’$errors->add(‘.”{$key}”.”,{$message}”.”); ?>”;
});
“`
使い方

“`form.blade.php
@register_message_to_errors_variable($key, ‘

元記事を表示

xamppでmysql利用時のトラブル(PHPからのmysql接続時の認証エラー原因)

###1.phpからmysql接続テスト(突然の認証エラー)

mariadb(mysql)にはrootで入れるの(というかDB作成、テーブル作成まで完了)に、
テストプログラムの接続で失敗。下記のようなエラー画面(caching_sha2_password)
が表示される。

この画面で何のプログラムかわかる人は、きっと天才だ。

![php_auth_err.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494408/c45fe43d-68cd-73f8-1316-2fc09104d7f7.jpeg)

###2.解決法(ホスト名の後ろに何かを指定)

ググって修正した結果が下記のプログラム。

“`php:test_dino2_mysql.php



恐竜登録テスト

開始

元記事を表示

PHPフレームワーク Laravel

趣味でプログラミングを勉強しています。
古本販売サイトを作成したいと思って勉強を始めたのですが、コワーキングスペースにいるプログラミングに詳しいTさんに「スクラッチ開発するより、フレームワークを使ってサイトを作成するほうがいいよ」とアドバイスをいただき、おすすめPHPフレームワーク「Laravel」を今回記事にしてみました!! (^-^)

### PHPフレームワーク「Laravel」

– スクラッチ開発した場合の問題点
– セキュリティの問題
– メンテナンスの問題
– 拡張性の問題
→スクラッチ開発する場合、セキュリティやメンテナンス性、拡張性などは全て自分で実現しないといけない

##### フレームワークとライブラリ比較

– フレームワーク
– 機能 + 機能を使う仕組み
– セキュリティやメンテナンス性、拡張性が考慮されたシステム
– 開発で多用される様々な機能や仕組みを持ったソフトウェア

– ライブラリ
– 開発に役立つ便利な機能を備えたソフトウェア

#### Lara

元記事を表示

Account Activity API をphpで実装してみた

#Account Activity APIの実装手順
##構築環境
・windows
・insomnia
・ngrok
・xampp

※それぞれの設定方法などは今回記載していません。

##Account Activity API の概要

(参考: https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/overview)

・上記の内容を要約すると、webhookを使って、登録しているアカウントに対して、
何かしらアクションが起こった際にリアルタイムで情報を教えてくれるよ!
って感じです。

###アクション一覧

|||
|—————–|——————|
|ツイート|ブロック|
|ツイートの削除|ブロック解除|
|@メンション|ミュート|
|返信|ミュート解除|
|リツイート|送信されたダイレクトメッセージ|
|ツイートの引用|受信したダイレクトメッセージ|
|引用されたツイートのリツイート|入力インジケーター|
|いいね|

元記事を表示

enterキー無効にする方法

メモとして、一応。

onSubmit=”this.onsubmit=function(){return false}”

これは一番簡単かつ有効。

元記事を表示

?【CakePHP2】エレメンツをデフォルトのapp/View/Elements以外のディレクトリから呼び出す

## 環境
PHP 7.2.21
CakePHP 2.10.18

## やりたいこと

Elements以外のディレクトリにエレメンツテンプレートを置いた場合や別Appにあるエレメンツテンプレートを呼び出したい

## やったこと

cdコマンドと同じ指定を使うことでデフォルトである「app/View/Elements」以外の別階層を指定できる

※CakePHPの設計思想は**「設定より規約」(convention over configuration)**に賛同しているのであまり使いどころはないかもですが

### 同じAppの別ディレクトリのエレメンツテンプレートを使用
test/app/View/ から test/app/View/Form/default.ctp を呼ぶ

“`test.ctp
element($elementsDir);

// 変数渡しがある場合
echo $this->elemen

元記事を表示

コピペでできるCentOS8におけるZephir開発環境手順

# 何がしたいのか?
CentOS8でZephirの開発をする

# そもそもZephirってなに?
– PHP拡張モジュールのための開発言語
– 普通のPHP拡張モジュールはCで書く
– 文字列操作が複雑
– メモリ管理が煩雑
– PHP拡張モジュール独自の要素もある
– ZephirはPHPライクな記法
– メモリも文字列も自由に書ける
– PHPの関数をそのまま使える
– 主にclass作成用で、OPCacheのようにエンジンの置き換えはできない?

## 公式ドキュメント
[Zephir Documentation v0.12](https://docs.zephir-lang.com/0.12/en/)
[github](https://github.com/phalcon/zephir)

# どんな環境を作るの?
– OS
– CentOS8
– PHP
– PHP7.2.11
– httpサーバ
– Apache

# コピペでできるインストール手順
## 必要なパッケージのインストール
dnf install -y git g

元記事を表示

macOS CatalinaにしてからLaravelの環境設定が詰まった

# Laravelの環境設定で詰まった

使用環境
MacOS Catalina
php Version 7.3.8
composer version 1.9.2
Laravel installer 3.0.1

<発生した問題>
composerを使用して、下記コマンドでlaravelインストールを実行しました。

“`terminal
composer global require laravel/installer
“`
すると、

“`terminal
-laravel/installer v3.0.1 requires ext-zip * -> the requested PHP extension zip is missing from your system.

-laravel/installer v3.0.0 requires ext-zip * -> the requested PHP extension zip is missing from your system.

-Installation request for laravel/installe

元記事を表示

CakePHPの始め方(Mac)を理解したい

先日頑張って[CakePHPのインストール](https://qiita.com/nanatsu/items/210b6448cfdc9f2bddab)をしました

次はCakePHP開発の始め方をお勉強します
スーパーしょしんしゃなので当たり前のこともいちいちメモしています

# 環境状況
– Mac OS Catalina 10.15.2
– HomebrewでApache, MySQL, PHPをインストール済み
– Apache(バージョンは後日記述)
– MySQL 8.0
– PHP 7.3
– CakePHP 3.8

# 調べてわかったこと
– フレームワークを使うには**MVCモデル**を理解しないといけない[^1]
– そもそも「PHPでできること」として具体的な処理や機能がいろいろある
– `bake`コマンドというやつで楽できそう

# 基礎知識
整理してたら全部長くなったので切りました

– [PHPについて](https://qiita.com/nanatsu/items/aec7286fc344f3a380b1)
– [MVCモデル

元記事を表示

テスト駆動開発をPHPで写経-第2章

PHPで[テスト駆動開発](https://amzn.to/37nji9B)を写経してみたのでその記録です。
本記事では第2章のみ紹介します。

過去記事
– [テスト駆動開発をPHPで写経-第1章 – Qiita](https://qiita.com/jumperson/items/bfab34403afbb02c814a)

# 所感

今回はほぼテキスト通りに行えました

# 実施

Dollarオブジェクトの状態が変わらないことを期待するテストに修正

“`diff
diff –git a/tests/MoneyTest.php b/tests/MoneyTest.php
index b753708..d47dc01 100644
— a/tests/MoneyTest.php
+++ b/tests/MoneyTest.php
@@ -8,7 +8,9 @@ require_once(dirname(__FILE__).”/../src/Dollar.php”);
class MoneyTest extends TestCase {
public func

元記事を表示

【Laravel】 ModelクラスからQueryBuilderクラスを分離させる

#概要
LaravelだとGlobalScopeを作成して、scopeメソッドをModelクラスから分離させることができる。

しかし、Eloquentに依存してしまうため、DBファサード等を使用してQueryBuilderのみを使用する場合に、クエリの分割ができない。

そのため、`Illuminate\Database\Query\Builder` クラスを継承したQueryBuilderクラスを作成し、EloquentからでもQueryBuilderのみでも利用できるようにする。

#実装
## QueryBuilderクラスの作成

`Illuminate\Database\Query\Builder`したクラスを作成する。

“`php

元記事を表示

セッションを確認する

新しいタブを開いてもセッションは同じになるということを今日知りました。
実際にコード書いて確かめてみました。

以下を参考にしました
https://itsakura.com/php_session

##ソース
https://github.com/hinamomo/laravel60-quickstart-basic/commit/9812659ed29a5766362b61778a5d9e04617dca09
この記事用に追加したのは以下2箇所(コントローラ新規作成、ルート追加)です

“`app/Http/Controllers/SessionController.php

元記事を表示

【メール送信自動化】データベース内のメールアドレスを抽出して自動送信

とあるお仕事で「ある条件下のお客様のみ、1日ごとに違うメールを自動配信して欲しい」との依頼があったので、PHPでスクリプトを書いてみました。

以下、それのサンプルです(参考サイトがいくつもあります。あとで追記いたします)。

流れとしては、

①$db -> query(“SQL文”); で必要なデータを検索(WHEREとかを使う)
②while + fetchArrayでメールアドレスを配列化
③配列にしたメールアドレスをforeachで一つずつ送信

です。それだけです。

“`

元記事を表示

Laravel 日付データから年度を取得し配列に入れる

## やってみた

**`date`カラムから年度に変換し、重複を削除、ソートしました。**
※`date`カラムに存在する年度のみ取得します。

“`php:StatusContoller.php
$dates = Status::pluck(‘date’);
foreach ($dates as $date) {
$array[] = $date->subMonthsNoOverflow(3)->format(‘Y’);
}
$years = collect($array)->unique()->sort();

dd($years);
“`

## map()を使った方法
**コメントより、kiyoamiさんに教えていただきました。**

“`php:StatusContoller.php

$years = Status::pluck(‘date’)->map(function ($date) {
return $date->subMonthsNoOverflow(3)->format(‘Y’);
})->unique()->sort();

dd($ye

元記事を表示

PHPで年度を取得する~DateTimeとCarbon~

##やりたいこと
DateTimeクラスとCarbonライブラリそれぞれ、任意の日付から**年度**を取得します。

**一般的な年度(4月1日~翌年3月31日までを年度)とします。**
※2019年を例にすると、2019年4月1日から2020年3月31日までのことを指します。

## DateTimeクラス

“`php
$date = new DateTime(‘2020-03-1’);
dump($date->modify(‘-3 month’)->format(‘Y’)); // 2019
“`

## Carbonライブラリ

“`php
use Carbon\CarbonImmutable;

$carbon = new CarbonImmutable(‘2020-03-1’);
dump($carbon->subMonthsNoOverflow(3)->format(‘Y’)); // 2019
“`

間違ってる記載がありましたら教えていただけると嬉しいですm(__)m。

## 参考文献

この記事は以下の情報を参考にしました。

– [[#php]年度を

元記事を表示

phpでcsvファイルを読込み配列に格納するまでの速度

file()を使用する場合とfgetcsv()を使用する場合で速度を比較した。
レコードは数値のみの想定。今回試したレコード数は10240件。

“`:csvファイル
11.11,11.11
22.22,22.22

“`

# file()を使用した場合
かかった時間:0.0099518299102783

“`php:file()
$time_start = microtime(true);

$data = array();
$cnt = 0;
$lines = file(‘timetest.csv’);
foreach($lines as $line){
$arr = explode(‘,’ , $line);
$data[$cnt][‘hoge’] = $arr[0];
$data[$cnt][‘fuga’] = $arr[1];
$cnt++;
}
$time = microtime(true) – $time_start;
echo “{$time} 秒”;
“`

# fgetcsv()を使用した場合
かかった時間:0.031

元記事を表示

jQueryとphpを使い、WordPressの絞り込み検索結果をページ遷移なしで表示する

忘れないように自分用メモを残します。

おそらくWordPressに限定せずとも
phpで同じようにdataを返してやればいろいろな結果を返せると思われます。
※絞り込み検索については既に実装している前提です。

“`
function getData(){
//フォームの値を.serialize()で変数に格納
var params = $(‘form’).serialize();
$.post(
//絞り込み検索を定義してあるPHPファイルにフォームの値を渡す
search.php?” + params,

//search.phpからの値を取得し、指定要素に出力
function( data ) {
//.view内にsearch.phpの結果が出力される
jQuery(‘.view’).html(data);
}
);

}
“`
`getData()`はonclickなどのイベントハンドラで適当なボタンに実行させ

元記事を表示

Laravelでリレーション先のカラムによってソート(orderBy)する方法

環境:Laravel5.8,MySQL5.7

Laravelでリレーション先のカラムによってソートする方法。

Laravelでデータベースからリレーションを利用してデータを取得して並び替えをする時に、
親ではなく、子の情報で並び替えをしたい時があると思います。

例えば、Twitterの、自分のいいね欄に登録されているツイートの順番は、
ツイートが投稿された順番ではなく、自分がツイートをいいねした順番で並び替えされています。

これは、ツイート(親)に紐づく、Like(子)が作られた時間によって並び替えが行われている状態と考えられます。

ここでは、自分がいいねしたツイートを、いいねをした順番で取得する方法をまとめます。

###条件
Tweet(親)→Like(子)と、
User(親)→Like(子)は、1対多の関係で結びついてるとし、
LikeはTweetのidと、Userのidを含んでいます。

Tweetを取得する際に、Likeのcreated_atをDESCの順で並び替えたいものとします。(新しいいいねが一番上に来る)

“`php
$posts = Tweet::se

元記事を表示

OTHERカテゴリの最新記事