php文件上传不要替换旧的[重复]
Posted
技术标签:
【中文标题】php文件上传不要替换旧的[重复]【英文标题】:php file upload do NOT replace old one [duplicate] 【发布时间】:2016-11-23 07:31:46 【问题描述】:我不擅长 php 编码,谁能帮我这个 php 上传代码。
我有用于将文件上传到服务器的 php 文件完美运行,但我的问题是它将替换旧文件。我不想替换旧的,例如如果文件存在上传文件重命名(文件到文件_1)。
<?php
$target_path1 = "uploads/";
/* Add the original filename to our target path. Result is "uploads/filename.extension" */
$target_path1 = $target_path1 . basename($_FILES['uploaded_file']['name']);
if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1))
echo "The first file " . basename($_FILES['uploaded_file']['name']) . " has been uploaded.";
else
echo "There was an error uploading the file, please try again!";
echo "filename: " . basename($_FILES['uploaded_file']['name']);
echo "target_path: " . $target_path1;
?>
我会感谢你的帮助...
【问题讨论】:
您应该绝对验证您的用户输入。这段代码看起来任何人都可以上传.php
-文件,通过浏览器访问它并运行任意命令并危及您的服务器来执行它。
在上传之前检查文件是否已经存在。将计数器值附加到新文件的文件名。
【参考方案1】:
你可以试试这个
if(!file_exists("folder/".$_FILES["file"]["name"]))
$file = "folder/".$_FILES["file"]["name"];
if(move_uploaded_file($tmp_name, $file));
"your message"
else
$file = "your folder/01_".$_FILES["file"]["name"];
if(move_uploaded_file($tmp_name, $file));
"your message"
你也可以使用 rand() 函数来重命名
【讨论】:
【参考方案2】:上传文件时用 if 或 while 检查条件。if (file_exists("YOUR-FOLDER/" . $_FILES["file"]["name"]))
//code to rename your file name. Use time() or rand() etc...
【讨论】:
感谢您的帮助,但不幸的是我无法使用我的代码进行配置 把你的完整代码贴在这里,我去看看。【参考方案3】:我认为有两种解决方案适合您 如果您只想要新文件名,您可以在文件名末尾添加时间
if( isset($_FILES['uploaded_file']['name']) && !empty($_FILES['uploaded_file']['name']) )
$tFile = $_FILES['uploaded_file'];
$fileName=time().$tFile['name'];
$mn_dir='your folder location'.$fileName ;
if( !@move_uploaded_file( $tFile['tmp_name'] , $mn_dir) )
return true
else
return false
但如果你想检查文件是否存在
if( file_exists("Your Folder/".$_FILES['uploaded_file']['name']) )
// you can add number to file , I think you should add tile because file_1 and file_2 , ... may be exist
$tFile = $_FILES['uploaded_file'];
$fileName=time().$tFile['name'];
$mn_dir='your folder location'.$fileName ;
if( !@move_uploaded_file( $tFile['tmp_name'] , $mn_dir) )
return true
else
return false
else
// upload the file
【讨论】:
感谢伙伴的帮助,但我无法成功。我必须将所有代码添加到 else 语句中吗?【参考方案4】:使用php函数isfile检查你的文件
if (!is_file('uploads/'.$_FILES['uploaded_file']['tmp_name']))
move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1);
或 你可以rename你的文件名使用uniqueid
【讨论】:
感谢您的重播,我已经测试过您的代码没有任何变化。 它将取代旧的【参考方案5】:做一个类似的函数
public function getUniqueName($path, $name)
$name = str_replace(" ", "_", mb_eregi_replace('\s+', ' ', $name));
$i = 0;
$uniqueName = $name;
while (file_exists("$path/$uniqueName"))
$i++;
$uniqueName = $name . $i;
return $uniqueName;
在上传文件之前,请通过该函数获取唯一名称。希望对您有所帮助。
【讨论】:
以上是关于php文件上传不要替换旧的[重复]的主要内容,如果未能解决你的问题,请参考以下文章