2011年11月30日水曜日

[PHP]ディレクトリの再帰削除処理

要件は以下の感じです。

サブフォルダを含めてファイル、ディレクトリを削除する。
ただし、ルートディレクトリは消したくないケースがある。
また、ファイルの最終更新日時が1日以上経ったものだけ削除する。


function rmdirEx($rootPath , $dirDelete){

 if( !is_dir($rootPath)) return;

 $files = scandir($rootPath);

 foreach($files as $file){
  if ($file == '.' || $file == '..') continue;
  $fullpath = $rootPath . DIRECTORY_SEPARATOR . $file;
  if(is_dir($fullpath)){
   rmdirEx($fullpath , true );
  }else{
   $lastUpdateTime = filemtime($fullpath);
   //更新日時が1日以上前のファイルのみ削除する
   if( ($lastUpdateTime + (60 * 60 * 24)) < time())
    @unlink($fullpath);
  }
 }
 //消せれば消す
 if( $dirDelete) @rmdir($rootPath);

}

2011年11月29日火曜日

ajaxuploadを使った。

ブラウザで画像を選択したら、非同期でアップロードして画像を表示したくて使いました。
配布サイトここ(Ajax Upload)

最新版は完全に作り直されたらしくて、「File Upload」って名前に変わってます。
これも色々と試したみたのですが、UI周りのカスタマイズがいまいち分からなかった。

オプション設定で、template、fileTemplate、classesの当たりを設定すれば良さそう何だけど、
ドキュメントも少ないし、心が折れてあきらめました。

その点、旧バージョンのajaxuploadはiframeとか使って怪しいけど、素直で使いやすいです。

$(function(){
 new AjaxUpload('file1', { //input type="file"のid
  action: 'upload.php', //POSTを処理するphp
  name: 'PostName',  //phpで$_FILES['PostName']と使う。
  data: {paramA: 'valueA' ,paramB:'valueB'},  //オプションのデータ。$_POSTで渡される
  onComplete: function(file, response) {   //アップロード完了時のコールバック
   var ret = eval( '(' + response + ')' );  //JSONの展開
   if( ret.success ){
    $('#imageArea').attr('src', ret.path); //イメージの設定
   }
  }
 });

);


PHP側はこんな感じです。

//オプションパラメータの受取
$param = $_POST['paramA'];
$ret = null;
$uploaddir = 'D:\\upload\\';
$filename = basename($_FILES['PostName']['name'])
$uploadfile = $uploaddir . $filename;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
 $ret = array('success'=>true,'path'=>'/images/' . $filename);
} else {
 $ret = array('success'=>false);
}
echo htmlspecialchars(json_encode($ret), ENT_NOQUOTES);



2011年11月28日月曜日

電池の寿命

使い始めて約5年。
満タンに充電しても30枚くらい撮ったらバッテリー切れ。
バッテリーの寿命が来たようです。



来年の3月頃には新モデルが出るそうなので、そろそろ買い替えを考えていますが、それまでの間もバッテリーは必要なわけで。。。
価格さんで調べたら、純正品は1万円以上。


高すぎるのでやむなく互換製品を購入しました。
今のところ問題ありません。


2011年11月24日木曜日

[LAMP]ファイルがPOSTされない

画面で数個の画像ファイルをPOSTしたんですけど、サーバー側で受信されていない模様。
トレースログを見たら途中までは処理されて、途中から何も無かったような振る舞いを確認。

つまり、プログラムまでデータが渡っていない。と。

ちょっと調べたらapacheでのpostデータサイズ制限は「LimitRequestBody」で設定らしいです。
httpd.confには当該の記述が無かったので却下。
(デフォルトで無制限?危ないなぁ。。)

次はphp.ini。
それっぽいのいました。
「post_max_size」と「upload_max_filesize」。
upload_max_filesizeは1つ当たりのファイルサイズ上限設定で、post_max_sizeはpostの合計サイズ。

今回は、
upload_max_filesize = 10M
post_max_size = 60M
として、apache再起動で解決でした。

コア php.ini ディレクティブに関する説明

2011年11月16日水曜日

[ASP]配列の代入は値渡し?参照渡し?

ちょっと久しぶりにASP(classic)を触ったら不安になったので確認しました。
文字列が格納された配列を代入した場合、値渡しでした。


dim a,b,c
a = array("あいう","かきく","さしす")
'代入
b = a

'bの要素を書き換える
b(1) = "けこ"

for each c in a
    response.Write(c & "
") next Response.Write( "
") for each c in b response.Write(c & "
") next