0

サーバー上のディレクトリを検索し、エコーとイメージを作成することができました (まあ、stackoverflow がその方法を教えてくれました)。問題は、フォルダー内の画像が yy_mm_dd_hh_mm という IP カメラによって名前が付けられていることです。ここで、dd (およびその他の日付の数字) は 1 桁または 2 桁です。たとえば、午前 9 時 50 分に撮影された画像が、最近の午前 10 時 5 分に撮影された写真よりも高い値として扱われないように、前にゼロを付ける必要があります。(問題を解決するために、09_50 と 10_05 として扱いたい)。

検索と置換を見てきましたが、現在のコード内でこれを機能させることはできません:

function webcam_image () {
foreach (glob( "../camera/IPC_IPCamera*.jpg") as $f ) {
$list[] = $f;
}
sort($list);
echo array_pop($list);   
}

サンプルファイル = IPC_IPCamera_13_7_24_9_57_45.jpg

どんな助けでも大歓迎です!

ありがとう

アリ

4

4 に答える 4

1

ファイル名を完全に無視して を使用しDirectoryIterator、ファイルの実際の変更日を取得します。このようなものがうまくいくかもしれません。

$files = array();
$iterator = new \DirectoryIterator('/path/to/dir');
foreach ($iterator as $file) {
  if(! $file->isDot()) $files[$file->getMTime()] = $file->getFilename();
}
ksort($files);

print_r($files);

詳細については、こちらをご覧ください: http://php.net/manual/en/class.directoryiterator.php

于 2013-07-24T11:56:59.483 に答える
1

私があなたのことを正しく理解していればpreg_replace、ファイルを ing することでこれを処理できます。

したがって、ファイルをループして次のことを行うことができます

$newFilename = preg_replace('/_([0-9])_/', '_0$1_', $oldFilename);

rename($oldFilename, $newFilename);
于 2013-07-24T11:58:18.423 に答える
0

次のようなものを試すことができます:

function webcam_image () {
    foreach (glob( "../camera/IPC_IPCamera*.jpg") as $f ) {
        $digits = explode('_', substr(substr($f, 13), 0, -4));

        foreach($digits as &$digit){
            $digit = sprintf("%02d", $digit);
        }
        unset($digit);
        $list[] = 'IPC_IPCamera_' . implode('_', $digits) . '.jpg';
    }

    sort($list);
    echo array_pop($list);   
}
于 2013-07-24T11:56:49.717 に答える