やったこと

webサービスを作るときに考えたことを垂れ流します

【PHP】指定した日時の週の月曜日を求める!

指定した日時の週を計算して、その週の月曜日の日時を返却するよ!
コードは下記みたいな感じ!

//例えば2020年03月10日をセット
$ymd = "20200310";

$ymd_time = strtotime($ymd);
$week_num = date("w",$ymd_time);

if ($week_num == 0){
//日曜日だった場合
  $monday = date('Ymd', strtotime("-6 day", $ymd_time));
}else{
  $ymd_time = $ymd_time + 24*60*60;
  $monday = date('Ymd', strtotime("-{$week_num} day", $ymd_time));
}

//月曜日の日時を出力
echo $monday;

2020年3月21日(土曜)を入力すると → 2020年3月16日(月曜)が返却される。
2020年3月22日(日曜)を入力すると → 2020年3月16日(月曜)が返却される。
2020年3月23日(月曜)を入力すると → 2020年3月23日(月曜)が返却される。
2020年3月24日(火曜)を入力すると → 2020年3月23日(月曜)が返却される。

みたいな挙動になるよ!

もっとうまい計算方法あるかもしれないけど、頭悪いからよく分からなかった・・。
でも計算できたらかこれでいい!

以上!

アマゾンRDSに踏み台からリモート接続できなくなってしまった!

WorkbenchというDB管理ソフトを使って、いつもssh踏み台経由でRDSサーバーに接続してるんだけども、先日アクセスを試したら急に接続不能になってしまっていた。

エラー文には「SSL connection error: protocol version mismatch」と表示されているけども、なんだか原因がよくわからない・・。

結論からいうと、下記のAWSのアナウンスのように、RDSサーバーの証明書の期限が切れてしまっているのが原因だった。

Amazon RDS のお客様: 2020 年 3 月 5 日までに SSL/TLS 証明書を更新してください | Amazon Web Services ブログ

WorkbenchのSSLオプション設定をよく見ると、「if available」のチェックが有効になってるんだけども、要するにこれをオフにすればいいんだよね。

ポチッとボタンを押して無効化することで、無事MySQLにアクセスできるようになりました。

めでたしめでたし。

【MySQL】Like検索の失敗は日付型が原因だった

とあるサイトでユーザーを検索する処理を作っていたんだけど、
MySQLで「Illegal mix of collations for operation ‘like’」とエラーが出て処理が失敗してしまった・・。

「ユーザー名」とか「地域」とか「生年月日」とかでLike検索をしていたんだけど、原因は「生年月日」の項目だった。

日付型のカラムは照合順序の項目を持たないので、like検索できないんだって・・。

しょうがないので生年月日はlike検索の対象から外すことにしました。

これでOK!

【JQuery】WordpressでAjaxの送受信がどうしても失敗してしまう・・。

とてもくだらない話なんですが、下記の記事を真似してWordpressサイトにAjaxでpost送信をしようとしました。

でも「Bad Requesut」というエラーになってどうしても失敗してしまう・・。

Ajaxでpost送信 - Qiita

原因は「dataType:」という箇所。ここは「datatype:」としなくてはダメ!

なんかしらんけどWordpressではこうしないとAjax通信できないみたい。

こんなことで数時間ほど費やしてしまった・・。

【Wordpress】特定URLにマッチするときにベーシック認証をするよ!

ワードプレスで特定のURLが含まれているページにだけベーシック認証をかけるよ!

ワードプレスの「.htacccess」に以下のような文言を追加!

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

# 以下を追加!
SetEnvIf Request_URI "/secret_page*" noauth
AuthUserFile /var/www/mysite/.htpasswd
AuthName "Input your ID and Password."
AuthType Basic
require valid-user
Satisfy any
Order Deny,Allow
Deny from all
allow from env=!noauth

これでURLに「/secret_page」が含まれてるページに、ベーシック認証がかかるよ!
上の例では、パスワードのファイル「.htpasswd」は、「/var/www/mysite/.htpasswd」という場所に置いておいてあるよ!
このファイルは別に好きなとこに置いていいからね!

パスワードの内容は以下のサービスとかで作ったやつを、コピペで張り付ければいいからね!
htpasswdファイル生成(作成)

以上!

goofysでマウントしたS3ディレクトリでSQliteが使えない件。

goofysでEC2サーバーにS3バケットをマウントして、ディレクトリ下にSQliteのファイルを設置、

そこにデータをいろいろ書き込もうと思ったんだけど「disk I/O error」というPDOのエラーが出て失敗してしまう・・。

「SELECT」とかでデータを見ることはできるんだけど、「UPDATE」とか「INSERT」がエラーとなってしまうみたい。

開発者の人のコメントを見ると、どうもgoofysはSQliteに対応していない様子。
https://github.com/kahing/goofys/issues/340

SQliteはS3でないディレクトリに設置して使うしかなさそうだね・・。

Laravelのバージョンはどのファイルに書いてあるの

Laravelのバージョン情報が書いてあるファイルはこれ!

./vendor/laravel/framework/src/Illuminate/Foundation/Application.php

こんな風にバージョン情報が書いてあるよ!

    /**
     * The Laravel framework version.
     *
     * @var string
     */
    const VERSION = '5.5.40';

「The Laravel framework version」の文字でgrepして見つけてみてね!

以上!