5

tmpディレクトリがいっぱいになると、file_put_contentsはFALSEを返しますが、ファイルはサイズ0で作成されます。file_put_contentsは、ファイルの作成を完了するか、まったく効果がないはずです。例えば:

$data = 'somedata';
$temp_name = '/tmp/myfile';
if (file_put_contents($temp_name, $data) === FALSE) {
    // the message print that the file could not be created.
    print 'The file could not be created.';
}

しかし、tmpディレクトリに移動すると、サイズ0のディレクトリに作成されたファイル「myfile」を見つけることができます。これにより、保守が困難になります。ファイルを作成しないでください。tmpディレクトリがいっぱいであるというメッセージまたは警告が表示されます。私は何かが足りないのですか?そして、これは正常な動作ですか?

4

3 に答える 3

3

問題は、file_put_contentsが必ずしもブール値を返すとは限らないため、条件が適切でない可能性があることです。

if(!file_put_contents($temp_name, $data)){
    print 'The file could not be created.';
    if(file_exists ($temp_name))
        unlink($temp_name);
}
于 2013-01-04T21:52:53.900 に答える
3

エラーメッセージを実行する場合、そのシナリオにも注意する必要があることをおそらく見逃しています。

$data      = 'somedata';
$temp_name = '/tmp/myfile';

$success = file_put_contents($temp_name, $data);
if ($success === FALSE)
{
    $exists  = is_file($temp_name);
    if ($exists === FALSE) {
        print 'The file could not be created.';
    } else {
        print 'The file was created but '.
              'it could not be written to it without an error.';
    }
}

これにより、一時ファイルへの書き込みトランザクションが失敗した場合のクリーンアップなどに対処し、システムを以前の状態にリセットすることもできます。

于 2013-01-04T21:43:53.777 に答える