yuuyu のすべての投稿

【php】filter_inputを使ってみる

こんにちは〜

今日はphpのfilter_inputを使ってみたというお話です。

phpのサイトはこちら

つまり、getとかpostで受け取った値をフィルターにかけてinputする、という関数ですね(そのまま)

具体的にどういう感じなのか説明見ただけでは分からなかったので、実行してみました。

(環境はphp7.4.7です)

$a = filter_input(INPUT_GET, 'name');
if($a === null){
	echo "null";
}else if($a === false){
	echo "false";
}else if($a === ""){
	echo "空白";
}else{
	echo $a;
}

これでどうなるのか。見てみます。

URL 出力
index.php 空白
index.php?name=a a
index.php?name2=a null
index.php?name[0]=a false

表の使い方がよく分からない。。

とりあえず、入力方法として思いついたものを並べてみましたが、意外にも結果は全てバラバラに。

get値がそもそもない場合は空白(””)が、

値があれば値が、

get値はあるもののそのパラメータが存在しない場合はnullが、

パラメータが存在するが配列が返された場合はfalseが

戻ってくるようです。

ちなみに、数値もstring型になります。

いろいろ返ってきて処理がめんどくさい。。という場合は

$a = (string)filter_input(INPUT_GET, 'name');

という形で、string型に変換すると、null,falseが全て空白になります!

特に分ける必要がない場合は便利ですね。

こちらのサイトを見て、filter_inputの存在を知ったのですが、普通にissetだけで確認してると悪意のある人が配列を投げてきたらエラーを吐くとかいう可能性があるので、慎重になる必要があるみたいですね。。

それでは、また〜

gitの設定コマンド(メモ)

今回は本当にメモです。 ちなみにまだ使い始めて間もないので、これ必要なコマンドだろ!っていうのもあるかもしれませんが 使うようになったら増やします。。

gitの生成

git init

gitのユーザーデータ設定

名前

git config --local user.name XXX

メールアドレス

git config --local user.email XXX@example.com

※どちらも–localは省略可。なくてもlocalが設定されるっぽい?

※確認をするときは最後のXXX以降を消す。

設定の確認

git config -l

参考サイト

君には1時間でGitについて知ってもらう(with VSCode)

Gitの設定をgit configで確認・変更

【css】簡単なアニメーションでの失敗談

こんにちは〜 今日は、cssでアニメーションを作った時にちょっとしたことでミスったと言う話をしたいと思います。

ちなみに、今回作りたかったのは、横に移動させると言う超簡単です。 実際のコードはこんな感じ(ミスver)

.block{
    position: fixed;
    height: 50px;
    width: 50px;
    transition: 0.5s;
}
.block.click{
    position: fixed;
    height: 50px;
    width: 50px;
    left: 100px;
    transition: 0.5s;
}

こんな感じ。50×50のブロックが一つ、クリックすると、jsによってクラス名「click」が付いたり外れたりします。 そうすることで、transitionで設定した0.5秒かけて右に100px動く(left:100px)、と言う予定です。

一見特に間違えてなさそうですが、実は、アニメーションせずに一瞬で右に100px動いてしまいます。 何故か。 原因は意外に単純で、「click」がない方に、leftの初期値が設定されていないからです。 そのため、アニメーションの開始地点が存在せず、すぐに移動してしまったという訳です。

まぁ、初期値が0だとしてもきちんと設定しようというお話でした。

.block{
    position: fixed;
    height: 50px;
    width: 50px;
    left: 0px; /* これ、忘れずに */
    transition: 0.5s;
}
.block.click{
    position: fixed;
    height: 50px;
    width: 50px;
    left: 100px;
    transition: 0.5s;
}

それでは、またね〜

【PHP】そのミリ秒の取得の仕方、安全ですか?

こんにちは〜

何となく釣りタイトルを作りたい気分だったので、こういうタイトルになりましたすいません。まぁ興味のある人は最後まで見てください〜(笑)


さて本題。phpでミリ秒ありの現在時刻を取得する際、どうやって取得しますか?

調べてみるとこういう感じのコードをよく見かけます。

$time = date("Y-m-d H:i:s") . "." . substr(explode(".", (microtime(true) . ""))[1], 0, 3);

出力例:2020-05-13 09:41:40.208(※アクセス時間によって変化しません。例です)

一見これでも大丈夫なように見えます。実際動いてますし。

じゃあ何がダメなのか。

explode(".", (microtime(true) . ""))[1]

ここです。

explode関数は、最初の引数の文字列で、二つ目の文字列を区切り、配列化します。

今回は、”.”(ピリオド)で、(microtime(true) . “”)を区切っています。

次に、microtime(true) 。これは現在時刻をマイクロ秒まで含めて返します。

これは、引数にtrueを指定すると、float値で返します。

1589363558.7723

こんな感じ。(編集時間バレそう)


さて、どこが問題かわかったでしょうか?

そう、microtime(true)です。これの戻り値はfloatで返すのが問題なのです。

例えば、下記はどう表示するのか。

echo 205.250; // 205.25 と出力
echo 306.100; // 306.1 と出力
echo 110.000; // 110 と出力

そう、小数点以下が.000になると、ドットが消えるのです!

ドットが消えるとどうなるかと言いますと、

explode(“.”, (microtime(true) . “”))

の値が、要素が1個の配列が返されるのです。

ということで、小数点以下が.0000の時に、下記を実行すると、

explode(".", (microtime(true) . ""))[1] //Undefined offset:エラーが起きる

まぁそもそもmicrotimeが小数点以下4桁まで出力するので、0000を出すのはごく稀ですが。

それでもエラーが起きてしまった場合、最初のコードの$timeにはnullが返されてしまいます。(warningエラーなので止まらない)

実装方法にもよりますが、時間操作で重要なコードを実行していると、大変なことになるかもしれません。(いや可視化の時間出力で重要なコードってあんまりないか・・・?)

ではどうするのか。変数に代入してifする?でもそれは面倒です。

簡単な方法があります。

ドットがなければ、ドットを作ればいいのです。(笑)

$time = date("Y-m-d H:i:s") . "." . substr(explode(".", (microtime(true) . ".000"))[1], 0, 3);

float型をstring型にしていた、 . “”に、.000を付け足すのです。

(ちなみに、.1200みたいな感じで、小数点以下が2桁になる時も3桁にしたい場合は、”000.000″にすると0埋めされますので、一石二鳥?)

こうすることで、仮にint型になるような値が返ってきても、.000が2つ目の要素となり、エラーにならずに返すことができるようになります。


改めて考えれば当たり前の配慮ですが、整数値になる可能性が1万分の1が故、あまり気付けなかった弱点です。

ちなみにこの記事を書いた理由は、このエラーが起きたからですね(笑)

唐突に予期しないところからエラーが起きてびっくりしました

ということで、またね〜

FileZillaで拡張子の関連付けが消えた件

こんにちは〜

FTP通信の代表的(?)なものとして、FileZillaがあります。自分もお世話になっていますm(*_ _)m

ところで、このFileZillaさん、ver3.48.0のアップデートで、どうやらファイルの関連付けの設定を変更したらしく、何を押しても関連づけがされていませんというエラーが出るように。。(たまには画像を↓)

txtですら無理ですか、なるほど。

しかも、「システムの関連付けを使用する」を押すと、エラーが。。

いやどうしろと・・・。

ということで、設定からとりあえず使いそうなものを一気に設定しておきましょう〜

gz /System/Applications/Utilities/Console.app
log /System/Applications/Utilities/Console.app
txt /System/Applications/TextEdit.app
png /System/Applications/Preview.app
jpeg /System/Applications/Preview.app
jpg /System/Applications/Preview.app
gif /System/Applications/Preview.app
htaccess /Applications/CotEditor.app
html /Applications/CotEditor.app
php /Applications/CotEditor.app
js /Applications/CotEditor.app
css /Applications/CotEditor.app

(個人的に使いそうなもの。ちなみにMacです。)

まぁCotEditorをよく使うので、それっぽいファイルは全部Coteditorでw

必要に応じて変えてください〜


で、設定

下の方にある、「ファイルの編集」を開いて、「ファイルの関連付け」を選択

「ファイル関連付けのカスタマイズ」というところに、さっきのテキストを貼り付け。

(ちなみに、ここでCtrl+Cを押すと、落ちます。コピーしたい場合は、右クリックからコピーしましょう)

これで左下にある「OK」を押せば完了です!

いや最低限の関連付けは残しておいてくれとは思いますが、何かあったんでしょう。

ちなみに、最初の「ファイルが関連づけられたプログラムがありません」のエラーで、「カスタムプログラムを使用」を押してしまうと、さっき設定したファイルの関連付けに改行が消され、ぐちゃぐちゃになりますので、間違ってもここで設定しないように。(せめてこれくらいは直して?)

ではまた〜

mouseイベントを確認する

※ただのメモ帳&他ブログの紹介です。


こんにちは〜

今日はjavascriptで、cssでいうhoverのイベントをセットしようとした時に、想像していたのと違う挙動が出たので、調べていると出てきたサイトの紹介です。

まずは今回のハマったコードをご覧ください。

<div id="div_id">
    <a href="example.com/">
        url
    </a>
</div>
<script>
document.getElementById("div_id").addEventListener("mouseover",(e)=>{console.log(e);});
</script>

これを実行してみると、logに出てくるのはなぜかaタグの情報。

しかも、divタグでも呼ばれるらしく、カーソルを外した時にも呼ばれるというよく分からない状態になりました。

それで、調べてみると、下記サイトが。

イベントがどのタイミングで発火されるかを可視化してくれているサイトです。

これでみてみると、どうやらmouseoverは内部のDomに連携して外のDomも呼ばれるらしい。

ということで、内部にもある場合は、mouseoverではなくmouseenterを使った方がいいのだとか。

ではまた〜

localhostに別端末で接続したい

こんにちは〜

今日やりたいのは、phpをlocalhostで起動させ、別端末でそのphpにアクセスしたいと思ったので、そのやり方を考えてみる。

環境:

Mac  Catalina

iPhone 13

php 7.4.4

前提:同じwi-fiに繋いでること


まずは普通に解放する。

% php -S localhost:8080 -t ./ 

※フォルダ名が長いこともあり、./のところにドキュメントルートかくと大変なので、そのフォルダでターミナルを開いて実行してます。必要に応じて書き換えてください。

これで、Mac上では「http://localhost:8080/index.php」などでアクセスできるようになる。

じゃあ、iPhoneでアクセスするには?

「http://localhost:8080/index.php」→もちろんできない

localhostをmacのIPv4アドレスにするとアクセスできるらしいので、

「http://XXX.XX.XX.XXX:8080/index.php」(Xは必要に応じて書き換えてください)

でアクセスしてみるが、これもできなかった。

ファイアーウォールが邪魔しているのかも?と思い、切ってみるも変わらず。

次にbluetoothでつないで、「システム共有」→「共有」に書いている

「XXXXXX.local」(特にいじっていない場合はコンピュータ名+.local)

でアクセスすると繋がるらしい。試してみる。

「http:/XXXXXX.local//index.php」

これもできない。(ちなみにwwwがあると無理らしいので取り除くもこれもダメ)

もう少し調べてみると、上の.localの前にハイフン「-」があると不具合が起きる、とのことなので、これを取り除いてみるが、これもダメ。

そして思いつく。そもそもlocalhostじゃなくていいのでは?

% php -S XXX.XX.XX.XXX:8080 -t ./ 

(※Xにはipv4の値。他の値で実行できるのかは不明)

これで解放してみると、iPhoneでも無事接続できた!

ただlocalhostで接続できないので、macも上記urlになるが。。

※一応iPhoneのwi-fiを切るとアクセスできないので、ローカルでしか繋がらないとは思うが、調べて出てきたやり方じゃないので、操作は自己責任でお願いします。

ではまた〜

electronでデベロッパツールを表示させない

electronでアプリケーションを開発し、さてパッケージ化させよう。

そしてその時に、とりあえずやっておきたいのがデベロッパーツール を無効にしいておきたい。

では調べよう。

・・・と、思ったものの、なかなか出てこない。(調べ方が悪いのかな?)

ので、頑張って探してみました。

// mainWindow = new BrowserWindow();

//デベロッパツールが開かれた時
mainWindow.webContents.on('devtools-opened', () => {
    //デベロッパツールを閉じる。
		mainWindow.webContents.closeDevTools();
	});

これを、ウィンドウのイベントに追加するだけ。

コメントにも書いてるとおり、開いた瞬間に閉じるというのをやっているので、ショートカットキー連打したらチカチカするが、とりあえず表示はできないようになった。

ちなみにウィンドウにイベントを渡しているので、複数ウィンドウを開ける場合はその都度イベントを渡してください。

ではまた〜

coteditorのアウトラインに、コメントを入れたい

誰が必要としているのかわからない記事を今日も書いていきます(笑)

coteditorを使っていると、左上に「<アウトラインメニュー>」と言うのがあるのをご存知でしょうか?

これは、functionやclassを定義した時に、その場所へ素早く移動できるようになっている、いわば目次のようなものです。

これはコードの量が多くなればなるほど重要になるのですが、多くなるほど面倒くさくなることが一つ。

そう、関数名は基本英語なので、読むのが辛い!!

と言うことで、今回はそのアウトラインに、コメントを入れることができるようにしようと言うことです!

では。

ちなみに、自分が必要だと思った言語及び関数だけ書いていくので、必要に合わせて書き換えてください〜

まず共通事項。

Coteditor → 開発環境 → フォーマット → インストール済みスタイルの、変更する言語 → 右下にあるペンのマーク → アウトラインメニュー

ここまで開けてください。

1.「Javascriptのfunction」

左下の「+」から、正規表現の項目に

「 ^([\t ]*)(\/\/\/)([^\n]+)(\n)([\t ]*)(function)([^{]*)\{ 」

と入力。また、メニュータイトルパターンに

「 $5$6 : $7 – $3 - 」

と入力。説明欄には「function」と入れてください。

また、これだとコメント欄ありと無しの二つが出来てしまうので、

元々あった「function」の正規表現欄を

「 ^(?!\/\/\/).*\n([\t ]*)(function)([^{]*)\{ 」

に書き換えてください。

/// 例えの関数
function exam(){
    return 0;
}

これで、上記のように、 /// からコメントを書くと、表示されるようになっていると思います!

ちなみに間に空白行を入れたり、二行に分けて書いたりすることはできないので注意。

以上です!

他は使う時が来たら書きます〜。

ではまたね〜