[…Sakura].forEeach((hanabira)=>{});

2023.04.02

Logging

おはようございます。これが投稿されている頃には桜が散っている頃かも知れません。さくらの花はぱっと咲いてぱっと散るというイメージです、人生も同じようなもので100年時代だと言われているけれど、100年もあっという間なんだと思います。何年生きれば十分生きたと思うのだろうか?

老いるともう生きるのは十分だと思うかも知れませんが、今の若さであと何十年も生きるような社会になれば考えが変わるじゃないかなって思います。老いが病になってしまった時、人は進んで老い選択するのだろうか?。恐らく一部の人しか選択せず殆どの人は遺伝子編集技術で若さを手に入れることだろうと考えている。

Genome Editing with CRISPR-Cas9

遺伝子治療が世の中に取り入れられると障害という言葉がなくなる。目が見えない耳が聞こえないや知能が低いなどの問題すら、遺伝子治療で解決する。生まれる前に遺伝子治療で障害は取り除くことが出来るようになった今日。次のステップは障害になった時に遺伝子治療で障害を取り除くことではないだろうかと。恐らくAIの恩恵で遺伝子治療など技術革新も飛躍的に伸びていくだろうとそう思うと、老いも克服、障害の克服も可能になる未来が案外すぐ近くまで来ている気がします。

タグ

AI, Instagram, taoka_toshiaki, taoka-toshiaki, あっという間, さくら, ステップ, , 低い, 克服, 恩恵, 技術革新, , 殆ど, , 知能, , 遺伝子治療, 遺伝子編集技術, 障害,

さくらVPSの仕様なのか、分からないけど。

2022.10.14

Logging

おはようございます、昨日は暖かい陽気でしたね🫠。

さて、昨日ドハマリして数時間、時間を費やしてしまった問題が有りました。結論から言えばOSのバージョンの関係で上手くいかなかった。さくらの中の人(開発者)、OSバージョンアップした際の挙動を確認して無さそうな気がします。

どんなトラブルになったのかと言えば、こんな感じ。

作業用VPSサーバーを設置してWEBのコントロールパネルからssh鍵の設定して作業に取り掛かろうとテラターム(ローカル)でログインした所、エラーが出る。

何度、トライしてもパーミッションが駄目だよと弾かれるので、ウインドウズでユーザーの設定なんかを変更したりしたのだけど駄目だった。

リナックスやMacからだとログインできるだよね、なのでコレはWindowsの問題だと思っていた、パーミッション原因だと思っていたのだけど、前サーバーはssh鍵付きでログイン出来てたので変だなと思い、前サーバーのssh鍵を変更してみたら、こちらはすんなりとログイン出来てしまった。

ここで何が違うかと言えば、OSのバージョンだけ8系と9系の違いでログイン出来なくなる。恐らくこちら側の設定がどうこうではなく、何か・・・の接続時のデータ送受信で変になっている気がします。

この事象をさくらVPSに問い合わせしていないので、原因は分からないだけど恐らくOSのバージョンの違いで今のところ発生している問題だと思います。

タグ

Mac, OS, SSH, VPS, web, Windows, アップ, ウィンドウズ, エラー, コレ, コントロール, サーバー, さくら, ターム, テラ, ドハマリ, トライ, トラブル, バージョン, パーミッション, パネル, ユーザー, リナックス, ローカル, ログイン, , , 仕様, 何度, 作業, 原因, 問題, , 変更, 感じ, , 挙動, , 昨日, 時間, , 確認, 結論, 設定, 設置, , 鍵付き, 開発者, 関係, 陽気, , 駄目,

制限付きのクロンを無限寿限無にする方法。 #php #無限 #cron

2022.10.12

Logging

おはようございます🦏。昔の文章を読んでくれて今の記事を読まないユーザーさんがいます、凹む😖。

さて、今日はさくらレンタルサーバーでcronを制限以上に使う方法を数年前に書いた記事が未だに読まれたりするのでプログラムコードを直してタイトルも直してQiitaGithubにUPしました。

そのUPした記事があまりアクセスが跳ねなくて少しがっくりしたのがスポーツの日の朝の事です。Qiitaは何だか触りの記事かとても専門性の高い記事が人気を集めるだなって事を、この頃理解したのですが、自分は何方にも寄っていない記事なので跳ねないのかも知れません。

ソースコード貼り付けて置きます。尚、使い方などはQiitaGithubを参照してください。

<?php
date_default_timezone_set('Asia/Tokyo');
class cron
{
    public function __construct(mixed $filepath = "")
    {
        $val = @file_get_contents($this->pval($filepath));
        $obj_ = @json_decode($this->pval($val));
        $obj = (object)[];
        foreach ($obj_ as $key => $value) {
            $obj->name = "month";
            $obj->val = $value->m;
            if ($flg = $this->trigger_check($obj,"m",1,12)) {
                $obj->name = "day";
                $obj->val = $value->d;
                if ($flg = $this->trigger_check($obj,"d",1,31)) {
                    $obj->name = "hour";
                    $obj->val = $value->H;
                    if ($flg = $this->trigger_check($obj,"H",0,23)) {
                        $obj->name = "minutes";
                        $obj->val = $value->i;
                        if ($flg = $this->trigger_check($obj,"i",0,59)) {
                            $obj->name = "week";
                            $obj->val = implode(",", $value->w);
                            if ($flg = $this->trigger_check($obj,"w",0,0)) {
                                $this->command($value->command);
                            }
                        }
                    }
                }
            }
        }
    }
    public function command(mixed $command_val = "")
    {
        $command_val = $this->pval($command_val);
        exec($command_val . " > /dev/null &");
        // print "よろしくお願いします~~~!!".PHP_EOL;
        return true;
    }

    public function pval(mixed $val = "")
    {
        if (is_array($val)) {
            foreach ($val as $key => $value) {
                $val[$key] = strip_tags($value);
            }
        } else {
            $val = strip_tags($val);
        }
        return $val;
    }

    public function trigger_check(mixed $variable = "",mixed $d="",int $min=0 ,int $max=0)
    {
        if (!$variable) return false;
        if ($variable->val === "*") return true;
        switch ($variable->name) {
            case 'week':
                $value = @explode(",", $variable->val);
                return (int)$value[(int)date($d)] === 1 ? true : false;
                break;
            default:
                if (preg_match("/^(\*\/[0-9]{1,})$/", $variable->val)) {
                    $value = @explode("*/", $variable->val)[1];
                    if (is_numeric($value) && $value >= $min && $value <= $max) {
                        return (int)date($d) % $value === 0 ? true : false;
                    }
                }
                if (preg_match("/^([0-9]{1,}\,{1,})/", $variable->val)) {
                    $value = @explode(",", $variable->val);
                    $value = array_map('intval', $value);
                    return in_array((int)date($d), $value, true) === true ? true : false;
                }

                $value = (int)$variable->val;
                if (is_numeric($value) && $value >= $min && $value <= $max) {
                    return $value === (int)date($d) ? true : false;
                }
                return false;
                break;
        }
        return false;
    }
}

if($argv[1]){
    //argv
    new cron($argv[1]);
}


タグ

39, Asia, class, cron, date, default, github, lt, php, public, qiita, set, timezone, Tokyo, UP, アクセス, クロン, コード, サーバー, さくら, スポーツ, ソース, タイトル, プログラム, ユーザー, レンタル, , 人気, , 今日, 何方, 使い方, 制限, 参照, 寿限無, 専門性, 少し, , 文章, 方法, , , , 未だ, 無限, 理解, 自分, 記事, ,

さくらレンタルサーバー(共有サーバー)の/home🏠はアレが見えてるよ。#知ってた?#駆け出しエンジニアと

2022.09.09

Logging

おはようございます。今日、高知県では雨☔の地域もあったりするそうですよ🙄。

さて、今日はさくらレンタルサーバー(共有サーバー)の/home🏠の話です。さくらレンタルサーバーじゃなくても共有サーバーを借りたことがある人は知っているかも知れませんが・・・常識?🤔。

さくらレンタルサーバーの/homeの階層に複数のディレクトリが存在します。そのディレクトリのディレクトリ名はさくらレンタルサーバーのアカウント名であり、初期のドメイン名になります。

reborn9.sakura.ne.jp

なので、ディレクトリ名.sakura.ne.jpにすれば初期のドメイン名を生成することが可能ですし、ログインでXXXXX…みたいな事が出来たりしまいます。赤の他人のアカウントでログインするのはハッキングにあたりますので、しないように!

でも、初期のドメインを見ることぐらいなら、良いじゃないかなってことで?WEBサーバーな訳ですからね。

という事で、こんなコードを書きました。コマンド ls -a /homeを実行し結果をtxt.txtのファイルに保存します。そのtxtファイルをPHPで読み込み、ディレクトリ名からリンクリストを生成(index.html)という様な流れ。index.htmlの開いてリンクをクリックすれば/homeの配下の初期ドメインへ飛んでいけます😱、ちょっと悪趣味ですがね…。

コードはこんな感じになります。実行するときはls.phpを開いてください。ls.phpを読み込み完了後、index.htmlのリンクをクリックしてみてください🤐。

尚、下記のファイル全てを同じ階層のディレクトリに置くこととします。※ファイルはUTF-8で。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<link rel="stylesheet" href="assets/css/style.css">
<title>Title</title>
</head>
<body>
<a href="index.html">index.html</a>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
</body>
</html>
<?php
exec("sh ls.sh",$output,$result_code);
#!/bin/sh
ls -a /home > txt.txt
/usr/local/bin/php href.php
done
<?php
ob_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<title>lsit</title>
</head>
<body>
    <button class="btn btn-primary" type="button" id="btn">BTN</button><br>
    <?=setlist()?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script>
    document.getElementById("btn").addEventListener("click",function(){
        for( let i in document.getElementsByTagName("a")){
            document.getElementsByTagName("a")[i].target = document.getElementsByTagName("a")[i].href;
            document.getElementsByTagName("a")[i].click();
        }
    });
</script>
</body>
</html>
<?php
file_put_contents("index.html",ob_get_clean());
?>
<?php
function setlist(){
    $txt_data =  explode("\n",file_get_contents("txt.txt"));
    $str[] = "<ul>";
    foreach($txt_data as $key=>$val){
        $str[] = (preg_match("/\./",$val) || !$val)?"":"<li><a href='http://".trim($val).".sakura.ne.jp'>".trim($val).".sakura.ne.jp</a></li>";
    }
    $str[] = "</ul>";
    return implode("\n",$str);
}

タグ

, home, jp, ne, REBORN, sakura, xxxxx, アカウント, アレ, エンジニア, , こと, サーバー, さくら, ディレクトリ, ドメイン, ドメイン名, ハッキング, レンタル, ログイン, , , 今日, 他人, 共有, 初期, 可能, 地域, 存在, 常識, 生成, 複数, , , 階層, , 駆け出し, 高知県,

先日、サーバーを移行しました。AWSさようなら。

2022.06.30

Logging

おはようございます。初夏らしいですが初夏? 増暑です…😆。映画、SLAM DUNKが待ち遠しいです。

其れはさておき、サーバーをAWSからさくらVPSサーバーに移行しました、迷っている暇は無かった・・どんどんと経費がかさむので止む得なく急遽、平日の休みを使用してサーバーを移行しました。移行したんだけど、少しミスってアクセスの多いサーバーを見えなくなるという現象が出てしまいました。40分ほど閲覧できなくなってしまっていた。

結構焦りますよね。

閲覧できない状態が数時間とか続いたら大変ですよ本当に…。仕事では失敗したくないなって思います。今回の反省点はやはりサーバー移行すると何かしら環境が違うので動かなかったりする。

そういう時は落ち着いて深呼吸でもして、ログを見ることが大事、結局のところログに答えが載っていることが多いです。今回もそんな感じでした。

因みに以前書いた、サーバー移行時にscpを使う方法。これはFTP使用するよりも時間短縮になるから覚えていたほうが賢明です。

scp -irp /~/example.pem /var/www/html/* root@example.com:/var/www/html/
# scp -irp [鍵.pem] [転送元ディレクトリ] [ユーザー@ホスト:転送先ディレクトリ]

タグ

40, AWS, DUNK, SCP, SLAM, VPS, アクセス, こと, サーバー, さくら, ところ, ミス, ログ, 今回, 仕事, 以前, 休み, 使用, 先日, 其れ, 初夏, 反省点, , 大事, 大変, 失敗, 少し, 平日, 感じ, , 方法, 映画, , , 本当, 深呼吸, 状態, 現象, 環境, 移行, 経費, 閲覧,

お店のホームページ(サイト)の作り方その弐

2022.03.05

Logging

おひさしぶりです。
ブログを数日休んでいました。こらからは不定期という感じでブログを書いてきます。
このブログはお店のホームページ作り方その壱の続きになります。

下記が予約ボタンと地図の作成手順です、こちらの変更部分をindex.phpのファイルを書き換えてください。予約には予約システムSelectType (セレクトタイプ)を使用しているのでアカウントを作りご自身のお店に合わして管理画面から設定してみてください。

会社の地図に関しては、GoogleMapを使用しています、こちらをindex.phpに貼り付けるのですが必要ない部分があるのでその部分を削除して貼り付けています。動画を注視してみるとわかるかと思います。

予約ボタン
ぐーぐるまっぷ・ お店の地図

今回はここまでです。次回はさくらレンタルサーバにファイルをアップロードする方法とSSLの設定を行い完了となります。

タグ

6, com, GoogleMap, https, index, php, SelectType, SSL, vMSy-CCthA, watch, www, youtube, アカウント, アップロード, お店, ここ, こちら, ご自身, サーバ, サイト, さくら, システム, セレクト, タイプ, ファイル, ブログ, ホームページ, ボタン, レンタル, 下記, 不定期, 予約, 今回, 作り方, 作成, 使用, 削除, 動画, 地図, , 変更, , 感じ, 手順, 数日, 方法, 次回, 注視, 画面, 管理, 設定, 部分,

新さくらレンタルサーバーが昨日から使えるようになっている。

2022.02.17

Logging

おはようございます、今日の朝は一段と寒さを感じました。

さて今日はレンタルサーバーの話です。タイトル通り新さくらレンタルサーバーが昨日から使えるようになっているので使用してみました😌。

処理能力は確かに早くなっている気がします、まだブログなどを取り扱っていないのでどこまで早くなっているかは計測できてはいません。何故、ワードプレスなどを使用すると表示速度が遅くなるのかという疑問を持つ人も多いと思います。答えは一概に言えないのですが。記事数が増えてくるとデータベース(保管庫)から記事を探し出すのが遅くなるという理由が第一に上げられます。その他、レンタルサーバー側の通信速度やデータベースの処理能力が遅い、レタリング能力が遅いなどいろいろな理由により表示速度が変わります。

レンタルサーバーを使用していたとき、TOPページなどは表示速度が早いけど記事ページになると遅いというサイトを見かける人もいるかと思います、これはキャッシュ(一時的保存)という技術を取り入れているからです。この方法を取り入れると良くアクセスするサイトは表示速度は早いけど、あまり参照しないページは遅くなるという事に繋がります。

ここまで話しましたが表示速度を本当に改善したい場合はレンタルサーバーをグレードアップさせるよりもサーバー側の通信速度を改善するのが一番手っ取り早く表示速度が早くなります。

プラグインを導入したり、画像を軽量化するなどの巷に溢れる情報で改善するよりか、サーバーサイドの通信速度を見直すこととサーバー側の処理能力を見直すことの方が断然に表示速度が早くなります。

因みに今日から自分が作った掲示板サービスを運用します、こちらでの告知はもう少し後になります。

タグ

TOP, いろいろ, キャ, これ, サーバー, サイト, さくら, その他, タイトル, データベース, とき, どこ, プレス, ブログ, ページ, レタリング, レンタル, ワード, , , 今日, 使用, 保管, 処理, 昨日, , , 理由, 疑問, 答え, 能力, 表示, 計測, 記事, , 通信, 速度,

新サービスをいま作っています、お披露目はさくらレンタルサーバー、Newサーバ…。

2022.02.10

Logging

今日の朝は雨がシトシトと降っていますね☔。昼からは高知県、晴れるそうです。

新サービスをいま作っています、お披露目はさくらレンタルサーバー、新サーバーがリリース後になります、いま、大枠のデザインとHTMLコードを書いています、バックエンドの部分はこれからです。

【さくらのレンタルサーバ】Let's Encrypt(無料SSL)を設定してみよう

尚、このサービスはさくらレンタルサーバーのNewサーバーで出来れば運用したいと思っています、何故なら新サーバーでは、表示速度が今までと違いかなり早くなったそうです。そしてセキュリティ面もありますから、そこらへんを心配しないで良いというのは心配しないで開発だけに没頭出来ますからね。

因みにどんなサービスかといえば、掲示板なのですが2chなどと違って、今作っている掲示板では競合が少ない分野でこれからも伸びそうな分野の掲示板です。その掲示板を開発して3月頃から運用していきたいなって思っています。リリース後にこちらでもアナウンス(報告)したいなって思っていますので、ブログチェックしてみてください。よろしくお願い致します。

タグ

2, , ch, html, new, アナウンス, いま, エンド, お披露目, かなり, コード, こちら, これ, サーバ, サーバー, サービス, さくら, セキュリティ, そこら, デザイン, バック, べん, リリース, レンタル, , 今日, 分野, 大枠, 心配, 掲示, , , 没頭, 競合, 表示, 速度, 運用, 違い, 部分, 開発, , 高知県,

お気づきかと思いますが、サーバーを密かに変えました。(密かではないですけど。)

2022.01.08

Logging

お気づきかと思いますが、サーバーを密かに変えました。変えたのは年末あたりです、それから裏と表でサーバーをゴニョゴニョして何とか運用している感じです。変えた理由は経費削減ということが一番の理由ですね😌。

変えたことにより表示速度が若干早くなっているかのように思えます、サクラレンタルサーバーでは土台はnginx + Apache2.4系だったらしいので「.htaccess」が使用できていたのだと思いますが、現在、運用しているサーバーは nginxで動いております。 nginx上でApacheをどうやって動かせばよいのか、知見がないのでnginxだけ動いております。調べればやり方が書かれているサイトがあると思います。

Javaのログライブラリ Log4j に最恐の脆弱性発覚 | PHP 8.1 | AWSのQ&Aサービス re:Post | Figmaからコード生成 Amplify Studio

12月にlog4jという脆弱性が見つかった事により、ApacheやJAVAなどに影響を与えているようです、そんな事もあったので今回はApacheサーバーを避けてnginxで構築したわけです。IPを調べるとどこのサーバーを使用しているか分かると思いますが、敢えてどこのサーバーのどのプランを使用しているかの公表は控えさせてもらいます。

因みにサーバーが落ちてもメールサーバーは別サーバーを使用しているので影響はないようにしています。今回分かったことはクラウドと言われているサーバーは、クリック一つでいろいろ出来るようになっているけれども、それを使用すると別途お金が発生するように設計されていたりしてます。なので自分はそこらへんお金を使いたくないので手動で対応しています。

結局のところ、VPSでゴリゴリとサーバサイド知見がある人にはAWSやGCPというサービスはポチポチ押すだけで、サーバー構築できるけど、もったいないと思うだけなのかもしれません。AWSやGCPの良い所は可用性だなって思えます。そしてオンプレと違ってサーバーが落ちてもAWSやGCPの障害のせいに出来ることかもしれません。

強者になりたい今日このごろでした・・・現場からは以上です。

タグ

12, 2.4, 4, Apache, htaccess, java, log, nginx, こと, ゴニョゴニョ, サーバー, サイト, さくら, やり方, レンタル, , , , 今回, 使用, 削減, 土台, 年末, 影響, 感じ, 構築, 現在, 理由, 知見, 経費, 脆弱性, 若干, , 表示, , 速度, 運用,

Nginxよりも爆速なLiteSpeedを使ってみたいなと思っている。

2021.09.05

Logging

Nginxよりも爆速なLiteSpeedを使ってみたいなと思っている。LiteSpeedはApacheとも互換性があって情報を引き継ぎやすいと言われています。なのでWEBサーバーとしては最適なソフトウェアだと思います。但し無料枠ではすべての互換しないみたいです。すべての機能を使い倒したい場合は有償版をやはり購入しないといけない。どれぐらい爆速かを知りたい場合はロリポップが提供しているLiteSpeedで体感してみるのが良いかもしれない。

自分はVPSサーバーにOpenLiteSpeed(無償版)を入れてみようと思います。さくらレンタルサーバーでブログなどを運用しているのだけど、それをVPSサーバーに移行しようと思っています。

タイミングを見て切り替えを行いたいのですが、今の所、さくらレンタルサーバーで運用します。尚、 LiteSpeedが提供しているWordPressのプラグインがありそれをインストールすることによりLiteSpeedの性能を引き出すことが可能だとか。

Litespeed Cache General Settings

さくらレンタルサーバーもLiteSpeedを使用するようになれば良いのだけど当分は無理そうな気がします。自分みたいに大量の記事データーを保有している人はLiteSpeedサーバーに移管することも考えてみても良いかもしれないですよ。

何せ、ページの読み込みが遅いと離脱してしまう可能性を高めていると言われていますから。

タグ

Apache, LiteSpeed, nginx, OpenLiteSpeed, VPS, web, WordPress, サーバー, さくら, すべて, ソフトウェア, それ, タイミング, どれぐらい, プラグイン, ブログ, レンタル, ロリポップ, 互換, 互換性, , 体感, 場合, 情報, , 提供, 最適, 有償, , 機能, 無償, 無料, 爆速, 移行, 自分, 購入, 運用,

外部VPSサーバーからさくらレンタルサーバーのDBに接続する方法。

2020.12.04

Logging

外部VPSサーバーからさくらレンタルサーバーのDB(データベース)に接続する方法は下記のコードだけでは上手く動かない。だけど、tmpファイルを生成時にパーティションにu+xの権限を与えればこのコードは要件をみたします。因みにプロセスが残ったままになるので接続が終わったら、プロセスを削除してあげてください。なのでどのプロセスを削除する機能として追加しないと使えないかな?、時間があれば完成したコードをアップします。

なお、変数の初期値はご自身で入れてください。あとポート開放expectが入っていない場合はyumなどでインストールする必要もあります。

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta http-equiv="X-UA-Compatible" content="ie=edge">
	<meta name="Description" content="Enter your description here" />
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css">
	<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css">
	<link rel="stylesheet" href="assets/css/style.css">
	<title>ssh sqli</title>
</head>

<body>
	<?php
	print ssh_sqli_connect();
	?>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>

</html>
<?php
function ssh_sqli_connect()
{
	global $dblink,$dbname,$sshuser, $sshhost, $sshpassword,$host,$sshport;
	$ret = null;
	$cmd = "#!/usr/bin/expect -f
set timeout 3
expect -c \"spawn ssh -f -N -L $sshport:$host:3306 $sshuser@$sshhost -oStrictHostKeyChecking=no
expect \\\"$sshuser@$sshhost's password:\\\"
send \\\"$sshpassword\\n\\\"
\"
";

	$tmpfname = tempnam(sys_get_temp_dir(), 'ssh');

	$handle = fopen($tmpfname, "w");
	fwrite($handle, $cmd);
   	shell_exec("sh $tmpfname");
	sleep(3);
	$dblink = db_connect();
	try{
		for($id = 1 ;$id<=99;$id++){
			$ret = $dblink->query("SELECT * FROM $dbname.X.xtbl where $dbname.X.xtbl.id=$id;");
			if ($cnt = (int) mysqli_num_rows($ret)) {
			  $row = mysqli_fetch_assoc($ret);
			  print ($row["id"].", ".$row["name"]);
			}
		}
	}catch(PDOException $e){
		echo "失敗: " . $e->getMessage() . "\n";
	}

	fclose($handle);
	unlink($tmpfname);

	db_close();
	return "未完成";
}

function db_connect()
{
	global $dblink, $host, $user, $password, $dbname,$sshport;
	try {
		$dblink = new  mysqli("127.0.0.1", "$user", $password, $dbname ,$sshport);
		//$dblink->set_charset("utf8");
		return $dblink;
	} catch (PDOException $e) {
		echo "接続失敗: " . $e->getMessage() . "\n";
	}
}

function db_close()
{
	global $dblink;
	$dblink->close();
}

タグ

8, charset, db, DOCTYPE, en, expect, gt, head, html, lang, lt, meta, name, quot, tmp, UTF-, vie, VPS, yum, アップ, インストール, コード, ご自身, サーバー, さくら, データベース, パーティション, ファイル, プロセス, ポート, まま, レンタル, 下記, 初期, 削除, 場合, 変数, 外部, 完成, 必要, 接続, 方法, 時間, 権限, 機能, 生成, 要件, 追加, 開放,

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。

2020.11.02

Logging

WordPressの公式ウィジェットカレンダー末日がズレている?ので直した。直した箇所はこちら変数名に$ooooと書いている部分が今回修正した箇所です。修正したファイルはWordPressのインクルードフォルダにある。ジェネラルテンプレートぴーえぃちーぴー(general-template.php)

wp-includes\general-template.php 

このファイルを直しました。コアファイルなので次期UPDATEで修正されるかとは思いますが、それまではこちらの修正でなんとかなるさ?!

因みに何故、$ooooにしたのかは、お???の???という土佐弁からです。ファイルの中にget_calendar(げっとカレンダー)という関数があるのでそちらを修正しています。原因は下記です。
gmdateというものを使用している所をローカルサーバーの時間で対応しました、さくらレンタルサーバーのタイムゾーンは日本時間を指しています。若干の誤差はあるけれど酷い誤差ではないのでdateで大丈夫そうです。

要は日付の末日が正確に取れていないことが原因みたいです?
はやく修正してくれることを願っています。

function get_calendar( $initial = true, $echo = true ) {
	global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;

	$key   = md5( $m . $monthnum . $year );
	$cache = wp_cache_get( 'get_calendar', 'calendar' );

	if ( $cache && is_array( $cache ) && isset( $cache[ $key ] ) ) {
		/** This filter is documented in wp-includes/general-template.php */
		$output = apply_filters( 'get_calendar', $cache[ $key ] );

		if ( $echo ) {
			echo $output;
			return;
		}

		return $output;
	}

	if ( ! is_array( $cache ) ) {
		$cache = array();
	}

	// Quick check. If we have no posts at all, abort!
	if ( ! $posts ) {
		$gotsome = $wpdb->get_var( "SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1" );
		if ( ! $gotsome ) {
			$cache[ $key ] = '';
			wp_cache_set( 'get_calendar', $cache, 'calendar' );
			return;
		}
	}

	if ( isset( $_GET['w'] ) ) {
		$w = (int) $_GET['w'];
	}
	// week_begins = 0 stands for Sunday.
	$week_begins = (int) get_option( 'start_of_week' );

	// Let's figure out when we are.
	if ( ! empty( $monthnum ) && ! empty( $year ) ) {
		$thismonth = zeroise( intval( $monthnum ), 2 );
		$thisyear  = (int) $year;
	} elseif ( ! empty( $w ) ) {
		// We need to get the month from MySQL.
		$thisyear = (int) substr( $m, 0, 4 );
		// It seems MySQL's weeks disagree with PHP's.
		$d         = ( ( $w - 1 ) * 7 ) + 6;
		$thismonth = $wpdb->get_var( "SELECT DATE_FORMAT((DATE_ADD('{$thisyear}0101', INTERVAL $d DAY) ), '%m')" );
	} elseif ( ! empty( $m ) ) {
		$thisyear = (int) substr( $m, 0, 4 );
		if ( strlen( $m ) < 6 ) {
			$thismonth = '01';
		} else {
			$thismonth = zeroise( (int) substr( $m, 4, 2 ), 2 );
		}
	} else {
		$thisyear  = current_time( 'Y' );
		$thismonth = current_time( 'm' );
	}

	$unixmonth = mktime( 0, 0, 0, $thismonth, 1, $thisyear );
	$last_day  = gmdate( 't', $unixmonth );
	$oooothisyear  = date( 'Y', $unixmonth  );
	$oooolast_day  = date( 't', $unixmonth );
	$oooothismonth = date( 'm' , $unixmonth);

	// Get the next and previous month and year with at least one post.
	$previous = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date < '$thisyear-$thismonth-01'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date DESC
			LIMIT 1"
	);
	$next     = $wpdb->get_row(
		"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
		FROM $wpdb->posts
		WHERE post_date > '$oooothisyear-$oooothismonth-{$oooolast_day} 23:59:59'
		AND post_type = 'post' AND post_status = 'publish'
			ORDER BY post_date ASC
			LIMIT 1"
	);

	/* translators: Calendar caption: 1: Month name, 2: 4-digit year. */
	$calendar_caption = _x( '%1$s %2$s', 'calendar caption' );
	$calendar_output  = '<table id="wp-calendar" class="wp-calendar-table">
	<caption>' . sprintf(
		$calendar_caption,
		$wp_locale->get_month( $thismonth ),
		gmdate( 'Y', $unixmonth )
	) . '</caption>
	<thead>
	<tr>';

	$myweek = array();

	for ( $wdcount = 0; $wdcount <= 6; $wdcount++ ) {
		$myweek[] = $wp_locale->get_weekday( ( $wdcount + $week_begins ) % 7 );
	}

	foreach ( $myweek as $wd ) {
		$day_name         = $initial ? $wp_locale->get_weekday_initial( $wd ) : $wp_locale->get_weekday_abbrev( $wd );
		$wd               = esc_attr( $wd );
		$calendar_output .= "\n\t\t<th scope=\"col\" title=\"$wd\">$day_name</th>";
	}

	$calendar_output .= '
	</tr>
	</thead>
	<tbody>
	<tr>';

	$daywithpost = array();

	// Get days with posts.
	$dayswithposts = $wpdb->get_results(
		"SELECT DISTINCT DAYOFMONTH(post_date)
		FROM $wpdb->posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
		AND post_type = 'post' AND post_status = 'publish'
		AND post_date <= '{$oooothisyear}-{$oooothismonth}-{$oooolast_day} 23:59:59'",
		ARRAY_N
	);

	if ( $dayswithposts ) {
		foreach ( (array) $dayswithposts as $daywith ) {
			$daywithpost[] = (int) $daywith[0];
		}
	}

	// See how much we should pad in the beginning.
	$pad = calendar_week_mod( gmdate( 'w', $unixmonth ) - $week_begins );
	if ( 0 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td colspan="' . esc_attr( $pad ) . '" class="pad">?</td>';
	}

	$newrow      = false;
	$daysinmonth = (int) gmdate( 't', $unixmonth );
	$oooodaysinmonth = (int) date( 't', $unixmonth );

	for ( $day = 1; $day <= $oooodaysinmonth; ++$day ) {
		if ( isset( $newrow ) && $newrow ) {
			$calendar_output .= "\n\t</tr>\n\t<tr>\n\t\t";
		}
		$newrow = false;

		if ( current_time( 'j' ) == $day &&
			current_time( 'm' ) == $thismonth &&
			current_time( 'Y' ) == $thisyear ) {
			$calendar_output .= '<td id="today">';
		} else {
			$calendar_output .= '<td>';
		}

		if ( in_array( $day, $daywithpost, true ) ) {
			// Any posts today?
			$date_format = gmdate( _x( 'F j, Y', 'daily archives date format' ), strtotime( "{$thisyear}-{$thismonth}-{$day}" ) );
			/* translators: Post calendar label. %s: Date. */
			$label            = sprintf( __( 'Posts published on %s' ), $date_format );
			$calendar_output .= sprintf(
				'<a href="%s" aria-label="%s">%s</a>',
				get_day_link( $thisyear, $thismonth, $day ),
				esc_attr( $label ),
				$day
			);
		} else {
			$calendar_output .= $day;
		}

		$calendar_output .= '</td>';

		if ( 6 == calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins ) ) {
			$newrow = true;
		}
	}

	$pad = 7 - calendar_week_mod( gmdate( 'w', mktime( 0, 0, 0, $thismonth, $day, $thisyear ) ) - $week_begins );
	if ( 0 != $pad && 7 != $pad ) {
		$calendar_output .= "\n\t\t" . '<td class="pad" colspan="' . esc_attr( $pad ) . '">?</td>';
	}

	$calendar_output .= "\n\t</tr>\n\t</tbody>";

	$calendar_output .= "\n\t</table>";

	$calendar_output .= '<nav aria-label="' . __( 'Previous and next months' ) . '" class="wp-calendar-nav">';

	if ( $previous ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev"><a href="' . get_month_link( $previous->year, $previous->month ) . '">? ' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $previous->month ) ) .
		'</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-prev">?</span>';
	}

	$calendar_output .= "\n\t\t" . '<span class="pad">?</span>';

	if ( $next ) {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next"><a href="' . get_month_link( $next->year, $next->month ) . '">' .
			$wp_locale->get_month_abbrev( $wp_locale->get_month( $next->month ) ) .
		' ?</a></span>';
	} else {
		$calendar_output .= "\n\t\t" . '<span class="wp-calendar-nav-next">?</span>';
	}

	$calendar_output .= '
	</nav>';

	$cache[ $key ] = $calendar_output;
	wp_cache_set( 'get_calendar', $cache, 'calendar' );

	if ( $echo ) {
		/**
		 * Filters the HTML calendar output.
		 *
		 * @since 3.0.0
		 *
		 * @param string $calendar_output HTML output of the calendar.
		 */
		echo apply_filters( 'get_calendar', $calendar_output );
		return;
	}
	/** This filter is documented in wp-includes/general-template.php */
	return apply_filters( 'get_calendar', $calendar_output );
}

タグ

calendar, general-template, GET, gmdate, oooo, php, UPDATE, WordPress, wp-includes, インクルード, ウィジェット, カレンダー, コア, こちら, サーバー, さくら, ジェネラル, ズレ, そちら, それまで, タイム, テンプレート, ファイル, フォルダ, もの, レンタル, ローカル, 下記, , 今回, 使用, 修正, 公式, 原因, 土佐弁, 変数, 対応, , 時間, 末日, 次期, 箇所, 部分, 関数,

さくらサーバと別会社のサーバを使う場合。

2020.10.21

Logging

さくらサーバでメインドメインを使って、サブドメインを別サーバと紐付けて使用する場合は、ネームサーバで設定せずにAレコードで設定するに限る。この話はドメインをお名前.comなどのドメイン販売をメインで取り扱っている会社の話になると思います。レンタルサーバーでドメイン取得してサブドメインを別サーバで使用する場合もおなじですが、WEBの制作会社などは大体、ドメインをメインとして発売されている会社で取得して、サーバは別会社で取り扱っていることがセオリーなのかなぁ・・・。

何故ってサーバを別会社に移行する場合、サーバとドメインを同じところで取得しているとサーバ移行時に、無駄なお金が発生するからです。ドメインを移管しようものなら、高額なドメイン移管代を支払うハメになったり、サーバ移行したけどドメインはサーバのまま保持しないといけなくなったりして、新サーバ代と旧サーバ代の両方を毎月支払うハメになったりとサーバを移行するのに無駄なお金が発生するので、ドメインとサーバは別々にしていることが多いです。

話を戻して別会社のサーバを扱いたい場合はAレコードで設定してvalueにそれぞれのサーバのIP情報を入力すると良いです。さくらサーバのサーバIP情報はコントロールパネルのサーバ情報に記載されています。その情報をAレコードに入力してあげれば良いです?

タグ

com, web, お金, こと, サーバ, サーバー, さくら, サブ, セオリー, ところ, ドメイン, ネーム, はめ, まま, メイン, もの, レコード, レンタル, 両方, 会社, 何故, 使用, 保持, 別会社, 制作, 取得, 名前, 場合, 大体, 無駄, 発売, 発生, 移管, 移行, , 設定, , 販売, 高額,

サーバー引っ越して突貫工事。

2020.09.29

Logging

昨日、サーバー引っ越しして突貫工事を行っていました。ことの成り行きを説明するとサーバー移行しようとしてミスってしまった…。画像データのバックアップを取るのを忘れて、サーバーを消しちゃって『あぁ』ってへたってました。数時間、もうこのサイトを消そうかなとか思ったのですが今まで蓄積した、どうしようもないデータ量を無駄にするのは惜しいと思い、数時間後にテキストデータだけさくらレンタルサーバーに移行しました。

今までは別のVPSで動かしていたのですが、なんだかもったいなという気持ちが芽生えてきて元のさくらレンタルサーバーに移行しました。じぶんは結構、サーバーの移行を行います。これは計画的な移行というのはほぼ無くほぼ衝動的なサーバー移行が多いです。なので何の前触れもなくサイトが数時間見えなくなったり、見えづらい状態になったりということが数年間に何回かあります。

本当はもっと良いサーバーを借りたいものですが、収益とサーバー代がとんとんな状態なので、いまは良いサーバーを借りていません。

因みに自分がオススメするレンタルサーバーはXサーバーがしているwpxやかごやサーバーです。wpxは初心者でも簡単にワードプレスが構築できてそれでいて表示も高速です。かごやサーバーは高速化処理などは自分で試行錯誤しなければならないのですが、サービスのなかに回線速度を上げることが出来るオプションがあるので、そちらを使用すると大体のワードプレスは爆速化します。

まぁそんなですが自分はさくらレンタルサーバーでゴニョゴニョするのが好きかな。結構、ゴニョゴニョ細工出来ますよね。

タグ

VPS, いま, こと, これ, , サーバー, サイト, さくら, じぶん, データ, テキスト, とんとん, バックアップ, ミス, レンタル, , 何回か, , , 前触れ, 収益, 工事, 引っ越し, , 昨日, 本当, 気持ち, 無駄, 状態, 画像, 移行, 突貫, 蓄積, 説明,

実はこの頃、何ですよ。

2020.06.17

Logging

実はこのブログの月の収益でサーバー代はまかなえるように
なってきました。そうワンコインぐらいの収益が去年から平均的に
入るようにはなりました。これも皆様のおかげです。
ただ目標金額は高卒の初任給手取り前ぐらいです。なので未だまだ遠い・・。
近い目標は夏目漱石さんです。

ちなみにサーバーはさくらレンタルサーバーのスタンダードプランを
使用しております。はい、とてもリーズナブルなお値段です?。

塵も積もれば山となる、犬も歩けば棒に当たる、記事も積もればググるに当たるという具合に質より量で頑張っているブログです。たまに良いことを書こうと案を練るのですが、モチベーションが続かず継続できません。継続できているのは更新記録です、たまにはその日にリリースせずに何日か溜めてリリースする日もあります。

昨日の昼頃から数のマジックを使用させてもらいます。数のマジックとはアクセスカウンターを設置致しました。リロードを書けるとカウンターが1プラスされます。また非同期通信でカウンターは表示させているので誰かが訪問したらリロードを書けないでもカウントが増えていきます。

追記:リロードを何回もするひとがいるので、対策を行いました。

タグ

, アクセスカウンター, おかげ, カウンター, コイン, こと, これ, サーバー, さくら, スタンダード, たま, プラス, プラン, ブログ, マジック, モチベーション, リーズナブル, リリース, リロード, レンタル, ワン, , 何日, 使用, 値段, 具合, 初任給, 去年, 収益, 同期, , 夏目漱石, , 手取り, , , 昨日, 昼頃, 更新, , , , , 皆様, 目標, 継続, 記事, 記録, 設置, , 通信, , 金額, , 高卒,

テストサーバーを適当に立ち上げる。

2020.06.02

Logging

テストサーバーを適当に立ち上げる方法を録画してみました。
最初の動画はselinux 無効などはしていませんが、それをしないと誤作動というか上手く動かなくなるのでご注意を!!

https://www.youtube.com/watch?v=Rn1ozwXa_eM

ちなみにファイヤーフォールの設定などはググりながらお勉強ください。動画ではそこらへんもググりながら設定しています。あんまりサーバー系のコマンド覚えていないだよね。サーバーの考え方がなんとなく頭に入っている程度です。

ちなみにこれをローカルサーバーじゃなくてVPSでサーバーとして公開するならばWAF(わふ)とかその他、いろいろな設定をすることをオススメします。尚、さくらレンタルサーバーのブログはいいよ!?

https://www.youtube.com/watch?v=TZeRZ7a3Jds

尚、cgi-binでPHPのバージョンを分ける動画は、ちょっと見るだけでは出来ないかもしれませんが・・・ヒントを2、3書いときますね、あとコマンドも例として記載します。

まずcentOS8の最小インストールでPHP7.4系を使う場合は鬼車(おにぐるま)が入っていないので入れなければなりません。そんな具合にインストールしていないものはガンガン入れていこうぜという具合です(*´?`*)

dnf --enablerepo=PowerTools install oniguruma-devel

これを全部入れることができればPHPの違うバージョンでも何とかなりますよ。ちなみにPHP5系とかは下記のようなものを入れるのであって、同じじゃないよ。同じものも有るけれど記述が違うので注意してくださいね。過去のものはググれば結構表示されます。

./configure \
--prefix=/var/www/php-7.4.6  \
--with-config-file-path=/var/www/php-7.4.6 \
--with-config-file-scan-dir=/var/www/php-7.4.6 \
--with-zip \
--enable-gd \
--with-jpeg \
--with-xpm \
--with-zlib \
--with-gettext \
--enable-bcmath \
--enable-sockets \
--enable-opcache \
--enable-exif \
--with-curl \
--with-bz2 \
--enable-calendar \
--enable-inline-optimization \
--with-expat \
--enable-mbstring \
--enable-mbregex \
--with-freetype \
--with-openssl \
--with-mysqli \
--with-pdo-mysql \
--with-mysql-sock=/var/lib/mysql/mysql.sock

最後にcgi-binってインストールしたPHPのphp-cgiを参照しているだけです。シンボリックリンクで!!!

あとは・・・。
Apacheグールプにオリジナルのユーザーを追加してあげて!!。尚、最初の動画はrootで動かしているだけどね。基本的にrootではなくユーザー追加してそれをApacheグールプ追加するのさってヒントも書いときますね。

タグ

2, , 7.4, 8, centOS, cgi-bin, php, selinux, VPS, WAF, いろいろ, インストール, おすすめ, お勉強, こと, コマンド, これ, ご注意, サーバー, さくら, そこら, その他, それ, テスト, バージョン, ヒント, , ファイヤー, フォール, ブログ, べん, レンタル, ローカル, 使, , 公開, 動画, 方法, 最初, 最小, 無効, 程度, 考え方, 記載, 設定, 誤作動, 適当, 録画, ,

ガジェット好きな凄いITエンジニア、drikinさんのYOUTUBEが和む。

2020.01.31

Logging

ガジェット好きな凄いITエンジニア、 drikin (どりきん)さんのYOUTUBEはゆるくて見ていて和む。ガジェット好きの方は見ていてとても楽しいと思います。さくらレンタルサーバーさんの方とかとも帰国したときに絡んでいる?映像とかもあってすごいなぁなんて思います。

【最速開封】これはゲームチェンジャー!Surface Pro Xファーストインプレッション ep781

ガジェット紹介の他にもVlogも結構をアップロードしています、そちらも自分は好き、どちらかと言えば Vlog の方が人間味あふれていて見ていて楽しいなと、これ単なる人間観察的な自分の趣向が入っているだけなのかもしれませんが・・・。仲間とワイワイガヤガヤしているところとか、臨場感があってなんか、自分もその店にいるような感覚になってしまうところなど、上手いなと感じます。

清水さんが語るGalaxy FoldとひらくPCリュックの話 ep795

どりきんさんのYOUTUBEチャンネル登録はこちらから
https://www.youtube.com/user/drikin/featured
drikinのサブ
https://www.youtube.com/channel/UCdx2hgSqR-vh9VD13O71TaQ

これ常識?!iPhoneでホームアプリを整理する画期的な方法! #iPhone #iOS #Tips

タグ

-OY, , com, drikin, IT, iXacO, Vlog, youtube, アップロード, エンジニア, ガジェット, きん, こちら, これ, サーバー, さくら, そちら, チャンネル, とき, ところ, どちらか, どり, レンタル, 人間, 人間味, , 仲間, 帰国, , 感覚, , 映像, 登録, 紹介, 結構, 臨場感, 自分, 趣向,

webpに対応しましたプラグインでカバーしました。 Safariめ!!

2020.01.25

Logging

WebP Express(ウェッピーエクスプレス)というWordPressのプラグインがあるので、そちらでコンバート(変換)すれば良いのですが、大量に画像があるサイトはそれで変換できないので下記の対応方法で対応をお願いします。

1. WebP Express使用してコンバートする際に webpが生成されます。webpの生成場所を確認する。現在は下記の配下にwebp画像が作られています。

/wp-content/webp-express/webp-images/doc-root/wp-content/uploads

2.1の配下にwebpの画像を生成するために下記のコマンドを実行します。自分の場合、アップロードしている画像をリスト化して一括処理するプログラミングを実行しました。尚、cwebpがインストールされていない場合、インストールする必要があります。さくらレンタルサーバーには入っているみたいです。

cwebp -q 90 元画像名(階層を含む).png -o 変換後のファイル名.webp (変換先の階層を含む)

こうすることで画像は全てwebpに変換することが可能ですが、これだけでは表示が切り替わらないので下記の画像を参照しプラグインの設定を変更してください。

ちなみにこのwebp(ウェッピー)はグーグルさんが開発したものらしいです、大体のブラウザが、こちらの webpに対応しているのですがSafariとIEは非推奨みたいなんですよね。何れwebpに対応すると思います…思いたい。

タグ

, 2.1, cwebp, doc-root, Express, Safari, uploads, webp, webp-express, webp-images, WordPress, wp-content, アップロード, インストール, ウェッピーエクスプレス, お願い, カバー, コマンド, コンバート, サーバー, サイト, さくら, そちら, それ, ため, プラグイン, プログラミング, リスト, レンタル, 一括, 下記, 使用, 処理, 場合, 場所, 変換, 大量, 実行, 対応, 必要, 方法, 現在, 生成, 画像, 確認, 自分, 配下, ,

さくらレンタルサーバーでWordPressのDBバックアップを支援するPHPコード

2020.01.10

Logging

さくらレンタルサーバーでWordPressバックアップを支援するPHPコードです。

駆け出しのWEB担当者用のプログラムです、動作環境はPHP5.6以上でお願いします。バックアップする際にWARNINGが発生してしまうには対応しておりません。メールが貯まりますが大丈夫ですよ、きっと。

プログラムを読めば何を書いているのか、駆け出しのWEB担当者様もわかるとは思いますが、変更してほしいのはIDとPASS部分です?。ルートにWordPressをインストールしていない場合は $wploadfile の変更もお願いします。

ファイルをアップロードした階層に dbbackup名でフォルダを設置しそのフォルダにベーシック認証をかけておいてください。外部からダウンロードが容易に出来るので・・・。

上記の設定が完了したらファイルをアップロードし sakura-rental-wpdb-backupfullにアクセスしてください。
ログイン後、管理画面より設定を行った後、さくらレンタルサーバーのコントロールパネルよりCRONの設定を行ってください。

ダウンロードはこちらから
https://zip358.com/tool/sakura-rental-wpdb-backupfull/sakura-rental-wpdb-backupfull.zip

尚、CRON設定に関しては例を管理画面に書いていますのでそちらの参考に設定をお願いいたします、またバックアップは1週間保持します。
月曜日?日曜日まで7ファイルのMYSQL、DBのバックアップファイルが出来上がります。管理画面の曜日設定にチェックが入っていないものはバックアップ致しません。

※ソースコードは下記になります。
※2020年12月、修正しました。ソースコードは下記になります。
※wp-load.phpの階層を自身の階層に変更してください。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.0/css/all.min.css">
<link rel="stylesheet" href="assets/css/style.css">
<title>さくらレンタルサーバーでWordPressのDBバックアップを支援するPHPコード</title>
</head>
<body>
	<div class="container">
		<div class="row">
			<div class="col table-responsive">
					<table class="table" id="tbl">
					</table>
			</div>
		</div>
	</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="./assets/js/common.js?<?=time()?>"></script>
</body>
</html>
window.onload = function () {
	$.ajax({
		type: "POST",
		dataType: "json",
		url: "./lib/view.php",
		data: "data",
		success: function (response) {
			if (response.password.ok === "ok") {
				view();
			} else {
				passwordview();
			}
		}
	});
};


function view() {
	let str = "";
	fetch("./schedule.dat").then(response => response.text()).then(data => {
		let weekval = data.split(",");
		let weekname = 
			[
				{en:"Sunday",ja:"日曜日"},
				{en:"Monday",ja:"月曜日"},
				{en:"Tuesday",ja:"火曜日"},
				{en:"Wednesday",ja:"水曜日"},
				{en:"Thursday",ja:"木曜日"},
				{en:"Friday",ja:"金曜日"},
				{en:"Saturday",ja:"土曜日"}
			];
		
		if (weekval.length === 7) {
			for (var i = 0; i < 7; i++) {
				let weekvalflg = weekval[i] == 1 ? " checked " : "";
				str += `
		<tr>
		<td>${weekname[i].ja}</td>
		<td>
			<div class="form-check">
				<input id="${weekname[i].en}_chk" class="form-check-input" type="checkbox" name="" value=1 ${weekvalflg}>
				<label for="${weekname[i].en}_chk" class="form-check-label">バックアップする</label>
			</div>
		</td>
	</tr>
		`;
			}
		} else {
			for (var i = 0; i < 7; i++) {
				str += `
		<tr>
		<td>${weekname[i].ja}</td>
		<td>
			<div class="form-check">
				<input id="${weekname[i].en}_chk" class="form-check-input" type="checkbox" name="" value=1>
				<label for="${weekname[i].en}_chk" class="form-check-label">バックアップする</label>
			</div>
		</td>
	</tr>
		`;
			}

		}
		str += `
<tr>
	<td colspan="2"><button class="btn btn-primary"  id="btn" type="button">設定する</button></td>
</tr>
`;
		document.getElementById("tbl").innerHTML = str;
		document.getElementById("btn").addEventListener("click", function () {
			$.ajax({
				type: "POST",
				url: "./lib/backup-setting.php",
				data: {
					Sunday: document.getElementById("Sunday_chk").checked?1:0,
					Monday: document.getElementById("Monday_chk").checked?1:0,
					Tuesday: document.getElementById("Tuesday_chk").checked?1:0,
					Wednesday: document.getElementById("Wednesday_chk").checked?1:0,
					Thursday: document.getElementById("Thursday_chk").checked?1:0,
					Friday: document.getElementById("Friday_chk").checked?1:0,
					Saturday: document.getElementById("Saturday_chk").checked?1:0
				},
				dataType: "json",
				success: function (response) {
					if (response.ok == "ok") {
						alert("設定しました");
					} else {
						alert("失敗しました");
					}
				}
			});
		});

	});
}

function passwordview() {
	document.getElementById("tbl").innerHTML = `
	<tr>
	<td>wordpress Id</td>
	<td>
		<div class="input-group">
			<input class="form-control" type="text" id="wpid" placeholder="ワードプレスのIDを入力ください" aria-label="ワードプレスのIDを入力ください" aria-describedby="wpid">
		</div>
	</td>
</tr>
<tr>
	<td>wordpress pass</td>
	<td>
		<div class="input-group">
			<input class="form-control" type="password" id="wppass" placeholder="ワードプレスのPassを入力ください" aria-label="ワードプレスのIDを入力ください" aria-describedby="wppass">
		</div>
	</td>
</tr>
<tr>
	<td colspan="2"><button class="btn btn-primary"  id="btn" type="button">ログインする</button></td>
</tr>	
	`;



	document.getElementById("btn").addEventListener("click", function () {
		$.ajax({
			type: "POST",
			dataType: "json",
			url: "./lib/pass.php",
			data: { wpid: document.getElementById("wpid").value, wppass: document.getElementById("wppass").value },
			success: function (response) {
				if (response.password.ok === "ok") {
					view();
				} else {
					alert(response.password.msg);
					passwordview();
				}
			}
		});
	});
}

タグ

5.6, db, dbbackup, ID, pass, php, sakura-rental-wpdb-backupf, WARNING, web, WordPress, wploadfile, アップロード, インストール, お願い, コード, サーバー, さくら, ダウンロード, バックアップ, ファイル, フォルダ, プログラム, ベーシック, メール, ルート, レンタル, 上記, , 動作, , 場合, 変更, 外部, 完了, 容易, 対応, 担当者, 支援, 環境, 発生, 設定, 設置, 認証, 部分, 階層, , 駆け出し,

あるキーワードをライクするTwitter API。

2019.11.06

Logging

さくらレンタルサーバー、もともとmecab(メカブ)が入っているらしい。
自動であるキーワードに対してライクする方法(Twitter API)です。
たぶん、こんなコードはなかったと思います、
過去記事「ワードプレス過去記事のツイートをボット化する方法。」と併用してお使いください。
そうでないと動きませんので…。
知り合いエンジニアさんとかに組み込んでもらってください。

<?php
function mecab_tw_like($txt="",$connection=Null){
    if(!$txt)return false;
    if(!is_object($connection))return false;
    $cmd = "echo "$txt" | mecab";
    exec($cmd, $opt, $return_ver);
    //var_dump($opt);
    foreach($opt as $key=>$val){
        $r = explode("t",$val);
        if(preg_match("/名詞/",$r[1])){
            $statuses = $connection->get(
                'search/tweets',
                array(
                    'q'                 => $r[0],
                    'count'             => '3',
                    'lang'              => 'ja',
                    'locale'            => 'ja',
                    'result_type'       => 'recent',
                    'include_entities'  => 'false'
                )
            );
            if(is_array($statuses->statuses) and $statuses->statuses){
                foreach( $statuses->statuses as $tweet ){
                    $id = $tweet->id;
                    $result = $connection->post(
                        'favorites/create',
                        array(
                            'id' => $id
                        )
                    );
                }
            }
        }
    }
}

タグ

API, cmd, connection, echo, exec, false, function, if, is, like, lt, Mecab, null, object, opt, php, quot, return, tw, Twitter, txt, ver, エンジニア, キーワード, コード, サーバー, さくら, ツイート, プレス, ボット, メカブ, ライク, レンタル, ワード, 併用, 方法, 自動, 記事, 過去,

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。

2019.02.22

Logging

WordPressの全記事の中からランダムで記事をピックアップしてツイートする。
実際、自分の階層に合わして呼び出しを変更してください。
なお、さくらレンタルサーバーでクロンの設定をして自動投稿できます。
ライブラリの設置などは割愛してます。

<?php
// cron:: cd /home/user/www/zip358.com/site/tw; /usr/local/bin/php tw.php
require_once ('../../wp-load.php');
require "vendor/autoload.php";
use AbrahamTwitterOAuthTwitterOAuth;
$consumer_key = "XXXXXXXXXXXXXX";
$consumer_secret = "XXXXXXXXXXXX";
$access_token = "XXXXXXXXXXXXXX";
$access_token_secret = "XXXXXXXXXXXXXXX";
$to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
$args = array(
	'posts_per_page' => 1,
    'orderby' => 'rand'
);
$posts = get_posts($args);
foreach ( $posts as $val ){
    $href =  get_permalink($val->ID);
    $title = get_the_title($val->ID);
    $res = $to->post("statuses/update", array("status" => $title . " " . $href));
}

タグ

358, Abraham, access, autoload, bin, cd, com, consumer, cron, home, key, local, lt, once, php, require, secret, site, tok, tw, TwitterOAuth, use, user, usr, vendor, WordPress, wp-load, XXXXXXXXXXXX, XXXXXXXXXXXXXX, zip, クロン, サーバー, さくら, ツイート, ピックアップ, ライブラリ, ランダム, レンタル, , 割愛, 変更, 実際, 投稿, 自分, 自動, 記事, 設定, 設置, 階層,

さくらレンタルサーバーとXサーバーのMYSQLの規定

2018.11.13

Logging

さくらレンタルサーバーとXサーバーのMYSQLの規定は下記になります。
個人で使用する場合、1G、多くて3Gもあればそんなに困らないとは思いますが、企業や仕事で商品データなどをMYSQLサーバーに保存しようとすると足りない。さくらレンタルサーバーは9Gまで保証してくれるが、それでも足りないっていう企業の方も多くいると思います。そんな場合はさくらレンタルサーバーだと共有サーバーを諦めてワンランクアップしたマネージドサーバ(IP専用)を考えてみると良いかもしれないです。
ちなみにXサーバーはビジネスタイプでも同じ規定です。

https://www.xserver.ne.jp/manual/man_db_spec.php

https://help.sakura.ad.jp/hc/ja/articles/206053142#db

タグ

, 206053142, , , ad, articles, db, hc, help, https, IP, ja, jp, MYSQL, sakura, アップ, サーバ, サーバー, さくら, それ, タイプ, データ, ビジネス, マネージド, ランク, レンタル, ワン, 下記, 仕事, 企業, 使用, 保存, 保証, 個人, 共有, 商品, 場合, 専用, , 規定,

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法。

2018.11.08

Logging

さくらレンタルサーバーとかで制限以上のクロンタブ(crontab)を使う方法
10年ぐらいまえのコードを見直して改善したコードが下記になります。
10年前はクラスを使わない方法で構築したのだけど、今回はクラスの概念を
使って構築。ここ何年かで自分のコーディングの技術は上がっているかといえば
そうでもないですが、昔よりかは技術の幅は広がっていると思いたいw
※qiita日付は数年前にUPしたのですけど、コード自体は10年前のコードです。

追記:2022/10/08 修正:詳しくはコチラ
https://qiita.com/question909/items/8f1df9b62ab4fba76243

<?php
//5分刻みに対して有効な無限クローン 処理が負荷の場合どうなるかは知りません。
date_default_timezone_set('Asia/Tokyo');
class cron{

    public function d_m($obj)
    {
            if($obj->m==="*")return true;
            if(preg_match("/,/",$obj->m))return $this->comma($obj->m,date("m"));
            if((int)$obj->m === (int)date("m"))return true;

            return false;
    }

    public function d_d($obj)
    {
            if($obj->d==="*")return true;
            if(preg_match("/,/",$obj->d))return $this->comma($obj->d,date("d"));
            if((int)$obj->d === (int)date("d"))return true;

            return false;
    }

    public function d_H($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->H)){
                $H = explode("/",$obj->H);
                if((int)$H[1]>0 && ((int)date("H") % (int)$H[1])===0)return true;
            }else{
                if($obj->H==="*")return true;
                if(preg_match("/,/",$obj->H))return $this->comma($obj->H,date("H"));
                if((int)$obj->H === (int)date("H"))return true;

            }
            return false;
    }

    public function d_i($obj)
    {
            if(preg_match("/\*\/[0-9]{1,2}/",$obj->i)){
                $i = explode("/",$obj->i);
                if((int)$i[1]>0 && ((int)date("i") % (int)$i[1])===0)return true;
            }else{
                if($obj->i==="*")return true;
                if(preg_match("/,/",$obj->i))return $this->comma($obj->i,date("i"));
                if((int)$obj->i === (int)date("i"))return true;

            }
            return false;
    }

    //曜日 0=日曜日 6=土曜日
    public function d_w($obj)
    {
            if((int)$obj->w[date("w")]===1)return true;
            return false;
    }

    public  function comma($c="",$t=""){
        if($c==="")return false;
        if($t==="")return false;
        $flg = false;
        foreach(explode(",",$c) as $cc){
            if((int)$cc===(int)$t)$flg = true;
        }
        return $flg;
    }


    public function d_command($obj){
        if($obj->command){
            exec($obj->command . " > /dev/null &");
        }
        return true;
    }

}
if ($argv[1]) {
   $filename = $argv[1];
    if(is_file($filename)){
        $jsn = json_decode(file_get_contents($filename));
        $cron = new cron();
        try {
            foreach($jsn as $obj){
                if($cron->d_m($obj)){
                    if($cron->d_d($obj)){
                        if($cron->d_H($obj)){
                            if($cron->d_i($obj)){
                                if($cron->d_w($obj)){
                                    $cron->d_command($obj);//波動拳{{{{
                                }
                            }
                        }
                    }
                }
            }
        } catch (\Throwable $th) {
            print $th->getMessage();
        }
    }
}

タグ

08, 10, 2022, 39, 5, Asia, class, cron, crontab, date, default, function, if, lt, obj, php, public, qiita, set, timezone, Tokyo, UP, , クラス, クローン, クロン, コーディング, コード, ここ, コチラ, サーバー, さくら, タブ, まえ, レンタル, 下記, 今回, 何年か, 修正, 処理, 分刻み, 制限, 場合, , 技術, 改善, , 方法, 日付, , 有効, 概念, 構築, 無限, 自体, 自分, 負荷, 追記,

Twitterみたいなマストドンが流行っているのは知っているけれど。

2017.04.18

Logging


Twitterみたいなマストドンが流行っているのは知っているけれど。
IT関係者だけのもので終わりそうな気がする。
マストドンはGithubで公開されていてVPSで構築しているサーバなら
入れ込むことが可能です。
じぶんも少しだけ興味があるのですけど
それほどユーザーが集まりそうにないので、サーバに負荷になることは
無いと思います。しかし人が集まらないとあまり意味がない、
サーバ維持管理費ぐらいを回収できるぐらいは、人を呼び込みたいです。
そうしないと意味がないので様子見にします。
もしかしたら、釣りマップあたりをマストドンで構築し直すかもしれません。
https://github.com/tootsuite/mastodon

CentOS7でmastodonを建てる

http://qiita.com/motiakoron/items/1e5b0679f7283bfee70b

さくらのVPSで自分の Mastodon サーバを最速でつくる方法

http://qiita.com/hekki/items/c3f42c31632105389c79

タグ

centOS7, github, IT関係者, mastodon, Twitter, VPS, サーバ, サーバ維持管理費, さくら, じぶん, マストドン, ユーザー, , 少し, 意味, 方法, 最速, 様子見, , 興味, 負荷, 釣りマップあたり,

FuelPHPをサクラレンタルサーバー共有で動かすには?

2016.07.14

Logging

FuelPHPをサクラレンタルサーバー共有で動かすには?
どうしたら良いのかを記述しときます。
\fuel\app\config\config.phpに記述されている’base_url’の所を
base_url’ ?=>’http://任意.com/’,かbase_url’ ?=>’任意の階層’にします。
オプションでいろいろと変更できる点はありますが、今回はスルーします。
FuelPHPの日本公式サイトを参照
次にルートの直下に.htaccessを作成し下記の内容を記述しアップロードを行なってください。

RewriteEngine on 
RewriteBase /public 
RewriteRule (.*) /public/$1

この段階ではルートにアクセスしても表示されません。表示させるためには
\public.htaccessの.htaccessファイルを一部変更してあげる必要があります。
まず、RewriteBase /publicを追加しOptions +FollowSymLinks -Indexesと
記載されている部分をコメントアウトする必要があります。
これらの事をするとルートURLでFuelPHPの初期の表示がされるようになります。

いろいろなサイトを拝見しましたが、結構設定を変更しないといけないよと書かれていますが、実際はコレだけの設定変更で表示することは可能です。ちなみに余談ですがオプション値のココだけは変更したら良いかなという
所を記載します。

	/**
	 * Localization & internationalization settings
	 */
	 'language'           => 'ja', // Default language
	 'language_fallback'  => 'ja', // Fallback language when file isn't available for default language
	 'locale'             => 'ja_JP.UTF-8', // PHP set_locale() setting, null to not set
	/**
	 * Internal string encoding charset
	 */
	 'encoding'  => 'UTF-8',
	/**
	 * DateTime settings
	 *
	 * server_gmt_offset	in seconds the server offset from gmt timestamp when time() is used
	 * default_timezone		optional, if you want to change the server's default timezone
	 */
	 'server_gmt_offset'  => 0,
	 'default_timezone'   => 'Asia/Tokyo',

タグ

, App, base, com, config, fuel, FuelPHP, htaccess, http, ON, php, public, Rewrite, RewriteBase, RewriteEngine, RewriteRule, url, アクセス, アップロード, いろいろ, オプション, サーバー, サイト, さくら, スルー, ため, ファイル, ルート, レンタル, 一部, 下記, 今回, 任意, 作成, 公式, 共有, 内容, 参照, 変更, 必要, , 日本, 段階, , 直下, 表示, 記述, 階層,