如果图像已经存在,请使用PHP重命名图像
我正在开发一个使用图像的系统,图像由一封MD5ED电子邮件命名。我想在新上传的图片之后添加一个-1-2等,如果一个带有MD5ED电子邮件名称的图片已经存在。这是我的密码:如果图像已经存在,请使用PHP重命名图像,php,image,Php,Image,我正在开发一个使用图像的系统,图像由一封MD5ED电子邮件命名。我想在新上传的图片之后添加一个-1-2等,如果一个带有MD5ED电子邮件名称的图片已经存在。这是我的密码: public function upload() { global $email; $fileName = $_FILES['userfile']['name']; $tmpName = $_FILES['userfile']['tmp_name']; $fileSize =
public function upload() {
global $email;
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];
$user = $_SESSION['user'];
$fp = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);
if(!get_magic_quotes_gpc()) {
$fileName = addslashes($fileName);
}
$new_file_name = md5($email);
$fileExists = file_exists("../lib/uploads/" . $new_file_name);
$query = mysql_query("SELECT * FROM avatars WHERE ( name='$fileName' ) OR ( name='$new_file_name' ) ");
$num_rows = mysql_num_rows($query);
if ( $fileExists ) {
$fileName = $new_file_name;
$first = 1;
$separator = '-';
while ( file_exists("../lib/uploads/" . $fileName) ) {
preg_match('/(.+)'.$separator.'([0-9]+)$/', $fileName, $match);
$new_file_name = isset($match[2]) ? $match[1].$separator.($match[2] + 1) :$fileName.$separator.$first;
$first++;
}
$fileName = $new_file_name;
} elseif ( empty( $fileName ) ) {
echo '<div class="error">Please Select a file first.</div>';
} else {
move_uploaded_file($_FILES["userfile"]["tmp_name"],
"lib/avatars/" . $fileName);
echo "<div class='success'>File $fileName Uploaded.</div>";
}
} // ends upload() function
public function upload(){
全球$电子邮件;
$fileName=$_文件['userfile']['name'];
$tmpName=$\u文件['userfile']['tmp\u名称'];
$fileSize=$_文件['userfile']['size'];
$fileType=$_文件['userfile']['type'];
$user=$\会话['user'];
$fp=fopen($tmpName,'r');
$content=fread($fp,filesize($tmpName));
$content=addslashes($content);
fclose($fp);
如果(!get_magic_quotes_gpc()){
$fileName=addslashes($fileName);
}
$new_file_name=md5($email);
$fileExists=file_exists(“../lib/uploads/”$new_file_name);
$query=mysql\u query(“从化身中选择*,其中(名称=“$fileName”)或(名称=“$new\u文件名”);
$num\u rows=mysql\u num\u rows($query);
如果($fileExists){
$fileName=$new\u file\u name;
$first=1;
$separator='-';
而(文件_存在(“../lib/uploads/”$fileName)){
preg_match(“/(.+)”.$separator.“([0-9]+)$/”,$fileName,$match);
$new_file_name=isset($match[2])?$match[1].$separator。($match[2]+1):$fileName.$separator.$first;
$first++;
}
$fileName=$new\u file\u name;
}elseif(空($fileName)){
echo“请先选择一个文件”;
}否则{
移动上传的文件($文件[“用户文件”][“tmp文件名”],
“lib/avatars/”$fileName);
echo“文件$fileName已上载。”;
}
}//结束upload()函数
但我不知道出了什么问题,它上传了带有原始名称的图像。即使以md5 ed电子邮件作为名称也不行。简言之 你把你的if陈述搞砸了 详细信息 这很简单。在上一个else(当文件不存在时执行的else)中,您有
move_uploaded_file($_FILES["userfile"]["tmp_name"],
"lib/avatars/" . $fileName);
但如果回溯,您将看到$fileName
设置为
$fileName = $_FILES['userfile']['name'];
而不是电子邮件中的md5。您必须删除最后的else
条件,并每次执行其代码。当然,只要$fileName
不是空的
那么您的代码应该是:
if ( $fileExists ) {
$fileName = $new_file_name;
$first = 1;
$separator = '-';
while ( file_exists("../lib/uploads/" . $new_file_name ) ) {
preg_match('/(.+)'.$separator.'([0-9]+)$/', $new_file_name, $match);
$new_file_name = isset($match[2]) ? $match[1].$separator.($match[2] + 1) :$new_file_name.$separator.$first;
$first++;
}
}
// <----
// Moved this one outside, since it always executes
// ---->
$fileName = $new_file_name;
// <----
// Separated this if, since it has nothing to do with the above
// ---->
if ( empty( $fileName ) ) {
echo '<div class="error">Please Select a file first.</div>';
} else {
move_uploaded_file($_FILES["userfile"]["tmp_name"],
"lib/avatars/" . $fileName);
echo "<div class='success'>File $fileName Uploaded.</div>";
}
} // ends upload() function
通过这种方式,您可以立即知道是否已经有使用此md5的文件,以及其中的数量。简而言之 你把你的if陈述搞砸了 详细信息 这很简单。在上一个else(当文件不存在时执行的else)中,您有
move_uploaded_file($_FILES["userfile"]["tmp_name"],
"lib/avatars/" . $fileName);
但如果回溯,您将看到$fileName
设置为
$fileName = $_FILES['userfile']['name'];
而不是电子邮件中的md5。您必须删除最后的else
条件,并每次执行其代码。当然,只要$fileName
不是空的
那么您的代码应该是:
if ( $fileExists ) {
$fileName = $new_file_name;
$first = 1;
$separator = '-';
while ( file_exists("../lib/uploads/" . $new_file_name ) ) {
preg_match('/(.+)'.$separator.'([0-9]+)$/', $new_file_name, $match);
$new_file_name = isset($match[2]) ? $match[1].$separator.($match[2] + 1) :$new_file_name.$separator.$first;
$first++;
}
}
// <----
// Moved this one outside, since it always executes
// ---->
$fileName = $new_file_name;
// <----
// Separated this if, since it has nothing to do with the above
// ---->
if ( empty( $fileName ) ) {
echo '<div class="error">Please Select a file first.</div>';
} else {
move_uploaded_file($_FILES["userfile"]["tmp_name"],
"lib/avatars/" . $fileName);
echo "<div class='success'>File $fileName Uploaded.</div>";
}
} // ends upload() function
通过这种方式,您可以立即知道是否已经有使用此md5的文件以及其中的数量。现在它将使用md5上载该文件,但如果它已经存在,则不会在末尾添加-1。更改while函数以使用
$new\u file\u name
,因为这是您正在更新的变量:while(file\u exists(../lib/uploads/)($new_文件名)){
和中的所有$fileName都是一样的,而则是这样。您正在更改$new\u file\u name
变量,但您不断引用原始的$fileName
,该变量仍然不变,并且包含实际的文件名,而不是md5。更新了我的答案。经过测试,有效。您只需要引用$new\u file>_name
在您的regexps.Yup中是可以使用的。但是由于某些原因,它没有输入文件名,现在它会使用md5上传文件,但是如果它已经存在,它不会在末尾添加-1,而是更改while函数以使用$new\u file\u name
,因为这是您正在更新的变量:while(file\u exists(../lib/uploads/)($new_文件名)){
和中的所有$fileName都是一样的,而则是这样。您正在更改$new\u file\u name
变量,但您不断引用原始的$fileName
,该变量仍然不变,并且包含实际的文件名,而不是md5。更新了我的答案。经过测试,有效。您只需要引用$new\u file>_name
在您的regexps.Yup中,这是可行的。但由于某些原因,它没有进入文件exists循环