【发布时间】:2014-01-17 20:21:45
【问题描述】:
我一直在尝试在上传时重命名我的图片,我发现只有一段代码是使用 32char 散列的代码。
function make_filename_hash($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$name = basename($filename, $ext);
return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);
我的 php 知识非常有限,我到处寻找使用生成随机数而不是哈希的示例,但没有成功。我最初的想法是获取 db 图像 id 并将其用作上传时的图像文件名,但在此过程中我的大脑扭曲了。
无论如何,在这一点上,我会接受某种编号系统,每次上传时都会增加一位数,或者如果不可能,至少可以通过使用范围(如 rand(10000,99999))来增加一些随机数。
非常感谢任何帮助
================================================ =================================== 好的,感谢您的帮助 Eric,这是我到目前为止所得到的,并且似乎工作得更好。有什么办法可以让它连续吗?显然不使用 mt_rand :) 每次上传都会增加 1。也有可能两次生成相同的数字,因为这可能会在上传时产生问题。
function make_filename_hash($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
return mt_rand(10,10000) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);
================================================ =================================== 你能从functions.php中的自定义表中读取数据并写入它吗?我正在尝试从表中读取一个计数器,将图像设置为该计数器编号并更新数据库中的计数器。它似乎不起作用,计数器增加但表永远不会更新,并且无论数据库中的值是什么,计数器都不会使用该值,因此这意味着它也没有读取该值。我只想知道是否有另一种方法可以重命名文件,但使用我的自定义表中的值。 这是我到目前为止所得到的。我在想也许我使用了错误的钩子,但在这一点上我有点卡住了。谢谢各位。
function make_filename_counter($filename) {
$qry;
$fcnt = 0;
$sql = ("SELECT counter FROM bwbps_filenamecounter WHERE id = 1");
$cnt = mysql_query($sql);
foreach($cnt as $cnt) {
$fcnt = $cnt->counter;
}
$fcnt = $fcnt + 1;
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$sql = "UPDATE bwbps_filenamecounter SET counter = " . $fcnt . " WHERE id = 1";
$qry = mysql_query($sql);
$fcnt = 0;
return $fcnt . $ext;
}
add_filter('sanitize_file_name', 'make_filename_counter', 10);
【问题讨论】:
标签: php