個人的なまとめ。

てきとーに何か書きます。

$_SESSIONでページ遷移の時にもデータを保持する

phpで$_SESSION関数を使用して、ページング(ページ遷移)の時にもデータを保持したい。

ローカルでは、

<?php
    session_start();
?>

が必要だが、レンタルサーバー等にアップする場合には、session.auto_startが有効になっている場合は、不要です
もちろん、ローカルでもphp.iniでsession.auto_startが有効であれば不要です。

ちなみに、自分はこのsession.auto_startが有効になっている事に気づかずに、session_start();を書いてたせいで上手く動作しませんでした。

<?php
    $_SESSION['keyword'] = "音楽";
?>

とかやれば、$_SESSION['keyword']に"音楽"が代入されます。
$_SESSIONは、ブラウザが閉じられるまでデータを保持するので、途中でデータを消したい場合は、

<?php
    $_SESSION['keyword'] = "";
    $_SESSION['keyword'] = array();
    unset($_SESSION['keyword']);
?>

以上はどれも同じなので、好きなやつを使えばいいかな、と。
個人的には, = ""のやつを使ってます。

PHPで今日の日付に1日足す

例えば、2018年6月6日から2018年6月7日までの期間に絞ってデータを抽出したい時があるとする。

<?php
    $objDateTime = new DataTime('NOW');
    echo $objDateTime->format('Y-m-d');
?>

と実行すると、

2018-06-06

という風に値が得られる。

ので、ここに1日を足そうと思う。

<?php
    $objDateTime = new DataTime('NOW');
    echo $objDateTime->modify('+1 days')->format('Y-m-d');
?>

という風にするだけ。
勿論、echoの部分を$nextDay等適当に変数を付けてあげれば、使いやすいと思う。

今回はNOWではなく、入力したフォームの日付をGETで取得し、それに1日を追加したがやり方は同じ。

<?php
    $objDateTime = new DataTime($_GET['date']);
    echo $objDateTime->modify('+1 days')->format('Y-m-d');
?>

という風にするだけで、GETで取得したname=dateの値に1日追加する事ができる。

簡易的に足すのであれば、

<?php
    $nextDay = ++$_GET['date'];
?>

でも問題はない。ただこれだと、1日しか追加出来ないし、31日とか月末を指定された場合はエラーがでるので、上記の方法でやるのがベストだと思う。

IFTTTのWebhooksをphpで使う

昔から知ってて気になってたIFTTTを使ってみた。
実際、どう使えばいいのかいまいち分かってないけど、とにかく便利らしい。

Webhooksは自分で作成したアプリやWebなどに埋め込んで、URLにPOSTかGETで投げることで、動作を行う事ができるやつ。

<?php
$name = 'Sample';

$json_data = array(
    'value1' => $name,
);

$URL = "http://maker.ifttt.com/trigger/{EVENT_NAME}/with/key";
$URL .= $YOUR_KEY;

$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-Type: application/json',
        'content' => json_encode($json_data),
    )
);
file_get_contents($URL, false, stream_context_create($options));
?>

以上で出来る。file_get_contentsは使わない方が良いって書いてある記事もあったけど、とりあえずはこれで。curlを使うのがベストらしい。

$json_dataの配列の中のkeyは、IFTTTで設定をしたkeyと揃えると良い。
この画像の場合だと、$json_data = array( 'value1' => $name ); とかしてあげれば良い。
f:id:kosuke128:20180528193653p:plain

スマホの方でIFTTTのアプリを入れておけば、そっちに通知が行く。
使い道はイマイチ思いつかないけど、とりあえず使えるようになった。

ある特定の事をしたいためのvimコマンド

とあるプログラム作成の時にしか使わない、vimのコマンドをメモっておこうと思う。
あくまでも研究室用。きっと来年以降役に立つと思う。

q w        // 記録モードに
<Shift + I>    // 行の先頭に移動
\item       //  \itemは手入力
<Esc>      //  Escで一旦入力モードを終わる
<Shift + $>   //   行の一番後方に移動
a        //   入力モード
\\       //    \\を手入力
<Esc>                  
j        //  一つ下の行に下がる
<Shift + I>
\textit {
<Esc>
<Shift + $>
a
}
<Esc>
j
^
q        //  記録モードを終了する

使う時に、

@w

を入力するだけ。


追記:
実際の使い方としては、Texで大量に

\begin{itemize}
    \item Sample\\
    \textit{This is sample}
    \item Sample2\\
    \textit{This is sample2}
\end{itemize}

とか打つ時に、一々カーソルを左に動かして\itemって打ったり、右に動かして \\ って打ったりするのが大変なので、vimでまとめて一気にやりたい。
という時に使うのが上で書いたやり方。

同じような形式の物がずっと並んでいるのであれば、vimでまとめたやった方が確実に早い。

コマンドだけでテキストファイルをPDF化から印刷まで行う

学部生から、「コマンドだけで、テキストファイルをPDFにしてそれを印刷とか出来ませんかねぇ?」なんて言われたので、やってみた。
具体的に使用する場面が思いつかないけど、モニターが無いサーバーとかで、一々scpでローカルにファイルを持ってきたくない時とかに使う...??
まぁ、物好きもいると思うので、とりあえずやり方だけ。


方法としては、txt -> ps -> pdf -> 印刷という流れで行う。


まず、aptでパッケージをインストールする。

sudo apt install e2ps a2ps

次に、今回使用するe2psでは、文字コードEUCを使用するため、nkfを利用し変換を行う。
日本語が含まれる場合は、EUCへの変換が必要だが、英語だけの場合はUTF-8のままで問題無いと思われる。

nkf -e --overwirte FILENAME.txt

変換後に、

e2ps -p < FILENAME.txt | ps2pdf - > FILENAME.pdf

その後、lprコマンドで印刷する。

lpr -P PRINTER FILENAME.pdf

ワンライナーで印刷までやろうとしたけど、上手く行かなかったので、とりあえず別々に実行すればとりあえずは出来るよっていう話。