PHP - 移至AWS S3后删除本地文件 - 文本文件繁忙错误
问题描述:
我使用AWS PHP SDK将文件从我们的服务器移动到S3,移动后我想删除它们以节省我们服务器上的空间。但是当我尝试这样做时,我得到一个PHP警告:Text file busy in /path/to/file
。PHP - 移至AWS S3后删除本地文件 - 文本文件繁忙错误
如果我理解正确,我假设当我试图删除它时文件仍然被上传到S3。我寻找过像S3的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后删除一个目录或文件?
答
要从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中,当你想删除一个目录时,你必须确保你删除了所有的co它包含的内容:文件,内部目录等。您必须从最深层次开始删除第一层。
是的,这是我在做什么:'array_map('unlink',glob(“$ options ['dir'] /*.*”));'。这是失败的。 –
@MP_Webby我用递归函数更新了我的答案,该函数删除目录中的目录和文件 –