Abh*_*ddy 6 php amazon-s3 unlink
这是一段代码:
public function uploadPhoto(){
$filename = '../storage/temp/image.jpg';
file_put_contents($filename,file_get_contents('http://example.com/image.jpg'));
$photoService->uploadPhoto($filename);
echo("If file exists: ".file_exists($filename));
unlink($filename);
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试做以下事情:
If file exists: 1何时回显echo("If file exists: ".file_exists('../storage/temp/image.jpg'));.unlink(../ storage/temp/image.jpg):资源暂时不可用
如果我使用rename($filename,'../storage/temp/renimage.jpg');而不是unlink($filename);我得到一个错误:
重命名(../ storage/temp/image.jpg,../storage/temp/renimage.jpg):进程无法访问该文件,因为它正由另一个进程使用.(代码:32)
如果我删除函数调用$photoService->uploadPhoto($filename);,一切都很好.
如果该文件正由另一个进程使用,如何在完成该进程并且该文件不再被任何进程使用后如何取消链接?我不想使用计时器.
请帮忙!提前致谢.
最简单的解决方案:
gc_collect_cycles();
unlink($file);
Run Code Online (Sandbox Code Playgroud)
对我有用吗!将文件上传到亚马逊 S3 后,它允许我直接删除服务器上的文件。
请参阅此处:https : //github.com/aws/aws-sdk-php/issues/841
GuzzleHttp\Stream 对象持有一个资源句柄,直到它的 __destruct 方法被调用。通常,这意味着一旦流超出范围就会释放资源,但有时,根据 PHP 版本以及脚本是否已填充垃圾收集器的缓冲区,垃圾收集可以推迟。gc_collect_cycles 将强制收集器运行并在所有无法访问的流对象上调用 __destruct。
:)
小智 7
只是不得不处理类似的错误。
似乎您$photoService出于某种原因保留了图像......由于您没有共享 的代码$photoService,我的建议是做这样的事情(假设您不再需要$photoService):
[...]
echo("If file exists: ".file_exists($filename));
unset($photoService);
unlink($filename);
}
Run Code Online (Sandbox Code Playgroud)
该unset()方法将销毁给定的变量/对象,因此它不能“使用”(或无论它做什么)任何文件。
| 归档时间: |
|
| 查看次数: |
7626 次 |
| 最近记录: |