59

アップロードスクリプトに取り組んでいます。

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

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

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

ただし、これを機能させるには、ファイルがphpのtmpディレクトリにどのくらいの期間留まるかを知る必要があります

4

3 に答える 3

71

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

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

于 2011-01-11T01:06:10.983 に答える
23

アップロードされたファイルの場合、マニュアルには次のように記載されています。

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

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

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

Ubuntuでは、これはシステムを再起動するたびに、またはで定義されている時間間隔で実行され/etc/default/rcSます。

一部のRedHatベースのディストリビューションではtmpwatch、cronjobのユーティリティを使用して実行されます。その他の場合、/tmpパーティションは、RAMディスクに似たファイルシステムを使用してマウントされtmpfsます(したがって、コンピューターのシャットダウン時にクリーンアップされます)。

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

于 2011-01-11T01:43:16.647 に答える
-2

/ tmpディレクトリのガベージコレクションが正しく行われるようにするには、PHPで設定する必要のある3つの変数があります。これらは次のとおりです。

session.gc_maxlifetime = 21600
session.gc_probability = 1
session.gc_divisor = 100

session.gc_maxlifetimeを、各tmpファイルが削除されるまでの秒数に設定します。OpenCartで管理者にログインする場合、これは自動的にログアウトされるまでの秒数です。たとえば、30分を設定するには、60秒×30分を実行します。これは、1800秒の値になります。

他の2つの変数は、ガベージコレクターが実行されるタイミングに関連しており、これに問題がある場合は、上記の値に設定することが重要です。

詳細はこちら: https ://www.antropy.co.uk/blog/opencart-php-session-tmp-files-filling-up/

于 2017-05-09T08:28:44.500 に答える