2012/05/20

【PHP】指定ディレクトリのファイルを日付ソートして配列で取得

現在作成中の機能で使った奴のメモ

phpで「scandir」という関数でファイル名一覧は取得できますが、
ファイルの更新日時等は取得できません。

更新日時等でソートする必要がなければいいのですが、どうしてもソートしたいという要望?が
あったので、それに対応するために「DirectoryIteratorクラス」を
使用しました。

この関数は指定したディレクトリ内の情報を取得してくれます。
更新日付とかファイルサイズとかも取ってきてくれるので更新日付以外でもソートできます。

サンプルコード
<?php

// ファイル情報格納用配列
$file_info_list = array();

// DirectoryIterator
$file_list = new DirectoryIterator($path);
foreach ($file_list as $file_info)
{
    // ファイル以外はループに戻る
    if (!$file_info->isFile())
    {
        continue;
    }

    // 配列のキーに更新日時をセット
    $file_info_list[$file_info->getMTime()] = array(
        'file_name' => $file_info->getFilename(),
        'file_size' => $file_info->getSize(),
        'update'    => $file_info->getMTime(),
    );
}

// 更新日時(キー名)の降順にソート
krsort($file_info_list);

var_dump($file_info_list);
getMTime」で更新日時のタイムスタンプが取得できるので、 それをキー名に使用し、キー名でソートを実行します。 ですので、キー名が更新日時のタイムスタンプになります。 終わり

2012/05/10

【サーバ】301リダイレクトを使う上での注意点

先程の記事で説明したWWWあり、なしを統一する際にハマったメモ

最初はFirefoxで301リダイレクトの確認をしていたのですが、設定をミスっていたらしく失敗していました。
その後何度か変更を加えてチェックしたのですが、最初に変更した設定から
何も変更されませんでした。

それで違うブラウザでやってみようということでIEで接続してみたところ現在の設定が反映されていました。

少し調べてみると301リダイレクトについての記述が見つかったので、それを探ってみるとビンゴ。

301リダイレクトはリソースの恒久的な移動を意味する。
「このURIはもうこっちのURIに変更されました。」というのをブラウザ等に通知するということらしく、 ブラウザ側でそのURIを記憶してしまうのだそうです。 なので、設定変更後にアクセスしたIEではきちんと反映されていたという訳です。 Firefoxの場合はキャッシュをクリアして再起動したら、きちんと反映されるようになりました。 ※IEの場合はキャッシュ削除ではダメらしく、ツールが必要なようです。 終わり 参考URL:.htaccessによるリダイレクトをやめてもIE9のみリダイレクトされ続ける

【サーバ】URLをWWWあり、なしに統一する

ということで本日やったメモ
僕が携わったサイトではないのですが、お客さんからURLのWWWを有りに変更して欲しいという
依頼があったらしくそれを投げられたので調べた時のメモ

今回は「mod_rewrite」を使用し、wwwなし(またはあり)のURLでアクセスがあった場合は
301リダイレクトを利用し、wwwあり(またはなし)にリダイレクトするという設定にしました。
設定は、「httpd.conf」または、「.htaccess」にて行います。

WWWあり統一
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com RewriteRule ^(.*)$ http://www.example.com/$1 [R=301, L]
WWWなし統一
RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.example\.com RewriteRule ^(.*)$ http://example.com/$1 [R=301, L]
終わり

2012/05/01

【PHP】Qdmailでメール送信した際に本文にヘッダーが表示される【Qdmail】

ということで今日あったQdmailの不具合?についてのメモ。

Qdmailでメール送信した際に、ヘッダーの一部またはすべてが
本文に表示されてしまうという不具合?に遭遇しました。


原因としては、ソースコード上の改行コードが違うために
起こってしまうそうです。

Qdmailではヘッダーの改行コードをRFCに準拠していますので「CrLf」なんだそうです。

ただ、qmailなどでメールを送信している場合に「CrLf」だと不具合が起きてしまうことが
あるそうです。

うちのサーバはPostfixでしたが、ダメだったみたいですね。
ですので、改行コードをソースコード上で「CrLf」から「Lf」に変更したところ、
ヘッダーが本文に表示されることは無くなりました。

Qdmailで使用する改行コードを変更するには
「lineFeed関数」を使用します。
$mail->lineFeed("\n");
終わり 参考URL:ヘッダーが見えてしまう等 - Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte