PHP雑記帳 ITかあさん

ITかあさん

PHP 特定の日時から何時間後

以前、PHP雑記帳のコーナーにて、PHPで今日から何日後、何日前とか。という記事を書きましたが、それと関連した内容で、今日意外、つまり自分が指定した特定の日時から何時間後、何日後を出力したいと思います。

すっかりおなじみ、strtotime()関数を利用。

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

こうなります。

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

このY-m-d H:i:sは日時のフォーマット

$test = "2011-03-02 14:45:26";//変更したい時間
date("Y-m-d H:i:s",strtotime("$test +1 hours"));

こちらに変更したい時間を入れる。
以上。
すごいね~。

Imagemagick xampp(Windows)インストール完全マニュアル

涙が出ちゃう!だってローカルPC(windows)にImagemagickがインストできちゃったんだもん!

一緒に解決してくれたSさん、本当にどうもありがとうございます。バレンタインなんかあげます。

画像をリサイズしたり、画像を加工したり、文字書いたりDBと連動してグラフ書いたり、はたまたロゴジェネレーター作っちゃったり!

何かと便利ですばらし

い画像加工ライブラリのGDやImagemagickですが、xamppをインストするとGDは入っていますが、Imagemagickは残念ながら入っていません。

ImagemagickをWindowsで動かすにはいくつかのプロセスを踏まないといけません。

WindowsでImageMagickをPHPから使用するための設定
画像処理についてあれこれいより

こちらを参考にさせて頂きましたが、残念ながらこれの通りにやってもいくつか抜けている点がありましたので、完全マニュアルをSさんと一緒に作りましたので、ご覧ください。同じことではまった人の助けになれば幸いです。

Imagemagick xampp(Windows)インストール完全マニュアル

1. ImageMagickをインストールをWindowsにインストします。この時、。Program Files配下などのスペースを含むパスにインストールしないことです。(例:C:\ImageMagick-6.6.7-Q16など)。
私はCの直下に入れました。

2. Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)のインストール
上記URLからダウンロードして、インストール。こちらからまだまだPHPからは使えません

3.PHP環境で使えるようにするため、php_imagickのインストール
以下のURLのMikko’s blogからphp_imagick_dyn-Q16.dllをダウンロード。
http://valokuva.org/?page_id=50
php_imagick_dyn-Q16.dllをPHPのextディレクトリにコピー

【超重要!】
事前にphpinfo()を実行して、自分の環境を確認してください。
Thread Safetyの項目を確認。
enabled→php_imagick.dll, TS
disabled →php_imagick.dll, NTS

それぞれ、Thread Safetyの項目によってインストールするものが違います。これもどはまりしました!

4. php.iniに以下の設定を追加(パスは環境に合わせて変更してください)

【超重要!】
必ず[PECL]の下に書いてください。基本かもしれないけど、これをやらずにはまりました
extension=php_imagick.dll

xamppで使うのであれば、書き換える必要はないけれどextension_dirが以下のようになっていることを確認
extension_dir = “\xampp\php\ext”

5. OSのシステム環境変数にMAGICK_HOMEという環境変数名で
ImageMagickをインストールしたパスを指定。(例:C:/ImageMagick-6.6.7-Q16)
このとき、¥マークじゃないほうがいいよ。
システム環境変数の追加の仕方はこちらが参考になります

Windows 7 にパス(Path)を設定する
Happy my lifeより

最後にWindowsを再起動させて終了です。phpinfo();で確認しましょう!Imagemagicの項目が追加されていたら完了です。

自分のマシンはWin7、社内用ローカルサーバーがWin XPでしたがどちらでも問題ありませんでした。
ちなみにxamppのバージョンは一個古い1.7.2を利用しています。1.7.3でも問題ないとは思いますがね。

PHP shift-jisで発生する文字化け

今日はのっけからつまずいた。
あるサイトのPC版のプログラムを作って、ほぼ完成し、後は携帯用に出力するだけ。PCでは問題なくできたから、後は携帯でも同じ出力をするだけ。
携帯といえば文字コードをshift-jisにするのが一般的ですね。

<meta http-equiv="Content-Type" content="text/html; charset=shift-jis" />

ってヘッダーに書いて、ファイルの文字コードもshift-jisにして、PCと同じスクリプトをぺたってして終了!
・・・と思いきや

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE
 or T_NUM_STRING in /home/maxy.jp/public_html/m/girllist.php on line 34

なんとびっくり!syntax errorエラーの発生!
え~~~~!
PCで全くエラーは出なかったのに、突然のエラーでした。エラーの対象となったのはここ。

//6.SQL実行&結果取得
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$syuxtukin = $db->getAll($sql2);
if(DB::isError($syuxtukin)){
echo("$sql2取得エラー");
//データベース切断
$db->disconnect();
}

はい~~~??

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE
 or T_NUM_STRING in /home/maxy.jp/public_html/m/girllist.php on line 34

これはもしや!と思って調べたところ、噂の5C問題とかいうやつでした。

5C問題というのは

ソЫ噂浬欺圭構蚕十申曾箪貼能表暴予禄兔喀媾彌拿杤歃濬畚秉綵臀藹觸軆鐔饅鷭

これらの文字をshift-jis環境で使うと、2バイト目が半角の \ と同じコードになってしまいます。
つまり、「”」が一個足らなくなってしまったんですね。
ここはとりあえず、DBからデータを取得する際のエラーを表記しただけなので一般ユーザーには影響ありませんので、

//6.SQL実行&結果取得
$db->setFetchMode(DB_FETCHMODE_ASSOC);
$syuxtukin = $db->getAll($sql2);
if(DB::isError($syuxtukin)){
echo("$sql2 is_error");
//データベース切断
$db->disconnect();
}

と、かっこよくENGLISHにしてひとまず退散。

5C問題が発生した時の解決策

これら5C問題が発生したら、その文字を使うのをやめるか、
<?php echo ‘表\’; ?>
のように余分に \ を入れます。

今日のまとめ

とりあえず、5C問題が発生したら\マークを余分に入れるか、対象となる文字を使わないようにする。
今までshift-jisとは無縁の生活を送ってきましたが、やはり携帯サイトはshift-jisのほうがSEO的にも有効ですし、やや古い機種の場合shift-jisのみしか表示されません。このことからも携帯サイトはshift-jisの文字コードで対応する必要があり、5C問題の解決とは切っても切れない関係にあるようですね。
ますますshift-jisが嫌いになりました。

PHPで今日から何日後、何日前とか。

今日の母さんは仕事で出勤管理スケジュールみたいなのを作ってます。

スケジュールってことは今日から何日後っていう感じで管理していきますわね。

前回仕事でPHPによるログファイル形式の簡易更新プログラムでもこのことはチラっと考えたものの、mktime()使ってしてました。

mktime()で今日から一週間後

一日が86400秒だから、×7で一週間分の秒数と、今日の分を足すってことで。

$date_today = mktime (0, 0, 0, date("m"), date("d"),  date("y"));

$after7days = 86400 *7 + $date_today;

echo = $after7days;

strtotime()で今日から一週間後

でも、今日知ったんですが、strtotime()っていうもっと簡単な方法があったんだね。

<?php echo date("Y-m-d",strtotime("+7 day"));?>

以上!終了!きゃ~!超簡単。

ついでなので、今日から一ヶ月後

echo date("Y年m月d日",strtotime("6 month" ));

すご~い!母さん感激しました。

今日のまとめ

今日から何日後とか何日前をPHPでやるなら、strtotime()関数が便利!うちのだんなより使える!