gpt4 book ai didi

php - 如何在上传到服务器之前重命名每个文件到时间戳

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:38:33 26 4
gpt4 key购买 nike

我正在使用以下代码上传一些文件,但是由于名称相似,有些文件被替换了。我只是想知道如何更改名称,我试过了,但我发现自己弄乱了整个代码。

PHP

if (!empty($_FILES["ambum_art"])) {
$myFile = $_FILES["ambum_art"];
if ($myFile["error"] !== UPLOAD_ERR_OK) {
echo "<p>An error occurred.</p>";
exit;
}
$name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);
$i = 0;
$parts = pathinfo($name);
while (file_exists(UPLOAD_DIR . $name)) {
$i++;
$name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
}
$success = move_uploaded_file($myFile["tmp_name"],UPLOAD_DIR . '/'.$name);
if (!$success) {
echo "<p>Unable to save file.</p>";
exit;
} else {
$Dir = UPLOAD_DIR .'/'. $_FILES["ambum_art"]["name"];
}
chmod(UPLOAD_DIR .'/'. $name, 0644);
unset($_SESSION['video']);
$_SESSION['album_art'] = $Dir;
$ambum_art_result = array();
$ambum_art_result['content'] = $Dir;
echo json_encode($ambum_art_result);

}

我希望每个文件都包含从时间生成的这个变量中的一些内容。

$rand_name = microtime().microtime().time().microtime();

谢谢。

我不想首先检查文件是否存在,因为这会添加到进程中,我只想使用 time() 和一些随机字符串。只是为了获得一个唯一的名字。

最佳答案

请参阅this website文件上传和解释的一个体面的例子。还有 this site似乎是您从哪里找到这个特定脚本的地方,或者如果没有提供很好的解释。

我修改了您的代码以包含一些注释,以便您和其他人可以更好地理解发生了什么。从理论上讲,代码不应像您所说的那样覆盖现有文件,但我添加了您需要更改的内容以将文件名设置为随机字符串。

此外,您将原始文件名而不是修改后的文件名存储到 session 中。

define("UPLOAD_DIR", "/path/to/uploads/");

if (!empty($_FILES["ambum_art"]))
{
// The file uploaded
$myFile = $_FILES["ambum_art"];

// Check there was no errors
if ($myFile["error"] !== UPLOAD_ERR_OK) {
echo "<p>An error occurred.</p>";
exit;
}

// Rename the file so it only contains A-Z, 0-9 . _ -
$name = preg_replace("/[^A-Z0-9._-]/i", "_", $myFile["name"]);

// Split the name into useful parts
$parts = pathinfo($name);

// This part of the code should continue to loop until a filename has been found that does not already exist.
$i = 0;
while (file_exists(UPLOAD_DIR . $name)) {
$i++;
$name = $parts["filename"] . "-" . $i . "." . $parts["extension"];
}

// If you want to set a random unique name for the file then uncomment the following line and remove the above
// $name = uniqid() . $parts["extension"];

// Now its time to save the uploaded file in your upload directory with the new name
$success = move_uploaded_file($myFile["tmp_name"], UPLOAD_DIR . '/'.$name);

// If saving failed then quit execution
if (!$success) {
echo "<p>Unable to save file.</p>";
exit;
}

// Set file path to the $Dir variable
$Dir = UPLOAD_DIR .'/'. $name;

// Set the permissions on the newly uploaded file
chmod($Dir, 0644);

// Your application specific session stuff
unset($_SESSION['video']);
$_SESSION['album_art'] = $Dir; // Save the file path to the session
$ambum_art_result = array();
$ambum_art_result['content'] = $Dir;
echo json_encode($ambum_art_result);

}

阅读更多关于 PHP 的信息 uniqid .

我还强烈建议进行一些文件类型检查,因为目前看来好像任何文件都可以上传。上面的第二个链接有一个标题为“安全注意事项”的部分,我建议您仔细阅读 vary。

关于php - 如何在上传到服务器之前重命名每个文件到时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23303301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com