Windows上にサーバー作成 Nginx/PHP/MariaDB/WordPress

以前は必要になるとXamppを使ってたけど、今回はNginx環境を手動で作ってみる。

Nginx

Windows用のzipファイルをダウンロードし解凍する。設定ファイルはもともとのコメント部を消して、とりあえずこんな感じ。

nginx-1.19.2/conf/nginx.conf

Nginxフォルダのパスに日本語があると起動しない場合があるので注意。

PHP

ダウンロードして解凍したら、phpというフォルダでnginxの中に入れる。
(nginx-1.19.2/php)

php.ini-development
をコピーしてphp.iniにし、
extension_dir=”ext”
extension=php_mysqli.dll
を追記する。

MariaDB

ダウンロードして解凍したら、mariadbというフォルダでnginxの中に入れる。
(nginx-1.19.2/mariadb)

nginx-1.19.2/mariadb/bin
の中にある、mysql_install_db.exeを実行すると、
nginx-1.19.2/mariadb/data
が作成され、my.iniも入っている。
(Nginxフォルダを移動したらmy.iniを修正しないと起動しない)

手動でDB作成等に使う場合、まずbinの中のmysqld.exeを起動。次にコマンドプロンプトからmysql -u root のような感じでログインできる。

・設定
nginx-1.19.2/mariadb/bin
に移動しmysqldを起動後、
mysql -u root
とするとログインできる。

mysql> set password = password(“1234”);

・データベース作成
mysql> create database wpd character set utf8;
(utf8を指定しないとWPのインストールでエラー)

起動・終了バッチ

start.bat

my.iniを自動で書き換える場合このような感じ

stop.bat

あるいは全て強制終了
(こうしないとプロセスが残る場合あり)

mysql.bat

mysqlのディレクトリに移動するためだけのバッチ

WordPress

nginx-1.19.2\html\wp
にWordPressを解凍したので、ブラウザから、
http://localhost/wp

にアクセス。

DBの情報を入れて送信したところ、
サイトに重大なエラーがありました。
と表示されエラーになった。
(1度目のインストール)

・DBをリセット
フォルダを手動で削除せず、mysqlのコマンドからdrop databaseする。
そして再度create databaseする。

・wp-config.phpを削除
wp-config-sample.phpを複写し、名前をwp-config.phpに変更する。

wp-config.phpが存在しないと自動でwp-config.phpは作成されるが、ここでは手動でwp-config.phpを設定する。

wp-config.phpの以下の部分をtrueに変更する。
define( ‘WP_DEBUG’, true);

以下の部分にDB情報を記入する。
define( ‘DB_NAME’, ‘wpd’ );
define( ‘DB_USER’, ‘root’ );
define( ‘DB_PASSWORD’, ‘1234’ );

再度挑戦するが、
サイトに重大なエラーがありました。
と表示されるだけで、特にエラー内容は表示されない。
(2度目のインストール)

Nginxのログ(logs/error.log)
を確認すると、
Fatal error: Maximum execution time of 30 seconds exceeded
とあるので、
php.iniで下記の部分を30から120に変更
max_execution_time = 120
(3度目のインストール)

これでインストールできた。

LAN経由(外部)から見る場合、ファイアーウォールに新しい規則を追加する。
もしCSSが適用されていない場合は、
設定>一般>アドレス
をIPアドレスに変更してみる。

C# 簡易インクリメンタルサーチ②

選択後に複数の値を取得したかったのでListをやめて、DataTableで処理。

実際にソフトを使ってもらっていると、頻繁に更新されるマスタなのでDBはちょっと面倒。正確性はそこまで必要ないけど手入力の表記ゆれは避けたいという場面が多い。

それならテキストファイルだろうということで修正してみた。

C# 簡易インクリメンタルサーチ

コンボボックス単体で処理しようとしたけど、DroppedDownをいじるとマウスが動かなくなるので、とりあえずテキストボックス、リストボックスで対応。

 

C# MySQLを利用するサンプル

MySQLからデータを持ってきてデータグリッドビューに入れて検索のところまで書いた状態。業務に関わる部分は問題ないように変更してある。

Db.cs

OrderColumnInfo.cs

OrderListForm.cs

OrderModel.cs

OrderQuery.cs

OrderSchema.cs

OrderService.cs

C# プリミティブな値をクラス

ちょっと試しに。

 

C# INotifyPropertyChanged

前回のイベント、デリゲートと似た内容。

 

C# IEnumerable

ちょいメモ

 

C# ObservableCollection

ちょいメモ

 

デザインパターン一言メモ

Adapter

IAdapterがAdapteeに委譲。

継承で実現する場合もある。

Prototype

IPrototypeが自身を複製。

Memento

OriginatorがMementoを作成、復元。

State/Strategy

IState/IStrategyでポリモーフィズム。

具体的にはclientからIState/IStrategyを利用し、インスタンスもclient内で生成することが多い。
インスタンス生成時に条件分岐等でアルゴリズムの切替え、状態の切替えを実施。

Decorator

IComponentを共通で実装。
ConcreateComponentからDecoratorに処理を委譲。

Composite

IComponentを共通で実装。
CompositeとLeafがある。
CompsiteがIComponentのコレクションを保持。

Proxy

ISubjectを共通で実装。
Proxyが自分で処理をすることも必要ならRealSubjectに処理を委譲することもできる。

Flyweight

FlyweightFactoryでFlyweigthインスタンスを生成し自身のpoolコレクションに保存。
利用時も既にインスタンスが存在すれば、それを利用する。

Singleton

コンストラクタをprivateにする。
自身のstaticメンバーにインスタンスを保存

Iterator

IIteratorにIAggregateのコレクションを保持する。
IAggregateでIIteratorのインスタンス生成して利用する。

Template Method

テンプレートメソッドはabstractメソッドのみ使う。
サブクラスでabstractメソッドを実装。
スーパークラスがサブクラスをコントロール。

Builder

DirectorはIBuilderで定義したメソッドのみ使う。
DirectorがBuilderをコントロール。

Factory Method

Template Methodと同じ構造。
インスタンス生成が必要な部分をサブクラスで実装。

Factory抽象クラスの中で実装したcreateで抽象createProductなどインスタンス生成の手順を定義し、サブクラスでcreateProductを実装する。

インスタンス生成のコントロールを得るという点から下記のような方法が有名。
(Factory Methodをパラメータ化)

Class Test {
Test(int type){
_type = type;
}
}

Class Test{
private Test(int type){ //コンストラクタをprivate
_type = type;
}
static create(int type){ //インスタンス生成メソッドを準備
return new Test(type);
}
}

Abstract Factory

IFactoryでIProduct1,IProduct2の生成を定義。
どのような部品セット(1,2)なのかをIFactoryで定義し、IProductでそれぞれの処理を定義。

Bridge

継承と実装を分離。
機能追加は、Abstractionを継承したRefinedAbstractionに。
実装は、Abstractionより委譲されたImplementorに。

Visitor

IVisitorはデータ構造ごとのvisitを実装する。
IAcceptorのacceptの中でvisitを呼び、自身をvisitに渡す。
ダブルディパッチ。

Chain of Responsibility

IHandlerは転送先のIHandlerを自身に持ち
処理が完了か次が見つからないとき以外は次に転送し続ける。

Facade

サブシステム化し、単純な窓口を提供。

Mediator

IMediatorでIColleaugeを生成しメンバーとして保持、さらにIColleauge.SetMediatorで自身を渡す。
IColleaugeは自身に変更があったらIMediator.ColleagueChangedでIMediatorに通知。
IMediatorはColleagueChangedが呼ばれたとき、保持するIColleaugeすべての状態からロジックを判断する。

Observer

ISubjectがIObserverを保持しISubjectが変化したらIObserver.Updateを呼ぶ。
被験者が観察者のインスタンスを保持する。

Command

処理の呼び出しをメッセージからオブジェクトにする。

ICommandはExecuteを定義し、Receiverを保持。
Receiverは実際のActionを定義しICommand.Excuteの中でReceiver.Actionを呼ぶ。
Invokerは起動者でボタンのようなイメージ。

Interpreter

独自構文の文字列をContextに渡しトークン解析する。
ContextはhasNextやnextTokenなどで解析したトークンを取得できる。

構文解析クラスは文法ごとにIAbstractExpression実装した
TerminalExpression、NonterminalExpressionを準備。
NonterminalExpression1、NonterminalExpression2、TerminalExpression
のようにそれぞれ作成する。

実際は、
NonterminalExpression1.Parse(new Context(文字列))のように渡されると、
NonterminalExpression1の内部でnew NonterminalExpression2.Parse(context)
のように最後のTerminalExpressionまで内部で呼ぶ。

Null Object

IAbstractionをRealObjectとNullObjectが実装。
IAbstraction.Request()でRealObjectを返すが、Request()がNullを返す場合はNullObjectを返す。

golang jwt-go 色々

基本的な生成と検証のみ