揮発性のメモ2

知識をメモ書きしておく

phpで、requireの中で定義した変数をglobalでglobalに使う


a.php
<?php
$SETTING = [1,2,3];
b.php
#!/usr/bin/php -q
<?php
require_once "a.php";

echo $SETTING[0];

このとき、普通に b.php を実行するとちゃんと 1 が出力される。a.phpで定義した変数が正しく認識されている。

しかし、PhpStormでは 未定義です とか言ってエラー扱いになる。 なんでだよ



回避策は、(本来は無駄で無意味だが) global 宣言を書いてしまう

b2.php
#!/usr/bin/php -q
<?php
require_once "a.php";
global $SETTING;

echo $SETTING[0];

ユーザがログインしてログアウトすると、そのユーザの作ったmqueueが消える

systemdの設定で RemoveIPC とかいう機能がデフォルトで有効になっていて、そのユーザーのセッションがすべてログアウトされるとそのユーザーが使用していたIPCリソースがすべて消える というとんでもない仕様。
共有メモリ、セマフォ、メッセージキュー とか。POSIX も System V もどっちもアウト。

この仕様のおそろしいところ

あるユーザ権限で起動しているサービスがメッセージキュー等を使っているとき、そのユーザがログインして作業してログアウトすると 動かなくなる。
びっくりしてシステムを再起動すると動作は正常に戻る。
しかし、遠隔ログインして状況を確認し うん大丈夫 と安心してログアウトするとまた死ぬ。
かといって調査を放棄しログインしなくなれば問題なく動作し続けるので、本当にキツネにつままれた気分になる


もともとは、GUI環境とかでユーザーがデスクトップからログアウトするとかしてセッションが全部なくなった時に 残ったリソースを全部掃除するのが目的のオプションらしい。

こう直して再起動することで回避できる

/etc/systemd/logind.conf
[Login]
#RemoveIPC=yes
RemoveIPC=no
systemctl restart systemd-logind.service
続きを読む

PhpStormで、閉じ括弧入力時に自動で整形する機能を無効化する

} を打つたびに 不細工に整形される不具合を回避する


エディター ⇒ 一般 ⇒ スマートキー から 「'}' 入力時にブロックを整形する」 のチェックボックスをオフにする
日本語化していないときは Reformat block on typing '}' を検索する

lftp

今のLinuxにはなんかftpコマンドが無くて、代わりに lftp というコマンドになってた。
パッケージ名は lftp

dnf install -y lftp

使い方

# lftp -u ユーザー名,パスワード -p ポート番号 ホスト名
lftp -u user,pass -p 8000 192.168.1.10

コマンドラインにパスワードが書けるのは 実利全振りでセキュリティ意識が欠片も感じられなくて好き

jQueryで、 toggleClassを使ってクラスをつけたり外したりする

api.jquery.com

第1引数にクラス名のみを書くと、そのクラスを交互につけたり外したりする。
第1引数にクラス名、第2引数に真偽値を書くと、真のときはクラスをつけて、偽のときにはクラスを外す。

$("#hoge").toggleClass("hoge_red", true);  // 真なので クラスをつける
$("#hoge").toggleClass("hoge_red", false); // 偽なので クラスを外す

$("#hoge").toggleClass("hoge_red", 0);     // boolではないのでトグル動作する(この場合、つける)
$("#hoge").toggleClass("hoge_red", 1);     // boolではないのでトグル動作する(この場合、外す)

jQuery内では booleanかどうかtypeofで判断しているので、1や0のときは トグル動作になってしまう。 つまり「1だから真やろ」な甘えはここでは命取りになる

マジかよフジャッケンナなんでこんなとこだけ厳密にやってんだよ