web-dev-qa-db-ja.com

php :: tmpファイルの長さは?

アップロードスクリプトを作成しています。

ユーザーがファイルをアップロードし、それが既に存在する場合、ユーザーに警告し(これはすべてajaxを介して行われます)、ユーザーにファイルを置き換えるかキャンセルするかを選択します。

ファイルを移動する代わりに、ファイルをtmpに残し、ajax応答でそのファイルへのパスを返すことができるかどうか興味がありました。

ユーザーがそのajaxリクエストの古いファイルを上書きすると言った場合、パスをphpに戻し、ファイルで引き続き動作します。

ただし、これが機能するためには、ファイルがphpのtmp dirに留まる時間を知る必要があります

49
Hailwood

POST=を介してアップロードされたファイルは、phpスクリプトの実行が終了した直後に削除されます。

php.net :によれば、「ファイルは、移動または名前変更されていない場合、リクエストの最後に一時ディレクトリから削除されます。」

63
zerkms

アップロードされたファイルの場合、 マニュアルの状態

ファイルは、移動または名前変更されていない場合、リクエストの最後に一時ディレクトリから削除されます。

したがって、保持するファイルは別の場所に移動する必要があります。

より一般的には、質問のタイトルが示すように、一時フォルダーはシステムによってクリーンアップされるまで残されます。これは、 tempnamtmpfile などの関数を使用する場合、または単に一時ディレクトリに書き込む場合に当てはまります( sys_get_temp_dir を参照)。

Ubuntuでは、これは/etc/default/rcSで定義されているように、システムがリブートするたびに、または時間間隔で実行されます。

一部のRed Hatベースのディストリビューションでは、cronジョブからtmpwatchユーティリティを使用して行われます。その他の場合、/tmpパーティションはtmpfsファイルシステムを使用してマウントされます。これはRAMディスクに似ています(したがって、コンピューターのシャットダウン時にクリーニングされます)。

もう1つの既知のメカニズムはサイズのしきい値です。これは、一時ディレクトリが特定のサイズに達すると、古いファイルからクリーンアップされることを意味します。

20
netcoder