エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【PHP】フレームワーク使わずルーティングしたかった【144日目】

前提・ゴール

nginx等で、強制的にindex.phpを読み込ませる

index.phpから、URIに合わせて、別ファイルを読み込ませるのをゴール

手順

URIを取得

②クエリと分ける

URIに合わせてinclueするファイル分ける

書いたコード

index.php(①と②を担当)

<?php
$uri = $_SERVER['REQUEST_URI'];
$query = $_SERVER['QUERY_STRING'];
$uri = str_replace('?' . $query, '', $uri);

include 'route/route.php';

route.php

<?php
if ($uri === '/hogehoge') {
    include 'answer/hogehoge.php';
} else if ($uri === '/hugahuga') {
    include 'answer/hugahuga.php';
} else {
    include 'answer/other.php';
}

悩み

includeでファイル見つからなかった時の対応書けてない

そもそもinclude、require以外でルーティング実装する方法思いつかなかった

どなたかアドバイスいただけたら嬉しいです。
こんなものなのかなぁ・・・

z-indexで重ねたウィンドウの一番手前をスクロールだけしたい【143日目】

何が起こった

<div class="bg">
 <div class="front">
 </div>
</div>
bg {
    width: 100%;
    z-index: 10;
}

front {
    width: 80%;
    z-index: 11;
}

こんな時に、frontをクリックすると、frontもbgも両方クリックイベントが反応した。

falseだと、css含んだ全部の動作が止まる

willow710kut.hatenablog.com

対策

$('.bg').click(function (e) {
        $('.front').hide();
        e.stopPropagation();
});

これで、親要素にイベントは伝播せず、スクロールとかのデフォルトの動作は残る。

golangのチュートリアル始めて衝撃的だったこと3つpart5【142日目】

前回の記事

willow710kut.hatenablog.com

おどr

A Tour of Go

チュートリアル

オブジェクトっぽい書き方が出来る

ここ参考に。

willow710kut.hatenablog.com

構造体の初期化方法

type Obj struct {
    number int
    name string
}

o := Obj{num, str}

Obj{num, str}で、値を初期化。Obj{}の{}の中の順番で初期化していきます。

見やすくて記述が少ないいいですね。

大文字小文字でpublicとprivate

func test() {
    return 10;
}

func Test2() {
    return 11;
}

testはprivate、Test2はpublicです。

publicと書かなくていいのは良いですね!
型推論といい、コードを書く量を減らしていく流れはやっぱりあるんですね。

これでラスト!

ということで、ここまで書いた驚いたことシリーズはひとまず終了です。

今度まとめたりしたいところ。さて、開発がんばろー!

golangのオブジェクトっぽい書き方【141日目】

前回の記事

willow710kut.hatenablog.com

もしかしたらオブジェクトなのかもだけど。

オブジェクトっぽいなーって思ったのでφ(..)メモメモ

構造体の書き方

type Obj struct {
    number int
}

プロパティみたい。

コンストラクタみたいなの

func NewObj(num int) *Obj {
    o := obj{num}
    return &o
}

obj(num)で、numをobj.numberに代入。
そのobjのポインタをリターンする。

メソッドみたいなの

func (o Obj) GetNum() int {
    return o.number
}

他にも後日まとめたいこと

ポインタの書き方、構造体の初期化の方法、大文字だとpublicとかをまた改めて書きたいところ。

これについては驚いたことを3つのpart5に書きたいところ。

nginxのtry_filesの意味って?【140日目】

location / {
try_files $uri $uri/ /index.php$is_args$args;
}

 

これの意味って?

try_filesは、リクエストに応じたファイルを返します。

 

詳しく見てみよう

最初に$uriと書いているので、

https://domain.name/hoge.png

なら、hoge.pngがあればそのままファイルを渡してくれます。

 

では、なかったら?

$uri/なので、hoge.png/を探して、そこのファイルを返します。

 

それもなかったら?

/index.php$is_args$args

uriガン無視して、index.phpを返します。

 

また$is_argsは

index.html?xxx

この?xxx部分、つまりgetの値を取得します。

$argsは……

すみません、わからなかったのでどなたか教えてください( ;∀;)

 

ではindex.phpもなかったら?

この次書いてないよ?

 

その時は、500エラーです。サーバーのエラーって出るやつですね。

 

404は、この場合はindex.phpの後にルーティングした先が無かったときとかに、出るエラーですね。

 

雑かもですが。

スマホ更新なのでちょっと見づらかったかもしれませんかこの辺で!

fish shellを使ってみた。syntaxや候補を薄文字表示したり【139日目】

インストールしてみた

brew install fish

おしまい。

切り替えてみた

bashはデフォルトのままがいいので、たまに切り替えるだけにしようと。

ってことで

fish

以上。戻るのもまあ当然

bash

ってすればいいよね。

使ってみた

やっべ、ちょーたのしい。

f:id:willow710kut:20180301204302g:plain

f:id:willow710kut:20180301204730g:plain

いいとこ

見ての通り、薄文字で予告出たり、予想候補を矢印やタブで選択出来たりとか。

ディレクトリも自分より上のディレクトリの頭文字が見れたりとか。

いろいろと見やすい。

難点

cd blog && touch test.txtみたいなアンパサンドとか、一部使えない記法とかあり。

でもこれは楽しい。

みなさんも遊びで入れてみては?

nginxのdefault.confがやってることを見直す【138日目】

こんな感じのを書いてました

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

location /

location /http://domain_name.jp/○○○みたいに、ドメイン一致した後の任意のURLに対しての処理。

で、やっていることは、何来てもぜーーんぶindex.phpを動かすこと。

なんでこうしてるの?

URLに合わせて読み込むファイルを変えると、最初の読み込みで必ずやりたいこととか、URL変えるときとか、ファイルの変更が起こる度に変更するファイルが変わっちゃって大変・・・

だから、最初に読み込むファイルを『index.php』に固定して、『index.php』から、初期準備ファイルやURLの設定ファイルを読み込むと良い。

Laravelだと『route.php』にURL周りの情報が集約されてるし、こういう構成に出来るのも、最初に読み込むのを『index.php』に固定しているおかげ。

location ~ .php$

location ~ \.php$に書いているのは、.phpのファイルを指定された時は、ちゃんと実行した結果を返してね的なやつ。(らしい・・・)

なんでらしい、なのかは、これ書かなかったら、phpファイルがそのままダウンロードされたので(´;ω;`)

これの意味についてはまだ理解してないので、いい記事どっかにないかな・・・

言いたいこと

設定ファイルが、どうしてこうなっているかを理解すると、よりプログラムの流れが理解出来るね!

そしてnginxまだ全然わかんない、勉強しなければー!