mazeltov7のweb断片

備忘録的なテキトーなことを書きます。(技術記事はQiitaに移行しました http://qiita.com/mazeltov7 )

centos7, apacheでSymlink使う場合

これのCentOS7バージョン
CentOS, ApacheでSymlinkを使う場合の設定 - mazeltov7のweb断片

*参考
apacheのDocumentRootをユーザディレクトリのシンボリックリンクに - Qiita

#現在の設定確認
root> getsebool -a | grep  "httpd_enable_homedirs\|httpd_read_user_content"
root> httpd_enable_homedirs --> off
root> httpd_read_user_content --> off

#設定変更
root> setsebool -P httpd_enable_homedirs on
root> setsebool -P httpd_read_user_content on

onになってるのを確認して、リンク貼って、実際に確認。表示されたらOK

以上。

さくらVPSにCentOS7入れたらすること(ssh)

概ねここに則る感じで大丈夫(centos6の時のメモ)
さくらVPSにCentOS入れたらすること - mazeltov7のweb断片
なんだけど、sshログインのportのところでcentosの場合はしなきゃな部分がある。

*参考
- CentOS 7 で ssh のポート番号を変更する | Balun Software (Info)
- CentOS 7 で sshd のポート番号を変更する - Web Application Security Memo
- CentOS 7 で sshd のポートを変更する(firewalld, SELinuxの設定) | CentOS | daily memorandum 3.0.0

centos7ではiptableやなくて、firewalld使う感じで、sshログインで使うポートを設定する必要があるって感じ。やり方は参考リンク見ましょう笑

以上。

apacheでwebとcliでphpのバージョンが違った件

これはなに

memcachedを使おうとしたら、コマンドラインでは動くのに、web(localhost)で動かなった話。なんかphpバージョンも違ってなんやこれと思った

どうやった

まず、memcachedを起動する部分と別にphpで使うライブラリを入れる。(この辺はメモ)

ちなみに、  
brewで入れたやつはここに入ってて、
/usr/local/Cellar/php56-memcached
pecl/手動makeしたのはこちらに入ってる
/usr/local/Cellar/php56/5.6.17/~~

で、/usr/local/optのが効いてるぽいけど、
/usr/local/opt/usr/local/Cellarからのリンクになってる。

php.iniについてだけど、web(apache)の方は/etc/php.iniを見てて、
cli/usr/local/etc/php/5.6/php.iniを見てる。

apacheのモジュールとルートについて、
/etc/httpd.confに設定書いてるけど、その中で、 apacheのルートが/usrな場合はhttpd.con内にLoadModule libexec/hogehogeとか書いてたら、/usr/libexec/hogehogeで読み込んでる。

ここで元の話に戻る。webとcliphpバージョンも設定も違ってwtfっとなってたところ、この記事を発見。
OSX Apache using wrong version of PHP - Stack Overflow
で、brew info php56すると、Caveats以下に入れたらこれやれよ、的な事が書いてあって、その中に、

To enable PHP in Apache add the following to httpd.conf and restart Apache:
    LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

とあり、httpd.confみにいくと、LoadModule php5_module libexec/apache2/libphp5.soとなってた。。。これやぁぁぁぁ、、、、ってことで、書き換えて、sudo apachectl restartするとバージョンもmemcachedも解決。

jqueryでコロン含むセレクタを使う場合

これなに

jqueryではコロンはセレクタで特別な意味を持つのでエスケープしないといけない。んだけど、\:て感じで書いてもうまく動かなくてハマりかけた。

解決

$('#hoge\:wowo')な感じで、\\スラッシュを二回入れるとエスケープできる。
参考:
- ARKの技術メモ: [jQuery]コロンを含むセレクタを指定する方法
- JQueryでコロン付きのセレクターを使う場合 - ほげほげ(仮)

以上

mysqlでUTCのepoch timeをintで入れようとしてエラー出た件

これはなに

UTCのepoch timeをintでmysqlに突っ込もうとしたら、怒られたって話。
mysqlの最大値は決まってて、2,100,000,000くらいまで。
で、今回入れようとしてたのは1453101209560( = 1,453,101,209,560)(てか、ミリ秒やんこれorz)で、余裕アウトw まぁ、string入れました。
ここ参考にした。 これだけは覚えておきたい!!MySQL の6つの自動変換 - sakaikの日々雑感~(T)編

csv(utf-16le)のファイルから良い感じに情報を取得する

これはなに

google play storeのレビューをslackにポストする、ってのをしようとして、データを良い感じにとるところで、文字化けとかデータにゴミが入ったりなどでつらみあったので、メモ。

やったこと

まずレビューcsvを取得するところは、提供されてるgsutilを使う。
以下とかに書いてあるのを適当に見て使う。 Android - アプリのレビューを HipChat で自動通知する - Qiita

データcsv取得自体は、gsutil cp gs://<report bucket ID>/reviews/reviews_<package name> /path/to/your/local/dirとやって取ったりする。
で、ここから

<?php
$file = '/path/to/reviews.csv';
$data = file_get_contents($file);
$data = mb_convert_encoding($data, 'UTF-8', 'utf-16le'); // これ大事
$temp = tmpfile();
$csv  = array();
fwrite($temp, $data);
rewind($temp); 
while (($data = fgetcsv($temp, 0, ",")) !== FALSE) {
    $csv[] = $data;
}
fclose($temp);
var_dump($csv);

レビューcsvがutf-16leでできてるので、これを指定すると文字化けせず、ゴミも除去した形で取得できる。ちょとハマったのでメモ。
あと、ここも参考になりました。PHPのテクメモ » Blog Archive » UTF-16LEをUTF-8に変換したら末尾の文字が消える

以上

mysqlでテーブル内の同一カラムで引き算した結果出す

やったこと

mysqlのテーブルで、同一カラムを引き算して結果出したい場合、それぞれテーブルを名前付けて引くと良い
こんなテーブルがあるとして、

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| id            | int(11)      | NO   | PRI | NULL    | auto_increment |
| name          | varchar(255) | YES  |     | NULL    |                |
| followers     | int(11)      | YES  |     | NULL    |                |
| following     | int(11)      | YES  |     | NULL    |                |
| created       | datetime     | YES  |     | NULL    |                |
+---------------+--------------+------+-----+---------+----------------+

同じユーザー名で、昨日と今日のフォロワー数とかフォロー数を引き算して出したい。簡単に書くとたとえば、(今日/昨日は適当に入れて)

mysql > select A.name, A.followers - B.followers as followers, A.created
        from tw_data A, tw_data B 
        where A.created = '今日' and B.created = '昨日' and A.screen_name = B.screen_name;

とかやると出せる。

以上