首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -移动到AWS S3后删除本地文件-文本文件忙错误

问PHP -移动到AWS S3后删除本地文件-文本文件忙错误
EN

Stack Overflow用户
提问于 2017-05-05 21:30:05
回答 2查看 735关注 0票数 2

我正在使用AWS PHP SDK将文件从我们的服务器移动到S3,在它们被移动之后,我想删除它们以节省服务器上的空间。但是当我尝试这样做的时候,我得到了一个PHP警告:Text file busy in /path/to/file。

如果我理解正确,我假设当我尝试删除该文件时,该文件仍在上载到S3。我已经寻找了某种回调,比如S3的uploadComplete,但什么也找不到。

下面是我的代码示例:

代码语言:javascript
复制
  //Upload dir:
  $result = false;

  try{
      $result = $this->aws['s3']->uploadDirectory(
        $options['dir'],
        $options['bucket'],
        $options['key'], array(
        'before' => function(\AWS\Command $command){
                $command['ACL'] = 'public-read';
        })
      );    
   } catch (S3Exception $e) {
      error_log('AWS ERR, failed to add object to bucket: '.$e->getMessage());
   }

  if ($result) {       
    //remove local copy
    array_map('unlink', glob("$options['dir']/*.*"));
    rmdir($options['dir']);        
  }

那么,上传到S3后如何删除目录或文件呢?

EN

回答 2

Stack Overflow用户

发布于 2017-05-05 21:33:18

要从php中删除目录,必须递归地删除每个文件和内部目录。或者exec("rm -rf directory_path");,但是要小心使用这个

稍后编辑:

当我想删除一个目录时,我总是使用一个递归函数:

代码语言:javascript
复制
/**
 * @param string $path
 * 
 * @return void
 */
function recursiveRemove($path)
{
    if (file_exists($path) === false) {
        return;
    }
    if (is_file($path)) {
        unlink($path);
        return;
    }

    $files = scandir($path);

    foreach ($files as $item) {
        if ($item === '.' || $item === '..') {
            continue;
        }

        $fullPath = $path . '/' . $item;

        if (is_dir($fullPath)) {
            recursiveRemove($fullPath);
        }

        if (is_file($fullPath)) {
            unlink($fullPath);
        }
    }

    rmdir($path);
}

用法:

代码语言:javascript
复制
recursiveRemove('/path/to/directory');

在PHP中,当你想要删除一个目录时,你必须确保你已经删除了它所拥有的所有内容:文件,内部目录等。你必须从最深一层开始删除。

票数 0
EN

Stack Overflow用户

发布于 2021-12-14 08:59:48

在删除文件之前,请尝试调用:

代码语言:javascript
复制
gc_collect_cycles();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43806266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档