ハードディスクメンテナンス

当サイトには広告が含まれています。

カテゴリ: サイト制作・管理



(2022年10月)

さくらインターネットのレンタルサーバーは、マルチドメイン対応だが、PHPのバージョンを変更すると、全てのドメインで変わってしまう。



古いサイトがあり、新しいPHPのバージョンでは動かないので、古いバージョンで止めている場合、そこにWordPressを入れると、ダッシュボードで「安全ではない」とユワレテしまう。

サイトがPHPの安全ではないバージョンで動作しています

ソリャそぅなン/遭難だけど...

PHPのバージョンが古いと、以下のように動かないプラグインも出てくる。

Slimstat Analytics

エックスサーバーはドメイン毎に別のバージョンを設定できるので、これはダメ。



だが、さくらインターネットでも、ドメイン毎にPHPのバージョンを変更できる方法がある。

ドメイン毎にPHPのバージョンを変更する方法



管理画面でのPHPのバージョンを「5.6」のママで、一部のドメインで「8.0」にする場合、

テキストエディタで、

#!/bin/sh
exec /usr/local/php/8.0/bin/php-cgi

の2行を書き、

・文字コード:UTF-8
・改行コード:LF

で、ファイル名は「php.cgi」で保存する。

改行コード:LF

ドメインのルートに置き、パーミッションを「705」にする。

パーミッション:705

ドメインのルートにアロ〜「.htaccess」の最上部に、以下を追記。

Action myphp-script /php.cgi
AddHandler myphp-script .php .html

以上で「8.0」になるハヅ!

「Internal Server Error」になる場合



Internal Server Error

・改行コードを「LF」にシたクァ?
・パーミッションを「705」にシたクァ?

文字コードや改行コードは、サクラエディタを使い、「名前を付けて保存」をする際に、画面下部で設定できる。

サクラエディタ

設定できるPHPのバージョン



管理画面での選択肢は、

PHPのバージョン

となっているので、以下が指定可能?

exec /usr/local/php/8.0/bin/php-cgi
exec /usr/local/php/7.4/bin/php-cgi
exec /usr/local/php/5.6/bin/php-cgi
exec /usr/local/php/5.4/bin/php-cgi
exec /usr/local/php/5.3/bin/php-cgi
exec /usr/local/php/5.2/bin/php-cgi

設定画面で一斉に「8.0」にし、古いサイトを、上記の方法で「7.4」や「5.x」にするコトも可能。

一斉に上げると危険じゃナゐかを、事前に調べるモクテキにも使えるンかはシラン(SILANE)。

パフォーマンスの問題



上記の方法で設定するPHPは「CGI版」であり、「モジュール版」より実行パフォーマンスが大幅に劣る。

パフォーマンスを求めるなら、古いサイトを書き換えるか、棄(ス)てるかして、グァち(設定画面で一斉に)で「最新のバージョン」且つ「モジュール版」にするコト。

CGI版とモジュール版

ソレなら、エックスサーバーに移行した方がゴツゑ々!

さくらインターネットの仕様変更でこの方法が使えなくなったら危険デモアル!

関連:さくらインターネットからエックスサーバーへ?WordPressとデータベースの速度 Amazon S3との連携?
[PR] au PAY / au WALLET カード 情報

このエントリーをはてなブックマークに追加 mixiチェック



$dt = date("Y-m-d H:i:s") ;

で本日の日時が取得できる。

例:2020-09-01 10:00:00

但し、ソヌォ前に

date_default_timezone_set('Asia/Tokyo') ;

を書かナゐと、ワクェの分からナゐソレになるコトがあるので注意。

関連:[WordPress] 時刻が9時間ヅレる問題(date_default_timezone_set('UTC')) [wp-load.php]

本日ではなく、特定日時の場合は、

$dt = date("Y-m-d H:i:s",strtotime($dt)) ;

とシタレ!

strtotimeは、UNIXタイムスタンプを返す。

UNIXタイムスタンプとは、「1970-01-01 00:00:00」からの経過秒数のコトである。

この時、

$dt = date("Y年m月d日 H時i分s秒") ;

とスレば、

「2020年09月01日 10時00分00秒」

と、表記を様々に変ゑラレル。

で、この「Y」「m」「d」「H」「i」「s」などが、「フォーマット文字列」とゆぅヤツで、他にもイロ々あるンで、ソレを挙げたる!

年(Year)



・Y:数字(4桁)
・y:数字(下2桁)
・L:閏年かどうか(閏年なら1、でなければ0を返す) → 実例

年を2桁で表すような輩/ヤクァルァは信用/瀋陽できンので、絶対/舌苔に使わン!

閏(ぅル〜)年は英語で「leap year」、「leap」は跳ねる、「quantum leap」は「飛躍的進歩」。

ソニーの元社長/会長/CEOで、先日アレした出井(ゐでゐ)が2006年4月に設立したのはクオンタムリープ、今はどうなッてるンかはシラン(SILANE)。

閏年(肆/4/四年毎):2000、2004、2008、2012、2016、2020、2024、2028年、2032年(「以下略」ではなく「滅亡」)

月(Month)



・m:数字(1桁の場合、先頭に0を付加)
・n:数字(1桁の場合、先頭に0を付加セヅ)
・F:英語のフルスペル(January、February、March...)
・M:英語三文字(Jan、Feb、Mar...)
・t:その月の日数を(28-31)

英語の月

・1月:January / Jan
・2月:February / Feb
・3月:March / Mar
・4月:April / Apr
・5月:May / May
・6月:June / Jun
・7月:July / Jul ←ぢュるッ!!
・8月:August / Aug
・9月:September / Sep
・10月:October / Oct
・11月:November / Nov
・12月:December / Dec

日(Day)



・d:数字(1桁の場合、先頭に0を付加)
・j:数字(1桁の場合、先頭に0を付加セヅ)

先頭に0を付加するかシナゐか



「先頭に0を...」のアレだが、例えば、1月なら「01」とするンが「先頭に0を付加」で、「1」とするンが「先頭に0を付加セヅ」とユ〜コト!

DBに格納する際は、0を付加して「2020-09-01 10:00:00」とするンが普通。

ぢぁ〜/邪痾、なンで「先頭に0を付加セヅ」があるのかとユ〜ト、

$dt = date("Y年m月d日") ;

とすると、

「2020年09月01日」

となり、ガゐぢンはトモカク、天皇(TENG-KNOW)を中心とスル神の國である日本國に在住する赤子(セキシ)には読みニクゐだろう?

$dt = date("Y年n月j日") ;

とするコトで、

「2020年9月1日」

と、大和魂(ヤマト騙スィ〜)にフィットするクレヴァ〜な見た目にシタレ!

時(Hour)



・H:数字 24時間制(1桁の場合、先頭に0を付加)
・h:数字 12時間制(1桁の場合、先頭に0を付加)
・G:数字 24時間制(1桁の場合、先頭に0を付加セヅ)
・g:数字 12時間制(1桁の場合、先頭に0を付加セヅ)
・a:午前/午后の英語小文字(am/pm)
・A:午前/午后の英語大文字(AM/PM)

普通、午前/午后は、12時間制(h,g)とともに使う。

24時間制と使うと、「午後22時」ような変なソレになるからだ。

分(Minutes)



・i:数字(1桁の場合、先頭に0を付加)

「先頭に0を付加セヅ」がナゐンかはシラン(SILANE)!

秒(Seconds)



・s:数字(1桁の場合、先頭に0を付加)

「先頭に0を付加セヅ」がナゐンかはシラン(SILANE)!

曜日(day of week)



・I:英語のフルスペル(Sunday、Monday、Tuesday...)
・D:英語三文字(Sun、Mon、Tue...)
・w:数字(日曜日は0,月曜日は1、火曜日は2...土曜日は6) 配列用
・N:数字(月曜日は1,火曜日は2、水曜日は3...日曜日は7)
・W:月曜日に始まる年単位の週番号

英語の曜日

・日:Sunday / Sun
・月:Monday / Mon
・火:Tuesday / Tue
・水:Wednesday / Wed
・木:Thursday / Thu
・金:Friday / Fri
・土:Saturday / Sat

で、天皇を中心とスル神の國である日本國の表記はナゐンかとユ〜ト、無ゐ!

コヌォ!國ヅォクめッ!!

テコトで、日本語の配列を用意シテヲキ、

$week = array("日","月","火","水","木","金","土") ;

「w」で数字を返してモラゐ、配列から引き出す鹿内/シカナゐ!

$youbi = date('w',strtotime($day)) ;
$youbi = $week[$youbi] ;

$dayが水曜日の場合、「3」を返シてキヲるンで、配列の4番目にアル「水」が得られる。

配列なンで、最初が「0」やから注意/中尉!

分を1桁で表示したい場合



時間にAM/PMを併記しなければ、「4時」と示した場合、午前か午后か不明である。

さらに、鬼●米英語の「AM/PM」ナドではナく、「午前/午后」とすれば、日本國民としてカンペキである。

月で「n」、日で「j」、時間で「A,g」を駆使シテモ、「2022年9月1日 午后8時05分」では、「05分」がクィムォティ惡ゐ!!

上述のように、分(と秒)に於ゐては、「先頭に0を付加セヅ」のフォーマット文字列がナゐ?タメだ。

シャーなゐから、以下の方法でナニする。

// 分のみを取得
$minutes = date("i",strtotime($dt)) ;

// 1文字目を取得(開始位置の「0」に注意)
$minutes_one = substr($minutes,0,1) ;

// 1文字目が「0」なら、2文字目から1文字を取得
if($minutes_one == "0"){
$minutes = substr($minutes,1,1) ;
}


// 処理した「分」を結合シタレ!
$dt = date("Y年n月j日 Ag時",strtotime($dt)).$minutes."分" ;

// AMを午前に、PMを午后に置換
$dt = str_replace("AM","午前",$dt) ;
$dt = str_replace("PM","午后",$dt) ;

結果:「2022年9月1日 午后8時5分」

substrの部分は、以下でもOK。

// 1文字目が「0」なら、後ろから1文字以降を取得
if($minutes_one == "0"){
$minutes = substr($minutes,-1) ;
}


開始位置を負の値とした場合、後ろから数えて...となる。

長さを指定していないが、「後ろから1文字目以降、右へ全部」となるので問題ない。

悪ゐ例

trim/ltrim/rtrimは、空白やタブ、改行だけでなく、削除する文字の指定も可能なので便利だが、1文字目が「0」なら削除しようとして

if($minutes_one == "0"){
$minutes = ltrim($minutes,"0") ;
}

と書くと、「00分」の時に0が貳ツとも除去され、「分」ノムィとなッてしまう。

trim/ltrim/rtrimは、その位置に連続した削除対象があると、全部削除するノデヌェ。

時間差を求める



現在のUNIXタイムスタンプは、以下のイヅレカで取得できる。

$now = time() ;
$now = strtotime("now") ; ←ゐムァでショ!!

なンで、特定日($dt)から本日の差(秒)は、

$diff_seconds = abs($now - strtotime($dt)) ;

となり、差(分)は、

$diff_minutes = abs(($now - strtotime($report_dt))/60)) ;

となり、差(時間)は、

$diff_hour = abs(($now - strtotime($report_dt))/(60*60)) ;

となる。

# absは絶対値(absolute value)を返す。

情報の公開日時から●時間/分までは表示するが、それ以降は(古ゐンで)表示しナゐ、などの時に使う。

(60*60)はカナラヅ括弧でク々るか、「3600」と書かンと変になるコトが分からン奴は、小学生の算数からヤリナオセ!ドァヴォ!!

関連:[PHP] 指定日から"+1 day"とか [strtotime]
[PR] au PAY / au WALLET カード 情報

このエントリーをはてなブックマークに追加 mixiチェック



WordPress のインストールディレクトリのルートにある wp-load.php を include シてナニするプログラムを書ゐた。

WordPress

wp_insert_post を使って投稿するのだが、その文中に、iframeタグが入っていると、その部分が見事に消ゑてシマウ!

ハァ?

iframeタグとユ〜ンは、以下のように、YouTubeの動画を埋め込む時などに使うヤツね。



普通に管理画面から投稿すると消されずに投稿できるのだが、プログラム(wp_insert_post)ニョルと消されてしまう。

調べてムィルと、iframeタグは惡意のあるナニを埋め込むコトもできるンで、投稿者の権限が強くナゐと消されるようにナッテルとゐぅハナシだが、そのブログにユーザーは壹人しか居なく、当然ながら「管理者」である。

・購読者
・寄稿者
・投稿者
・編集者
・管理者

管理者ではダメなの?ヴァクァなの?スィヌの?

「特権管理者」とユ〜ンもあるラシ〜ンだが、そのブログにはない、とゆぅか、どの WordPress でも見たコトがナゐ(笑)

で、何ンかシラン(SILANE)けど、以下で挙がってるコードを functions.php に追記すると、iframeタグが「勝手に」消えなくなった。

関連:WordPressでiframeが無効になる現象を解決する方法

ンなもン分かるか!ドァヴォ!!

全画面表示(allowfullscreen)が消える場合



iframeで埋め込んだ動画の全画面再生を許可する場合、タグに「allowfullscreen」を追加するのだが、これも勝手に削除されてしまう。

当然、この状態では「全画面表示はご利用いただけません」となり、全画面で見るコトができナゐ。

全画面表示はご利用いただけません

そこで、先のfunctions.phpへの追記中の配列に以下を追加すると、勝手に消えなくなる。

「'allowfullscreen' => array()」

関連:投稿ページの YouTube 全画面表示されない時

勝手に消されてしまった投稿に付いては、SQLで全て置換シテヤレ!

UPDATE `wp_posts` SET `post_content` = REPLACE(`post_content`,'frameborder=\"0\">','frameborder=\"0\" allowfullscreen>') WHERE `post_type` = 'post'

関連:[WordPress] 時刻が9時間ヅレる問題(date_default_timezone_set('UTC')) [wp-load.php]
[PR] au PAY / au WALLET カード 情報

このエントリーをはてなブックマークに追加 mixiチェック



WordPress のインストールディレクトリのルートにある wp-load.php を include シてナニするプログラムを書ゐた。

WordPress

動作は問題なくするンだが、 date("Y-m-d H:i:s") を使ってログを出させると、9時間ヅレてる。

日本時間 20時XX分→11時XX分

ファイルの冒頭で

date_default_timezone_set('Asia/Tokyo')

を使ゐ、タイムゾーンを「日本」に設定シてるにもカカワラヅだ。

で、

wp-load.php

を追ぅと、

wp-config.php が include され、さらに wp-config.php には wp-settings.php が include され、

ソノ wp-settings.php の66行目付近に

// WordPress calculates offsets from UTC.
// phpcs:ignore WordPress.DateTime.RestrictedFunctions.timezone_change_date_default_timezone_set
date_default_timezone_set( 'UTC' ) ;

とあるノォ発見(協定世界時)!

wp-load.php → wp-config.php → wp-settings.php

コレを日本にすれば解決/怪傑するかもシレン/試練が、他にインストールした WordPress の wp-settings.php に於ゐても「UTC」にナッテルし、

WordPressをインストールする際に、コノ箇所を書き換ゑるようなアレはナゐ。

管理画面の設定にはタイムゾーンの選択肢があり、

WordPressのタイムゾーン設定

当然「東京」を選択シてるンだが、先の設定は「UTC」とナッテル。

WordPressが 使う DB のテーブル(wp_posts)には、

post_date / post_date_gmt
post_modified / post_modified_gmt

とユ〜ヨ〜ニ、日本時間とGMTの2ツの時間が記録されてる。

つまり、基準はアクマ/惡魔でも「UTC」で、ソコから算出した現地時間を使ッてる?

なンで、上記の「UTC」を書き換ゑルと、基準が変わッてシまゐ、面倒なコトになりかねナゐ。

せや/瀬谷から、ファイルの冒頭ではなく、wp-load.php を include させた後で

date_default_timezone_set('Asia/Tokyo')

を宣言し、ログを出させると、日本時間と相成ッた。

分かるか/若ルカ!ドァヴォ!!

関連:[WordPress] iframeタグが投稿できない(消える)問題 [wp-load.php]
[PR] au PAY / au WALLET カード 情報

このエントリーをはてなブックマークに追加 mixiチェック



(2022年7月)

lolipop(ロリポップ!)のレンタルサーバーと、その中にあるWordPressに係るハナシ。

WordPress

PHPのバージョン8.1が選択できるようにナッテル。

関連:2022/04/13 『PHP8.1』の提供を開始しました (ロリポップ)

「2022/04/13」とあるが、実際に切替が可能となったのは、7月6日のメンテ後。

関連:2022/06/09 【7月4日追記あり】PHP8.1(モジュール版)提供に伴うメンテナンスについて (ロリポップ)

当初は「2022年6月末頃のメンテナンス」とあったが、遅れた模様。

関連:2022/07/04 【メンテナンス】ロリポップをご利用のお客様へ (ロリポップ)

マルチドメインに対応しており、ドメイン毎に、バージョンを設定できる。

ライトプラン及びスタンダードプランで選択できるのはCGI版とモジュール版であり、以下が選択可能。

・7.4(CGI版)
・8.0(CGI版)
・8.1(CGI版)
・8.1(モジュール版)

7.3(CGI版)と7.4(モジュール版)は廃止された。

モジュール版
・実行プロセス:Apacheのプロセス
・レスポンス:高速
・php.iniによる設定変更:不可
・提供プラン:ライト、スタンダード

CGI版
・実行プロセス:PHPのプロセス
・レスポンス:低速
・php.iniによる設定変更:可
・提供プラン:エコノミー、ライト

変更後、反映に5-10分ほど要するので注意。

で、WordPressの入っているドメインのPHPを7.4(CGI版)→8.1(モジュール版)にすると、サイト(表)は見えるが、管理画面を出そうとすると「このサイトで重大なエラーが発生しました。対応手順については、サイト管理者のメール受信ボックスを確認してください。」となって入れない事案が発生!

このサイトで重大なエラーが発生しました

関連:WordPressのトラブルシューティングについてはこちらをご覧ください。

8.1(CGI版)にしても、同様にアウト!

メールを確認すると、

今回の場合、WordPressがプラグイン XXXXX でエラーを捉えました。

とあり、プラグインがダメな模様。

# メールアドレスは、管理画面の 設定>一般>管理者メールアドレス にある。

一旦7.4(CGI版)に戻し、該当プラグインを無効化、その上で8.1(モジュール版)にすると、無事管理画面に入れた。

このプラグイン、更新されてナゐノョヌェ...

なお、この後に無効化したプラグインを有効化しようとすると、

「重大なエラーを引き起こしたため、プラグインを有効化できませんでした。」

と出て、有効にすることができないので、再び管理画面に入れなくなることはない。

この時に、

Parse error: syntax error, XXX in XXX.php on line XXX

などと表示されるので、プラグインを自力で修正することも可能だが、今回はReplace(置換)関連のプラグインであり、誤動作すると悲惨なので、更新されている類似のプラグインを探すか...面倒杉流!!




[PR] au PAY / au WALLET カード 情報

このエントリーをはてなブックマークに追加 mixiチェック

このページのトップヘ