1

同じファイルシステム上のディレクトリ間でファイルを移動しようとしています。私が抱えている問題は、ファイルを使用するとrename()、ファイルシステム上のそのファイルのアクセス時間が変更されることです。

mvで使用shell_exec()してみましたが、何らかの理由でこの方法でmvを呼び出すと、ファイルがコピーされてから元のファイルが削除されるため、かなり時間がかかります。

アクセス時間を変更せずにファイルをすばやく移動する方法はありますか?または、電話した後に元に戻すことはできrename()ますか?

4

2 に答える 2

1

原則として、ファイルからのアクセス時間は、のような関数、またはファイルにアクセスする他の関数が実行するときに変更する必要があります。rename()

ファイルのアクセス時間の変更について。これは、マニュアルで説明されているように、タッチ機能を使用してのみ可能です。

bool touch ( string $filename [, int $time = time() [, int $atime ]] )

filenameパラメータで指定されたファイルのアクセス時間と変更時間をtimeで指定された値に設定しようとします。パラメータの数に関係なく、アクセス時間は常に変更されることに注意してください。

ご覧のとおり、時間パラメータはマニュアルで次のように説明されています。

touch time

時間が指定されていない場合は、現在のシステム時刻が使用されます。

そして、これは、ファイルから1時間前にアクセス時間を設定する同じページの例です。

<?php
    // This is the touch time, we'll set it to one hour in the past.
    $time = time() - 3600;

    // Touch the file
    if (!touch('some_file.txt', $time)) {
        echo 'Whoops, something went wrong...';
    } else {
        echo 'Touched file with success';
    }
?>

ただし、説明したように、タッチ機能はファイルを変更しようとすることに注意してください。たとえば、権限がない場合、関数はを返しfalseます。(そしてファイル時間を変更しません)

乾杯

于 2012-11-11T02:57:50.130 に答える
1

を使用してファイルのアクセス時間を一時的に保存し、を使用してファイルをfileatime変更できますtouch

$filename = 'somefile.txt';
$original_timestamp = fileatime($filename);
// .. modify file here ..
touch($filename, $original_timestamp);
于 2012-11-11T03:02:24.720 に答える