2017-05-05 32 views
0

AWS PHP SDKを使用して私たちのサーバーからS3にファイルを移動しました。移動後に削除します。 。しかし、私がこれをしようとすると、私はPHPの警告:Text file busy in /path/to/fileを取得します。PHP - AWS S3への移動後にローカルファイルを削除する - テキストファイル使用中エラー

私が正しく理解していれば、ファイルを削除しようとするとまだS3にアップロードされていると思います。私はS12のためにuploadCompleteのような何らかのコールバックを探しましたが、何も見つかりませんでした。ここで

は私のコードのサンプルです:

ので
//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にアップロードした後、ディレクトリやファイルを削除することができますか?

答えて

0

phpからディレクトリを削除するには、すべてのファイルと内部ディレクトリを再帰的に削除する必要があります。 またはexec("rm -rf directory_path");が、この

その後の編集には注意してください:

/** 
* @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); 
} 

使用法:

recursiveRemove('/path/to/directory'); 
私はディレクトリを削除したい場合は

が、私はいつも再帰関数を使用します

PHPでは、ディレクトリを削除する場合は、すべてのファイル、内部ディレクトリなどがあります。最も深いレベルから最初のレベルへの削除を開始する必要があります。

+0

はい、これは私がやっていることです: 'array_map( 'unlink'、glob(" $ options ['dir'] /*.* "));'。失敗しているのはこの行です。 –

+0

@MP_Webbyディレクトリ内のディレクトリとファイルを削除する再帰関数を使用して回答を更新しました –

関連する問題