frename PHP 靈活檔案命名函數 frename

來源:互聯網
上載者:User

對付這種情況,有的做法是用時間戳記對新檔案進行重新命名,有的是用序號遞增的方法,為瞭解決麻煩的操作,我在最近編寫了一個frename函數,可以靈活依據自訂的規則取得上傳檔案的新命名,特此分享。 複製代碼 代碼如下:<?php
function frename($file, $rule='{timestamp}', $force = true) {
/* -----------------------
* author: m35
* date: 2009/8/11
* 依據命名規則取得檔案的新命名,以處理上傳檔案等操作時遇到的檔案名稱已存在的情況
* @parm1 $file -- 檔案實體路徑
* @parm2 $rule -- 命名規則, 預設為時間戳記
* @parm3 $force -- 是否強制命名,如果是強制,就算該目標檔案不存在也會對其進行命名,預設強制
* retrun str -- 依據$rule命名的新檔案路徑
* 樣本:
echo '預設規則(時間戳記):' . frename(__FILE__);
echo '<br />序號遞增規則:' . frename(__FILE__, '{name}{n}');
echo '<br />n個前置0的序號遞增規則:' . frename(__FILE__, '{name}{5n}');
echo '<br />用分隔字元<span style="color: #E00;">_</span>並帶有3個前置0的序號遞增規則:' . frename(__FILE__, '{3n}<_>{name}');
echo '<br />使用時間日期元素組合的規則:' . frename(__FILE__, '{y}_{m}_{d}_{h}_{i}_{s}');
echo '<br />使用簡寫形式的時間日期元素組合的規則:' . frename(__FILE__, '{Y}_{M}_{D}_{H}_{i}_{s}');
echo '<br />其他自訂群組合:' . 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 '預設規則(時間戳記):' . frename(__FILE__);
echo '<br />序號遞增規則:' . frename(__FILE__, '{name}{n}');
echo '<br />n個前置0的序號遞增規則:' . frename(__FILE__, '{name}{5n}');
echo '<br />用分隔字元<span style="color: #E00;">_</span>並帶有3個前置0的序號遞增規則:' . frename(__FILE__, '{3n}<_>{name}');
echo '<br />使用時間日期元素組合的規則:' . frename(__FILE__, '{y}_{m}_{d}_{h}_{i}_{s}');
echo '<br />使用簡寫形式的時間日期元素組合的規則:' . frename(__FILE__, '{Y}_{M}_{D}_{H}_{i}_{s}');
echo '<br />其他自訂群組合:' . frename(__FILE__, '{timestamp}_{name}<_>{n}');
?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.