テーマの【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

【Cron】Macでなるべくセキュリティを下げずにCronを実行させる【スリープ?自動起動?】

macOS 10.13.4 : Sierra

Mac環境でPython3系を実行してSeleniumに情報を持ってこさせようとして
結構ハマってしまったのでメモ。

まず、cronから実行すると環境変数が必要最低限しか読み込まれず
まずPyshon自体が動きません。
cronを書く時にちゃんと宣言しましょう。

参考:
この方の記事がとても参考になりました。
https://qiita.com/jmatsu/items/0a5d80abe188b09644c1

そして、肝心のCronの実行なのですが、
1,もちろん人間が触ってない間に実行したい(深夜や早朝)
2,パスワードをかけたスリープ環境は崩したいくない

という2つの項目を両方クリアしたかったんです。

Macのシステム環境設定から
(当方英語環境ですが、、、)
エネルギー設定→スケジュールでアプローチしてみる

起動_もしくはスリープ解除とい項目ですね

しかし
その時間にはスリープから復帰する際の
パスワードの入力画面が映し出されているだけ。。。
もちろんCronは実行されておらず。。。

それでしばらく悩みながらシステム環境設定を覗いていると、

ユーザー&グループの設定
のところに自動ログインの項目を発見

これはつまり、初回起動時はパスワードの入力を求めない、というもの

なので、先程のスリープ解除の項目はそのままにして、
PCの電源を切って帰れば

深夜に自動起動→パスワードの入力要求なし→Cron実行
しばらくしてスリープ(このスリープからの復帰はパスワードが求められる)

ということになり、やりたかったこと実現。ですね。

【Plesk12から】GUIでのアップデートが失敗したのでSSHでアップデート【Onyx17.8へ】

タイトルの通りGUIでのアップデートが失敗したので
SSHでアップデートを試みました。

php7とLetsEncryptoをどうしても使いたかった。

# /usr/local/psa/admin/bin/autoinstaller

とするわけですが、失敗しました。

コンポーネントおよび製品の検証により、重要な問題が 1 つ以上検出されています。
Plesk pre-upgrade check
  WARNING: After upgrade Tomcat component will not be available for installing and configuring. Java Tomcat applications will be available via 9080 port only and will not be available via http/https.
  You can also completely remove Tomcat component. Please check https://support.plesk.com/hc/en-us/articles/115004715774 for more details.

検出された問題を解決せずにインストールまたはアップグレードを続けると、データが破損する可能性があります。

続行しますか? : n

ここで公式ヘルプをみてTomCatを削除。
ここでもう一度しっぱいして、

/tmp/psa-installer.lock

ここを参考にして削除

これで後はいけました。以下ダイジェスト

 

 

【WP_REST_API】functions.phpと衝突してREST_APIが動かなかった話【jstork】

phpからwp rest apiを叩いて

	Notice:  Undefined index: HTTP_USER_AGENT in /Applications/MAMP/htdocs/hogehoge/wp-content/themes/jstork/functions.php on line 370

というエラーが出てちょっと詰まってしまいました。

$_POST = array();
$_GET = array();

とかやってみたがダメ
答えは

スクリプトの先頭に

$ini_set('user_agent','PHP');

と宣言。完了。

【テストコード】phpQueryのお勉強【Dom要素】

ひょんなところで知ったphpQueryがとても良さそうだったので
改めてお勉強を。。。

require_once('phpQuery-onefile.php');
$html = file_get_contents('https://finance.yahoo.com/currencies');
$dom = phpQuery::newDocument($html);
echo $dom["title"]."\n";
//-><title>Currency, Currencies &amp; Forex Currency Trading - Yahoo Finance</title>

echo $dom["title"]->text()."\n";
//->Currency, Currencies & Forex Currency Trading - Yahoo Finance

テキストを入れればタグなしを出力し、
入れなければタグも含めて取得する。

さて、ここからビットコインの価格を取得したいと思います。

$dom = phpQuery::newDocument($html);とするところがポイントでdomという変数名もいいよね。

参考:

http://tech.pjin.jp/blog/2017/05/31/phpquery1/
ありがとうございます

Macのターミナルでサーバー繋いでちょっと放置するとWrite faild : Broken pipeが出て困る【Mac】

Broken pipeが出てその後すぐSSH繋いでも、
接続切れた分のHistory ファイルが保存できてなくて作業効率が落ちる。

体感2分ほどで切れている気がする。

https://qiita.com/ysk24ok/items/2f4ced5edf306fdd9dfb

E45: ‘readonly’ option is set (add ! to override)
と出て保存できない問題もありましたが、
そこはsuでVim起動すれば解決っ!

PleskのLetsEncryptoでエラーが出るよ_Failed to connect to the (略) acme-v01.api.letsencrypt.org

(しかし実装はできていたので後回しにしていました)

ドメイン hogehoge.site の保護中に問題が発生しました。

Could not issue a Let’s Encrypt SSL/TLS certificate for hogehoge.site.

Failed to connect to the Let’s Encrypt server https://acme-v01.api.letsencrypt.org.
Please try again later or report the issue to support.
Details
Could not obtain directory: cURL error 6: Couldn’t resolve host ‘acme-v01.api.letsencrypt.org’ (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

ブラウザで
acme-v01.api.letsencrypt.org
にアクセスすると

An error occurred while processing your request.
Reference #97.4d96f648.1532980064.189a9a3a

と出ました。
ターミナルから
curl acme-v01.api.letsencrypt.org
と打っても一緒なわけで。。。

後日解決したらまた追記します。

後日追記:時間帯をずらせせて行えば成功しました。
     アクセス負荷が高かったのかなぁ。。。

ワードプレスのまっさらなテーマ(アンダースコア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はここまで

汎用的な中央そろえ_広告や_オーバーレイなど固定表示系使えるかなーと

top: calc(100% - 109px) !important;
right: 50% !important;
transform: translateX(50%);

calcで計算して下にビターンとつける。

x軸で右から50%に移動したあとにtranslateX(50%)でまた半分もどしてちょうど真ん中。

WPプラグイン「Automatically Paginate Posts」を導入するとbrタグが消される現象を解決する

ワードプレスの便利機能であるbrタグ自動挿入だったり自動削除。
これをちゃんと把握してなくてちょっと詰まったのでメモ。

とあるユーザーさんからワードプレスで改行ができない。
と報告を受けて調査。
functions.phpに下記内容はちゃんと挿入されてるしWP本体のバグを疑う。

remove_filter( 'the_content', 'wpautop' );

しかし解決せず、プラグインを一通り見直し、the_contentに関係してそうなものを調査。

ここで見つけたのが「Automatically Paginate Posts」.
自動でNextPageを挿入してくれるものです。

このプラグインのautomatically-paginate-posts.phpの
373行目、374行目あたりの下記内容を削除

	$content = preg_replace( '#<p>(.+?)</p>#i', "$1\r\n\r\n", $content );
	$content = preg_replace( '#<br(\s*/)?>#i', "\r\n", $content );

スラスラやイゲタでコメントアウトすると下の行の正規表現の?>がphpの閉じタグと誤認識されて
サイトが真っ白になるので注意!!

PleskからThe certificate for Parallels Panel will expire in N daysというタイトルのメールが来る

メール全文はこちら

################# SSL Certificate Warning ################

Certificate for hostname ‘Parallels Panel’, in file (or by nickname):
/usr/local/psa/var/certificates/cert3HbbzeR

The certificate needs to be renewed; this can be done
using the ‘genkey’ program.

Browsers will not be able to correctly connect to this
web site using SSL until the certificate is renewed.

##########################################################
Generated by certwatch(1)

メール全文ここまで

公式ヘルプによると無視して良いとのこと。
参考

しかし私のサーバーの環境はアップデート絡みなのか該当のphpが見つからず、、、
少し調べてたらLetsEncryptoのインストールと同時に
登録されるものらしい。

なのでサーバー→拡張からいLetsEnctyptoをインストールして解決。

推測するに
前のバージョンでLetsEncryptoを入れていたがアップデートのときに欠落(?)
Cronジョブが取り消されてて、証明書切れるよー大変なことになるよーと警告メールが届く。

という流れっぽい
解決

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

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

横並びのCSSの3パターン

CSSに関する記事はゴマンとあるので自分用メモにとどめておきます。
読みにくさがご勘弁を

CSSは奥さんのほうが詳しく、いつも聞いてばかりなので
同じことは聞かないようにうまくまとめていかないと、、、。

1
フロートレフト、フロートライトで頑張る
クリアフィックスを忘れない
(これはよく使うので割愛)

2
親にディスプレイフィックス
子にウィズで%指定_100位内に収める

 justify-content: space-between;

できれいに中央そろえ

3
親にフォントサイズ0を当てて

.hoge_left,
.hoge_right {
display:inline-block;
width: 49%;
}

4
親にテーブルを使う(ウィズ100%)
子にテーブルを使う(セル)
vertical-align
top: 上端揃え
を行う