PHPでタイマー

PHPでタイマー

<?php
date_default_timezone_set('Asia/Tokyo');
if (time() >= strtotime('2019-10-08 09:00'))
{
    ?>
    
    タイマー時間が来たら表示
    
    <?php               
}
?>

テスト投稿を追加

だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。

だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。

だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。これは仮入力のためのだみーてきすとです。全く意味はございません。だみーてきすとです。

certbot-auto certonly –webroot -w /usr/share/nginx/html/yama-lab.com -d yama-lab.com

Lets encrypt(certbot-auto)の更新コマンド備忘めも。

# certbot-auto certonly --webroot -w /usr/share/nginx/html/yama-lab.com -d yama-lab.com
# systemctl restart nginx

yum install php72-php-bcmath

bccomp() が undefindで、DialogFlowのPHP client libraryでエラー。

内部で bccomp()を使っている箇所があって、 php72-php-bcmathを入れないとだめみたい、後づけで入れる。

  • 環境 : CentOS7
  • サーバー : Apache
  • PHP : 7.2
# yum install php72-php-bcmath
# cp /opt/remi/php72/root/usr/lib64/php/modules/bcmath.so /usr/lib64/php/modules/
# cp /etc/opt/remi/php72/php.d/20-bcmath.ini /etc/php.d/
# systemctl restart httpd
phpinfo
phpinfo

DockerのWordPressでmailcatcherにSMTP送信の設定

DockerのWordPressでmailcatcherにSMTP送信の設定

設定をメモ、Dockerはdocker-compose.ymlで以下のように定義

version: "3.5"
services:
  wordpress:
    image: wordpress:latest
    ports:
      - 80:80
    links:
      - wordpress-db
    environment:
      WORDPRESS_DB_HOST: wordpress-db:3306
      WORDPRESS_DB_NAME: wp
      WORDPRESS_DB_USER: wp
      WORDPRESS_DB_PASSWORD: pass
    volumes:
      - ./dist:/var/www/html
      - ./php.ini:/usr/local/etc/php/php.ini
  wordpress-db:
    image: mysql:5.7
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wp
      MYSQL_USER: wp
      MYSQL_PASSWORD: pass
    volumes:
      - ./db/mysql_init:/docker-entrypoint-initdb.d
      - ./db/mysql_data:/var/lib/mysql
  mailcatcher:
    image: schickling/mailcatcher
    ports:
      - 1080:1080
      - 1025:1025

SMTPは、WP Mail SMTP プラグインを利用してますその設定。

  • From Email : デフォルト
  • From Name : デフォルト
  • Mailer : Other SMTP
  • SMTP Host : mailcatcher (docker-compose.ymlの設定に合わせる)
  • SMTP Port : 1025 (docker-compose.ymlの設定に合わせる)
  • Auto TLS : OFF
  • Authentication : OFF

Laravel 6 Auth関連セットアップと日本語化

Laravel6 初期Auth関連メモ

Auth関連をセットアップ

$ php artisan migrate
$ composer require laravel/ui
$ php artisan ui vue --auth
$ npm install
$ npm run dev

日本語化

基本設定など

  • config/app.php のlocaleをjaへ
'locale' => 'ja',
  • resources/views/auth/以下その他のviewを日本語へ

  • resources/lang/en をコピーして jaにして日本語に

送信メールの日本語化

  • カスタムしたNotificationを作成
$ php artisan make:notification RestPasswordNotificationJp
<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;

class ResetPasswordNotificationJp extends Notification
{
    use Queueable;
    
    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct($token)
    {
        $this->token = $token;
    }
    
    /**
     * Get the notification's delivery channels.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function via($notifiable)
    {
        return ['mail'];
    }
    
    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        
        return (new MailMessage)
            ->subject('パスワード再設定のお知らせ')
            ->line('下のボタンをクリックしてパスワードを再設定してください。')
            ->action('パスワード再設定', url(config('app.url').route('password.reset', $this->token, false)))
            ->line('もし心当たりがない場合は、本メッセージは破棄してください。');
    }
    
    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

  • User.phpで sendPasswordResetNotification()をOverride
    public function sendPasswordResetNotification($token){
        $this->notify(new ResetPasswordNotificationJp($token));
    }
  • HTMLメールのテンプレートを作成
$ php artisan vendor:publish --tag=laravel-notifications

(resources/views/vendor/notifications/email.blade.phpを日本語にする)

@component('mail::message')
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level === 'error')
# エラーが発生しました。
@else
# パスワード再設定のお知らせ
@endif
@endif

{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}

@endforeach

{{-- Action Button --}}
@isset($actionText)
<?php
    switch ($level) {
        case 'success':
        case 'error':
            $color = $level;
            break;
        default:
            $color = 'primary';
    }
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
@endisset

{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}

@endforeach

{{-- Salutation --}}
@if (! empty($salutation))
{{ $salutation }}
@else
{{ config('app.name') }}
@endif

{{-- Subcopy --}}
@isset($actionText)
@slot('subcopy')
{{ $actionText }}ボタンをクリックできない場合は、以下のURLへ直接アクセスしてください。
[{{ $actionUrl }}]({!! $actionUrl !!})
@endslot
@endisset
@endcomponent

vue router で忘れがちな設定

vue router で忘れがちな設定

個人的メモ

import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter); // <<ココ忘れがち

Laravelの大量のRouteと認可をデータベースで管理する。 LaravelのRout(ルート)がかなり大量なのでDBに定義する

Laravelのルートがかなり多くなってきて、記述が大変&各ルートごとに細かな認可をどうするか考えた所、DBで管理することにしまあした。

モデルのイメージ

  • Action : すべてのリクエストパターン(routes/web.phpに定義するもの)をDBに登録
  • ActionRole : 中間テーブル
  • Role : 権限グループ
  • RoleUser : 中間テーブル
  • User : ユーザー

Actions : ルートに関する情報を記述

  • is_login : ログイン(認証)済みフラグ
  • label : ページ名(アクション名)
  • method : HTTPメソッド
  • name : ルート名( routeヘルパなどでリンク生成するときの名称)
  • controller : 実行コントローラー
  • action : 実行アクション
  • middleware : ミドルウェア

ActionRole : アクション(ルート)とRole(ロール)を紐付け

※アクションは頻繁に追加/変更差込などありそうなので、name(ルート名)で紐付けしている

  • action_name
  • role_id

Role : 権限

  • name(システム管理 / 商品管理 / 予算管理 / ユーザー管理 etc)

RoleUser

権限をユーザーに付与する中間テーブル

  • role_id
  • user_id

User : ユーザー

  • name
  • email
  • password

(その他通常のフィールド)

ルート実装

こんかい業務案件なのでアクセス少なく気にならない不可でそのままですが、toC向けアクセス多い場合は何かしらキャッシュ/ビルドの仕組み必要そう。

$actions = \App\Action::get(); //全てのアクション取得
foreach ($actions as $key => $action) {
    $methods = explode(',', $action->method);
    $uri = $action->uri;
    $name = $action->name;
    $middleware = explode(',', $action->middleware);
    $controllerAction = sprintf('%sController@%s', $action->controller, $action->action);
    Route::match($methods, $uri, $controllerAction)->name($name)->middleware($middleware);
}

認可実装(ミドルウェアなどで)

ざっくりと以下のように処理してます、のちのち運用フェーズではSQL一発で軽く確認できるような仕組みにしたい。

//actionを取得
$actionName = $request->route()->action['as'] ?? false;

//Actionモデルに認可判定処理関数を何かしら実装。
if(!Action::isAllow($actionName)){
    //権限無いよのエラー処理
}

MacCatalinaにして、ブラウザが急にネットワークにつながらなくなったりする、ファイル/プロセスの上限かな?

MacCatalinaにして、ブラウザが急にネットワークにつながらなくなったりする

GoogleChromeで新しいタブを開いたり、他のアプリを開いたりするとことごとくだめ。
ターミナル開いてどんなにコマンドを叩いても

fork: Resource temporarily unavailable

のエラーが出る。いろいろ調べると開けるファイルや、起動プロセス制限があるみたいでそれに引っかかっている可能性型高そう。

以下の記事を参考にlimit(ファイルとプロセス数)を上げてみる。

MacOSX で fork: Resource temporarily unavailable エラーになる場合の対処法
https://blog.regonn.tokyo/programmer/2017–02–03-mac-osx-process/

/Library/LaunchDaemons/limit.maxfiles.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>limit.maxfiles</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxfiles</string>
      <string>200000</string>
      <string>200000</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>ServiceIPC</key>
    <false/>
  </dict>
</plist>

/Library/LaunchDaemons/limit.maxproc.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple/DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>limit.maxproc</string>
    <key>ProgramArguments</key>
    <array>
      <string>launchctl</string>
      <string>limit</string>
      <string>maxproc</string>
      <string>4176</string>
      <string>4176</string>
    </array>
    <key>RunAtLoad</key>
    <true />
    <key>ServiceIPC</key>
      <false />
  </dict>
</plist>

一旦こちらで様子を見てみます。

MacBookProの外部ディスプレイの接続が途切れたり、認識しなかったりが多い

MacBookProの外部ディスプレイの接続が途切れたり、認識しなかったりが多い。

MacBookProといつも4Kディスプレイを繋いでいるのですが、接続してもいつもつながらなかったり抜き差ししたり、差し込むポートを変更したりで消耗してました。(ほかにも接点復活剤でクレンジングしたりetc.)

今回ふと、ケーブルを疑って長いからなのかとか信号が弱いからなのかとか考えて違うケーブル買ってみることに、するとビンゴ次のケーブルに変えてから全く問題なくなりましたので困っている方にはオススメ。

本質的なケーブルの質なのか、接点の質なのかなぞですが、なんとなく短いほうが信号が強い感じがして1mのものを購入しました。もっと早く買っておけば案件でした。

Page 4 of 46

Powered by WordPress & Theme by Anders Norén