我正在使用AWS PHP SDK将文件从我们的服务器移动到S3,在它们被移动之后,我想删除它们以节省服务器上的空间。但是当我尝试这样做的时候,我得到了一个PHP警告:Text file busy in /path/to/file。
如果我理解正确,我假设当我尝试删除该文件时,该文件仍在上载到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后如何删除目录或文件呢?
发布于 2017-05-05 21:33:18
要从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中,当你想要删除一个目录时,你必须确保你已经删除了它所拥有的所有内容:文件,内部目录等。你必须从最深一层开始删除。
发布于 2021-12-14 08:59:48
在删除文件之前,请尝试调用:
gc_collect_cycles();https://stackoverflow.com/questions/43806266
复制相似问题