我一直在尝试在上传时重命名我的图像,我发现的唯一一段代码是使用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知识非常有限,我到处寻找一个使用生成的随机数而不是哈希的例子,但都没有成功。我最初的想法是获取数据库图像id,并在上传时将其用作图像文件名,但在这个过程中我的大脑扭曲了。
无论如何,在这一点上,我会接受某种编号系统,它会在每次上传时增加一位数字,或者如果不可能的话,至少可以使用一个范围来增加一些随机数字,比如兰特(1000099999)。
任何帮助都将非常感谢
=================================================================================好的,谢谢你的帮助,埃里克,这就是我到目前为止所得到的,而且似乎效果更好。有什么办法可以让它连续吗?显然没有使用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);
根据这个问题的答案,我建议如下:
function make_filename_hash($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
$uniqueName = uniqid(basename($filename, $ext));
return $uniqueName . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);
这将使用原始文件名作为基础,然后在其上附加一个时间敏感的标识符。有关PHP的uniqid()函数的描述,请参阅此处。
我不是很肯定,但我相信WordPress在将任何内容保存到数据库之前都会应用消毒文件名过滤器。如果是这种情况,您将无法将新名称与数据库ID绑定。
编辑
返回不包含原始文件名的唯一标识符:
function make_filename_hash($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? '' : '.' . $info['extension'];
return uniqid() . $ext;
}