To deal with this situation, some methods are to rename the new file with a timestamp, and some are to use the method of incrementing the serial number. In order to solve the troublesome operation, I recently wrote a frename function, which can flexibly obtain the upload based on custom rules. The new name of the file is hereby shared.
Copy code The code is as follows:
function frename($file, $rule='{ timestamp}', $force = true) {
/* -----------------------
* author: m35
* date : 2009/8/11
* Obtain the new name of the file according to the naming rules to handle the situation when the file name already exists when uploading files and other operations
* @parm1 $file -- the physical path of the file
* @parm2 $rule -- naming rule, the default is timestamp
* @parm3 $force -- whether to force naming, if so, the target file will be named even if it does not exist, the default is forced
* retrun str -- a new file path named according to $rule
* Example:
echo 'Default rule (timestamp):' . frename(__FILE__);
echo '
Serial number increment rule:' . frename(__FILE__, '{name}{n}');
echo '
Serial number increment rule for n leading 0s:' . frename(__FILE__, '{name} {5n}');
echo '
Use delimiter _ and have a serial number increment rule with 3 leading 0s :' . frename(__FILE__, '{3n}<_>{name}');
echo '
Rules for using time and date element combinations:' . frename(__FILE__, '{y} _{m}_{d}_{h}_{i}_{s}');
echo '
Rules for using abbreviated time and date element combinations:' . frename(__FILE__ , '{Y}_{M}_{D}_{H}_{i}_{s}');
echo '
Other custom combinations:' . frename(__FILE__, '{timestamp}_{name}<_>{n}');
----------------------- */
if (!$force && !file_exists($file)) return $file;
$filename = basename($file);
$path = str_replace($filename, '', $file);
$ suffix = substr($filename, strrpos($filename, '.'));
$name = str_replace($suffix, '', $filename);
$timestamp = time();
list ($y, $Y, $m, $M, $d, $D, $h, $H, $i, $s) = explode(',', date('Y,y,m,n,d ,j,h,G,i,s'));
$tempname = str_replace(
array('{name}', '{timestamp}', '{y}', '{Y}' , '{m}', '{M}', '{d}', '{D}', '{h}', '{H}', '{i}', '{s}'),
array($name, $timestamp, $y, $Y, $m, $M, $d, $D, $h, $H, $i, $s),
$rule
);
if (preg_match('/{(d?)n}/', $rule, $n)) {
preg_match('/<([^>]+)>/' , $tempname, $sep);
$file = $path . str_replace(array($n[0], $sep[0]), array('', ''), $tempname) . $suffix;
if (!file_exists($file)) return $file;
$tempname = str_replace($sep[0], $sep[1], $tempname);
$tname = $tempname;
$i = 1;
do {
$nn = sprintf("%0{$n[1]}s", $i);
$tempname = str_replace($n[0] , $nn, $tname);
$file = $path . $tempname . $suffix;
}
while (file_exists($file));
return $file;
} else {
$file = $path . $tempname . $suffix;
if (file_exists($file)) return false;
else return $path . $tempname . $suffix;
}
}
echo 'Default rule (timestamp):' . frename(__FILE__);
echo '
Serial number increasing rule:' . frename(__FILE__, '{name}{n} ');
echo '
Serial number increment rule for n leading 0s:' . frename(__FILE__, '{name}{5n}');
echo '
Use the delimiter _ and the sequence number incrementing rule with 3 leading 0s:' . frename(__FILE__, '{3n}<_>{name }');
echo '
Rules for using time and date element combinations:' . frename(__FILE__, '{y}_{m}_{d}_{h}_{i}_ {s}');
echo '
Rules for using abbreviated time and date element combinations:' . frename(__FILE__, '{Y}_{M}_{D}_{H} _{i}_{s}');
echo '
Other custom combinations:' . frename(__FILE__, '{timestamp}_{name}<_>{n}') ;
?>
http://www.bkjia.com/PHPjc/320483.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/320483.htmlTechArticleTo deal with this situation, some methods are to rename the new file with a timestamp, and some are to use an incrementing serial number Method, in order to solve the troublesome operation, I recently wrote a frename function...