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

您可能错过了,如果您执行错误消息,您也需要处理这种情况:

$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 回答
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 回答
-1

嗨兄弟我找到了解决方案,

我知道它很旧,但它可能会帮助像我这样的其他人,

我很长一段时间都在搜索这个代码。

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

$success = file_put_contents($temp_name, $data);
  if (!$success){
     $exists  = is_file($temp_name);
     if (!$exists) {
        print 'The file could not be created.';
     } else {
       print 'The file was created but '.
       'it could not be written to it without an error.';
     }
  }
于 2019-10-12T12:03:39.923 回答