読者です 読者をやめる 読者になる 読者になる

プログラミング備忘録

linux, javascript, php, C#, そのうちScalaとかアプリ開発とかやってみたいです。

phpの無名関数で値を使いまわす場合は参照渡しが必須

php

題名通りです。

無名関数のuseに渡す値を参照渡しにしないと、毎回値がリセットされてしまうようです。

 

例として、まわりくどいですが、配列の重複を削除する方法。

array_unique使えばええやんというツッコミはなしで

 

$check_array = ;

$filterd_array = array_filter ($target_array, function($item) use (&$check_array) {

     if ( in_array($item, $check_array) ) {

           return false;

     }

     $check_array = $item;

     return true;

});

 

 

みたいな感じですかね。

 

tarコマンドでディレクトリ全体を圧縮する

linux

いつも忘れてググっては、情報いっぱいあって2,3分探すので…。

 

例) foobarディレクトリをfoobar.tar.gzファイルに圧縮するコマンド

tar cvfz foobar.tar.gz foobar/

 

ちなみに、解凍は

tar xvzf foobar.tar.gz

ですな。

MySQLのALTER TABLEで既存カラムVARCHARの文字数は減らせないことがある

MySQL

知らなかったです。

 

tbl_user.user_nameがVARCHAR(500)とかで、

「田中太郎衛門」(VARCHAR(10)は越えてるデータ)

などというデータが既にテーブルに入っていた場合、

 

 ALTER TABLE tbl_user  MODIFY user_name VARCHAR(4); 

 

などとして、

既にカラムに入っているサイズより小さくしようとしても、

エラー出るんですね!

 SQLSTATE[01000]: Warning: 1265 Data truncated for column 'XXXXX' at row 1

「田中太郎衛門」(VARCHAR(10))     VARCHAR(4)

なので。

ネット情報では、切り捨てられるとか書いてるページあったけど、

バージョンによってはエラーになるんですな。時間とられた。つかれた。

 

 

ただし、

カラムに入っているサイズより大きい場合、

たとえばVARCHAR(300)ぐらいに縮める場合

 ALTER TABLE tbl_user  MODIFY user_name VARCHAR(300); 

はうまくいきます。

「田中太郎衛門」(VARCHAR(10))     VARCHAR(300)

なので。

 

 

 

 

ubuntu + apache2 で8080ポートも併用する場合

ubuntu apache2

apache使って開発している時に、

http://hogehoge.comと、http://hogehoge.com:8080とで、

表示サイト変えたいなどということ、あると思います。

 

そういう場合の手順になります。

ubuntuのバージョンは16.04で、apache2の場合です。

 

・/etc/apache2/ports.conf に8080ポートを追加

vi /etc/apache2/ports.conf

 

Listen 80
Listen 8080 ←これを追加

 

・sites-availableに、8080ポート用の設定を追加

cd /etc/apache2/sites-available

 

例として、もともとの「000-default.conf」をコピーして、

「new-port.conf」を作成します。

cp 000-default.conf new-port.conf

 

vi new-port.conf

 

<VirtualHost *:8080> 8080にします。

...(なんやかんやの設定)...

DocumentRoot /var/www/newport ←別のディレクトリを設定

...(なんやかんやの設定)...

</VirtualHost>

...(なんやかんや)...

 

<Directory "/var/www/newport"> ←ディレクトリの設定
AllowOverride All
Require all granted
</Directory>

 

・サイトの設定を有効化

※new-port.confを有効化したいので、a2ensite new-port とコマンド打ちます。a2ensite new-port

 

apacheを再起動するなどします。

service apache2 reload

もしくは

service apache2 restart

 

・結局どうなるの?

http://hogehoge.com:8080/でアクセスすると、

new-port.confの設定が適用されて、

/var/www/newport ディレクトリの内容が読み込まれます。

※当たり前ですが、/var/www/newport はmkdirして、パーミッション適当に設定しておいてください。

 

 

以上です。

 

 

 

 

 

Mysqlのdate_time型で、「月」や「月日」で検索する方法

MySQL

Mysqlのdatetime型や、date型のカラムに対して、

年月日ではなく、「月」や「月日」で抽出したいときは、

DATE_FORMAT関数を使うと便利です。

 

MySQL :: MySQL 5.6 リファレンスマニュアル :: 12.7 日付および時間関数

 

例)誕生日が7月のユーザを抽出

SELECT * FROM users  

WHERE DATE_FORMAT(birth_day, '%m') = '07';

 

例)誕生日が7月8日のユーザを抽出

SELECT * FROM users  

WHERE DATE_FORMAT(birth_day, '%m%d') = '0708';

 

もちろん、年月日でも抽出可能です。

例)誕生日が1999年7月8日のユーザを抽出

SELECT * FROM users  

WHERE DATE_FORMAT(birth_day, '%Y%m%d') = '19990708';

 

 

以上になります。

 

参考URL)

d.hatena.ne.jp

ubuntu16.04のapacheでphpを使用できるようにする

linux

phpをインストール

sudo apt install php libapache2-mod-php php-mbstring php-gd php-xml php-zip

 

・ログの保存期間を延ばす

/var/log/apache2 以下のlogが、デフォルトだと14日しか保存されない。

延ばす場合は、/etc/logrotate.d/apache2 の中の、

daily
rotate 14
という行を、
monthly
rotate 200
などとする。

 

・最後にapache2を再起動
service apache2 restart

 

以上。

はてなブログで、「見たまま」モードのままでシンタックスハイライトする方法

その他

はてなブログでは、「見たまま」モードを主に使っております。

はてな記法」もありますが、使い方がまさに「?(はてな)」でして、なかなか手が出せないのです。

 

とはいえ、phpcssのコードをいい塩梅に表示させたい。

そう思ったので、google code prettify を使うことにしました。

 

github.com

 

私の方法は、まず、はてなブログの管理画面で、

「デザイン」 → カスタマイズ(レンチのマークボタン)→ フッター

と設定画面を開いて、

 

f:id:teenprogrammer:20170120154745p:plain

 

<script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script>

 

を埋め込みます。そして「変更を保存」します。これで前準備は完了。 

フッター部分に、googleのcdnを使わせてもらうjavascriptを一行書くだけです。

※「skin=〇〇〇」の部分は、好きなスキンを入れてください。私はsunburstにしました。

 

スキンの種類は4つです。

https://cdn.rawgit.com/google/code-prettify/master/styles/index.html

注意としては、↑のURLだとスキン名の頭文字が大文字ですが、指定するときは全部小文字です。

 

あとは、ブログをとりあえずいったん書いた後、

コードシンタックスさせたい場所だけ、「HTML編集」で直接開いて、書き込みます。

 

f:id:teenprogrammer:20170120155718p:plain

 

<pre class="prettyprint lang-XXX">

シンタックスさせたいコード

</pre>

 

のようにします。lang-XXXは、lang-htmlだったりlang-cssだったりlang-javaだったりlang-phpだったり言語により変わります。

prettyprintだけ書いても動きます。めんどうであればlang-XXXの部分はいりません。

このあたりは、google code prettifyの使い方で調べればいくらでもでてきますので…。

試しにphp言語を表示した例。まあまあキレイ。 

class Hoge {
    private $fuga;
    
    public function getFuga() {
        return $fuga;
    }
}

 

参考)

google code-prettify get started

github.com

 

qiita.com