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

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

AlfredからPhpStormのプロジェクトとして開けるWorkflowを作成した

## はじめに

PhpStormを使っていて複数のプロジェクトを開きたいときは、FileメニューからOpenするなりRecent Projectから開いたりするなりするのですが、個人的には使いづらくもっとシャッて開きたいなと思ってました。

そこでAlfredからプロジェクトを検索して開ければいいな〜とおもって検索すると、[alfred-jetbrains](https://github.com/bchatard/alfred-jetbrains)といったワークフローを見つけました。

しかし、なぜか検索に引っかかるプロジェクトとそうでないプロジェクトがあったり(open your projects with your favorite JetBrains product.って書いてあった)、プロジェクトが所属しているディレクトリ名でも検索したいなと思ったりしたので自作することにしました。

alfred-jetbransの仕組みは、PhpStormが最近開いたプロジェクトなどの情報をxmlファイルで保持しているのでそのxmlファイルを読み込んで検索結果に出すということをしていたので

元記事を表示

vuejs-datepickerの入力データをPHPに渡したら日付が変わった?

Vue.jsでサイトを作る際に日付入力にvuejs-datepickerを使うわけですが、
ブラウザ上で表示されてる日付とフォーム送信された日付がずれる事が。[^1]

生年月日とか入力する時にカレンダーをポチポチするのは面倒なので`typeable=”true”`にしてキーボード入力を可能にしてますが、

**入力方法によって設定される時間が変わります。**

– カレンダーポチポチ
![20200612_ss01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590344/01cf5474-ed96-a9e0-d0b8-90bed7f1b6b2.png)
入力操作した時間が設定されてる

– キーボード入力
![20200612_ss02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/590344/a6559a46-cc47-f089-00cc-98b9592b1201.png)
`00:00:00`になってる

元記事を表示

PHPでWi-Fi制御

**PHP WiFi**
GitHub:https://github.com/sanchescom/php-wifi
Packagist:https://packagist.org/packages/sanchescom/php-wifi

# インストール
Composerでインストールします。

`>composer require sanchescom/php-wifi`

# コマンド
コマンドとして利用することができます。

## アクセスポイント一覧

“`
>.\vendor\bin\wifi list
SSID BSSID Channel Quality dBm Frequency Connected Security
—————————————————————————————————-
Buffalo-A-XXXX XX:c2:bf:XX:fa:cc 53

元記事を表示

Raspberry Pi で Apache2 を動かす

Raspberry Pi で Apache2 を動かします。

次の PHP と Perl が動くようにします。

“`php:test_a001.php
$val)
{
echo $key . ‘ : ‘ . $val . ‘
‘;
}
?>
“`

“`pl:hello.pl
#! /usr/bin/perl
#
print “Content-type: text/html\n\n”;
print “\n”;
print “\n”;
print “\n”;
print “Hello by Perl\n”;
print “\n”;
print “\n”;
print “H

元記事を表示

PHP再入門基礎編その2

# 条件分岐、繰り返し処理、関数編。
以前WEBデザイナーだった頃に挫折したPHPに関して、
プログラミングスクールでRuby/Railsを学んだことで、サーバサイドに少し自信がついてきたので再度勉強し直しています。
ある程度理解が進んできたので、備忘録も兼ねてここに記載していきます。

## 条件分岐(if else if)

“`php
//基本形
$hoge = 10;
if($hoge === ’10’){
echo ‘変数hogeは文字列の10です’;
} else if($hoge === 10) {
echo ‘変数hogeは数値の10です。’;
} else{
echo ‘どちらでもないです。’;
}

//処理が1つの場合省略も可能。
$box = ‘toy’;
if($box === ‘toy’) echo’箱の中身は玩具です’; else echo’箱の中身は玩具ではありません’;

//三項演算子も可能
$box = ‘toy’;
$contentsOfTheBox = ($box === ‘toy’)?’箱の中身は玩具です’:’箱の中身は玩具では

元記事を表示

PHP再入門基礎編その1

#出力、変数、定数、配列、連想配列編。

以前WEBデザイナーだった頃に挫折したPHPに関して、
プログラミングスクールでRuby/Railsを学んだことで、サーバサイドに少し自信がついてきたので再度勉強し直しています。
ある程度理解が進んできたので、備忘録も兼ねてここに記載していきます。

## 基礎中の基礎、画面への出力

“`php
print ‘hello’;
echo ‘hello’;
“`

どちらも画面に出力はされるものの、echoは文であり式ではなく、戻り値もない。
他の式と組み合わせたもできない。

“`php
//ok
$hoge = print ‘hello’;
//エラー
$hoge = echo ‘hello’;
“`

戻り値がないことでechoの方がやや高速とのこと。
また、echoは複数の文字列や数値を結合して出力が可能。
ただ出力する分にはechoが有利か?

## 変数について

$記号をつけて宣言、1文字目は英字か_、2文字目以降には英字か数字か_を使う。
大文字と小文字は区別される。

## 定数(値の再設定ができ

元記事を表示

phpで個別のページ名とサイト名を連結して表示する

#概要
複数以上のページから構成されるサイトを作っていて、大元のサイト名をいちいちtitle属性に書くのってスマートじゃないし保守しにくいですよね。

今回は文字列連結だけの最小のPHPコードで各ページのタイトル生成処理を実装したので、備忘として残しておきます。

#やっていきましょう
呼び出し側(クライアント)のphp(index.php)とサーバーサイド処理のphpソース(Title.php)を用意します。

`index.php`および`Title.php`は同一ディレクトリ内にありますが、パスの指定をするときは必ず最初に`/`をつけてあげます。
`__DIR__` や `dirname(__FILE__)` で指定したディレクトリの末尾には`/`がつかないためです。

~~~html:index.php


元記事を表示

PhpStorm 検索機能のすゝめ

# PhpStorm 検索機能のメリット
ブラウザの情報からviewファイルを探したり、
メソッドがどこで使用されてるか全て把握できる。

# ファイル内の検索
* 使用方法
* メインメニュー(**編集 → 検索 → 検索**)
* ショートカットキー(`⌘` + `F`)

* 主な機能
* 検索文字列を入力すると**ファイル内**の検索結果を強調表示します。
* コマンド(`⌥`+`↓`)で検索履歴が見れる。
* コマンド(`⌘` +`R`)正規表現

[**JetBrains公式マニュアル【ファイル内のテキストの検索と置換】**](https://pleiades.io/help/phpstorm/finding-and-replacing-text-in-file.html)

# プロジェクト内の検索
* 使用方法
* メインメニュー(**編集 → 検索 → パス内検索**)
* ショートカットキー(`⇧` + `⌘` + `F`)

* 主な機能
* 検索文字列を入力すると**プロジェクト内**の検索結果を強調表示します。
* コマ

元記事を表示

Ubuntu18.04にLAMP環境を構築する

# 環境

ESXi6.7上に構築したUbuntu18.04上に構築していく

| Software | Version |
|—–|——-|
| ubuntu | 18.04 |
| PHP | 7.2 |
| Apache | 2.4.29 |
| MariaDB | 10.1.44 |

# パッケージのアップデート

“`
sudo apt update
sudo apt upgrade
“`

# Apache Web Serverをインストール

– Apache2をインストール

“`
sudo apt install -y apache2 apache2-utils
“`

– ステータスの確認

“`
systemctl status apache2
“`

– 起動していない場合は以下のコマンドを実行する

“`
sudo systemctl start apache2
“`

– 起動時に自動的にapacheが起動できるようにする

“`
sudo systemctl enable apache2
“`

– serverのURL

元記事を表示

メモ: マクロ PHP_FUNCTION を展開する

# 結論もどき

`PHP_FUNCTION(array_reverse)`

`void zif_array_reverse(zend_execute_data *execute_data, zval *return_value)`

# 読むソースコード

[php/php-src: The PHP Interpreter](https://github.com/php/php-src)

手元のソースコードのコミットは [こちら](https://github.com/php/php-src/commit/18f2ef094af2b1ad961408fbaf222b9448df2750)

# `PHP_FUNCTION` が使われているところの例

“`c:ext/standard/array.c
/* {{{ proto array array_reverse(array input [, bool preserve keys])
Return input as a new array with the order of the entries reversed *

元記事を表示

phpでcsvファイルを生成する[メモ]

前回の記事同様、最近仕事でcsvを使う場面が多かったので
自分用のメモとして書きます。よかったら参考にしてください。

集計とかする際にcsv出力は便利です。
今回は二部構成
#第一部 力技
タイトルの意味は後々わかります。
##csvを作る関数(力技ver)

“`php:createCsv.php
// csvを作る関数(引数:csv用の配列、ファイル名)
function createCsv($data,$fileName){
$dirPath = ‘./AutoCreateCsv’;
if(!file_exists($dirPath)){
mkdir($dirPath,0700);
}
$createCsvFilePath = $dirPath.”/”.$fileName.”.csv”;
if(!file_exists($createCsvFilePath)){
touch($createCsvFilePath);
}
$createCsvFile = fopen($createCsvFilePath, “w”);
if($cr

元記事を表示

PHPで簡易ログイン機能を実装する

#概要

PHP初心者・非エンジニアさん向け。
ログイン機能を実装したい!でもDBを使うほどではないし工数を削減したい…という場合です。
以下の記事を参照しながら、PHP初心者の引っかかったポイントやメモをまとめます。

**【PHPで簡易ログイン機能】DBを使わず固定文字列で取り敢えずログイン機能の実装**

【PHPで簡易ログイン機能】DBを使わず固定文字列で取り敢えずログイン機能の実装

**PHPのheader関数でリダイレクト処理を行う方法【初心者向け】**

PHPのheader関数でリダイレクト処理を行う方法【初心者向け】

#やっていきましょう
入力情報としてパスワードだけを必要としたため、元記事よ

元記事を表示

LaravelでのUnitテストでコンソールにログを出す

– Windows 10
– PHP 7.4.5
– Laravel Framework 7.9.2

Unitテストの設定はこちらを参照:[LaravelでのUnitテストざっくり入門]
(https://qiita.com/nozaki-sankosc/items/4f20a4a30e6b730ec211)

ここでは、Unitテスト実行時の設定を`.env.testing`で設定するようにしている。
そうでない場合は、`.env`で設定する。

## logging.phpに標準出力用の設定を追加
標準エラー出力用の設定は最初からあるので、それを使う場合は追加しなくてもいいかも。

“`php:config/logging.php
‘stdout’ => [
‘driver’ => ‘monolog’,
‘handler’ => StreamHandler::class,
‘formatter’ => env(‘LOG_STDOUT_FORMATTER’),
‘wit

元記事を表示

Elasticsearch-PHP で [terms] query does not support エラーが出る

## 事象
Elasticsearch (Version 6.8.5) に対して、
Elasticsearch-PHP で terms 句を含む query を作って検索(_search)を行ったところ、以下のエラーが出た。
`[terms] query does not support [0] within lookup element`

## あるべき姿
以下のような配列を Elasticsearch の terms 句に渡した場合、
`$accounts = [“aaa”, “ccc”]`

Elasticsearch で以下の様に扱われること。

“`
“terms”: {
“account”: [“aaa”, “ccc”]
}
“`

## 今回のエラーが出た状況
まず、PHP で配列の真ん中を削り、添え字を歯抜けにする。

“`
$accounts = [“aaa”, “bbb”, “ccc”];
unset($accounts[1]);  ◆”bbb” を削る
print_r($accounts);

* 配列の添え字はこんな感じになる
Array
(

元記事を表示

【Laravel】Redisを使った閲覧数のランキング機能

キャッシュの管理にRedisを使って、ランキング機能をつくった際のメモです。

[
Laravel 5.8 Redis
](https://readouble.com/laravel/5.8/ja/redis.html?header=Redis%25E3%2581%25AE%25E6%2593%258D%25E4%25BD%259C)

環境は以下の通りです。
– laravel 5.8
– php 7.2
– predis 1.1

##Redisのインストール
Redisを使うためにRedisのPHP拡張をインストールします。[Laravel 5.8 Redis](https://readouble.com/laravel/5.8/ja/redis.html?header=%25E3%2582%25A4%25E3%2583%25B3%25E3%2583%2588%25E3%2583%25AD%25E3%2583%2580%25E3%2582%25AF%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%25B3)
ここではLaravelは`5.8`である

元記事を表示

catalinaでmampのパスが通らない場合について

macOSをcatalinaの環境下でphpをデフォルトからMAMPへ~/.bash_profileでPATHを通し切り替えを行ってもターミナル再起動後反映しなかったので解決方法をまとめました。

#結  論
catalinaにOSをアップデートするとデフォルトシェルが「bach」から「zsh」へ変更になり、デフォルトのphpをMAMPのphpに切り替え~/.bash_profileに設定してもターミナル再起動後はPATHは通らない。

シェルを【bash】に切り替えればターミナルを再起動しても設定したものが反映される。

###環境

* macOS 10.15 (catalina)
* MAMP version5.5

######今までの.bash_profileへの設定方法
基本的な操作は下記の記事参照
https://qiita.com/kurosu93/items/6cf23669d718fc6e0adb

##一連の流れに沿っても.bash_profileを書き換えてもcatalina以降シェルが【zsh】のままだとPATHが通らない

元記事を表示

composerのscriptsからコマンドを実行する

composerにはnpmと同じようにscriptsを設定しておくと、composerのスクリプトとして実行できる機能があります。

npmのスクリプトに比べるとそんなに使われていないような気がしますが便利ですよ。

“`json:composer.json
{
“scripts”: {
“test-unit”: [
“@php vendor/bin/phpunit –testsuite Unit”
],
“test-feature”: [
“@php artisan migrate:fresh –seed”,
“@php vendor/bin/phpunit –testsuite Feature”
]
}
}
“`

元記事を表示

Laravelでfactoryの際にイベントリスナーを走らせない方法

こんにちはみなさん

Webでデータを更新したら、そのログを取っておくという処理をコントローラに一緒に書くのは、まあ、よくあることなのです。しかし、システムが肥大化していき、「ユーザにメール出さなきゃ」とか、「並び順の変更もしなきゃ」とか、いろんな事が出てくると、コントローラが煩雑になっていきます。しかも、其のデータ更新が別の箇所で発生していたら、また同じような処理を書かなければならない。。。

LaravelのEloquentを使っている場合、データ更新という中心的な処理に対し、ログを取ったりメールを出したりといった「脇道の処理」はイベントを使うのが楽ちんです。
楽ちんなんですが、テストでfactoryを使ってデータを作ると、いちいちメールが飛んだり、ログが作られたりしますので、これはこれで面倒なのです。

というわけで、factoryでデータ作るときはイベントリスナーを実行しないようにするやり方をご紹介しましょう。
ちなみに、Laravelは7を使っています。

# 3行

– factoryのときもイベントは発生する
– fakeForを使えば、一時的にイベントの発生を抑制できる

元記事を表示

AWS 上に構築した Laravel 環境での sudo php artisan 実行時に環境変数が適用されずにハマった話

AWS Elastic Beanstalk で構築した Laravel 環境で、普段から問題なく実行できていた artisan コマンドが失敗する事態に遭遇しました。
問題の切り分けに苦戦して結構ハマったので原因と解決方法を共有します。

## TL;DR

– `sudo php artisan` の形で実行すると必要な環境変数が引き継がれずに失敗する。
– `sudo su -` で root ユーザーとして実行すれば問題ない。

## 事象

`eb ssh` で EC2 インスタンスにログイン後、以下のように artisan コマンドを実行する[^sudo-php-artisan]もエラーが発生してしまいました。

[^sudo-php-artisan]: 導入しているパッケージの関係で権限の問題があるため `sudo` で実行しています。

“`bash
$ sudo php artisan

In ClientResolver.php line 397:

Missing required client configuration options:

region

元記事を表示

laravel-http-loggerを使ってアクセスログ機能を実装する

## laravel-http-loggerを使ってロギング機能を実装

とあるAPIにモニタリング用のアクセスログ機能を追加実装する事となりまして。

laravel-http-loggerというライブラリを使うと簡単に実装できそうなので利用しました。
復習がてら実装方法や手順を書いてみます。

※公式の説明とは若干実装の順番が異なります

## 事前学習のオススメリンク

Laravelのログについて(公式)
https://readouble.com/laravel/6.x/ja/logging.html

ログ出力のカスタマイズ例

Laravel のログにリクエストごとのIDを出す

PHPの標準出力について(公式)
https://www.php.net/manual/ja/wrappers.php.php

## laravel-http-loggerをインストールする

↓公式はこちら。具体的な方法が掲載されています(英語)
https://github.com/spatie/laravel-http-logger

laravel-http-log

元記事を表示

OTHERカテゴリの最新記事