如何在不覆盖现有文件的情况下在PHP中复制文件?
发布时间:2020-05-25 09:14:30 所属栏目:PHP 来源:互联网
导读:当您使用 PHP copy函数时,操作将盲目地复制目标文件,即使它已经存在.如何安全地复制文件,如果没有现有文件,只执行复制? 显而易见的解决方案是调用 file_exists来检查文件是否存在,但这样做可能会导致竞争条件.当您调用 file_exists和调用 copy时,总是有可能
|
当您使用 PHP copy函数时,操作将盲目地复制目标文件,即使它已经存在.如何安全地复制文件,如果没有现有文件,只执行复制? 显而易见的解决方案是调用 file_exists来检查文件是否存在,但这样做可能会导致竞争条件.当您调用 file_exists和调用 copy时,总是有可能在其间创建另一个文件.检查文件是否存在的唯一安全方法是使用 fopen. 拨打fopen时,将模式设为“x”.这告诉fopen创建文件,但前提是它不存在.如果存在,fopen将失败,您将知道无法创建该文件.如果成功,您将在目的地创建一个可以安全复制的文件.示例代码如下: // The PHP copy function blindly copies over existing files. We don't wish
// this to happen,so we have to perform the copy a bit differently. The
// only safe way to ensure we don't overwrite an existing file is to call
// fopen in create-only mode (mode 'x'). If it succeeds,the file did not
// exist before,and we've successfully created it,meaning we own the
// file. After that,we can safely copy over our own file.
$filename = 'sourcefile.txt'
$copyname = 'sourcefile_copy.txt'
if ($file = @fopen($copyname,'x')) {
// We've successfully created a file,so it's ours. We'll close
// our handle.
if (!@fclose($file)) {
// There was some problem with our file handle.
return false;
}
// Now we copy over the file we created.
if (!@copy($filename,$copyname)) {
// The copy failed,even though we own the file,so we'll clean
// up by itrying to remove the file and report failure.
unlink($copyname);
return false;
}
return true;
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
