Переименование изображения во время загрузки PHP Mysql
Используя следующий код, может ли кто-нибудь объяснить мне, как я могу переименовать файлы изображений в разное имя в процессе загрузки?
Вот с чем я работаю.
Uploader.php
<?php
include($_SERVER['DOCUMENT_ROOT'] . "/connections/dbconnect.php");
$dataType = mysql_real_escape_string($_POST["dataType"]);
$title = mysql_real_escape_string($_POST["title"]);
$fileName = basename($_FILES["image"]["name"]);
$target_path = ($_SERVER['DOCUMENT_ROOT'] . "/images/gallery/".$fileName);
if (file_exists($target_path))
{
echo "An image with that file name already exists.";
}
elseif (move_uploaded_file($_FILES["image"]["tmp_name"], $target_path))
{
// The file is in the images/gallery folder. Insert record into database by
// executing the following query:
$sql="INSERT INTO images (data_type, title, file_name)"."VALUES('$dataType','$title','$fileName')";
$retval = mysql_query($sql);
echo "The image was successfully uploaded and added to the gallery :) <a href='index.php'>Add another image</a>";
}
else
{
echo "There was an error uploading the file, please try again!";
}
?>
Тогда вот мой код для загрузки изображения в галерею.
<form enctype="multipart/form-data" action="uploader.php" method="POST">
Category: <select class="text" name="dataType">
<option value="treeremoval" selected="selected">treeremoval</option>
<option value="treetrimming" >treetrimming</option>
<option value="treebracing" >treebracing</option>
<option value="stumpgrinding" >stumpgrinding</option>
<option value="firewood" >firewood</option>
<option value="cleanup" >cleanup</option>
</select><br />
<br />
Caption: <input type="text" name="title"><br />
<br />
Image to upload: <input type="file" name="image"><br />
<br />
<input type="submit" value="Upload">
</form>
Я очень новичок в использовании php и mysql, поэтому буду признателен за любую помощь. У меня тоже есть еще несколько вопросов, но, думаю, я должен задавать их по одному за раз. =)
Спасибо Ты!
4 answers
Я бы попробовал что-то вроде этого, вы создадите уникальный идентификатор и добавите к нему расширение файла, если это имя существует, вы повторяете цикл, пока у вас не появится имя, которого нет, затем вы перемещаете файл.
<?php
include($_SERVER['DOCUMENT_ROOT'] . "/connections/dbconnect.php");
$dataType = mysql_real_escape_string($_POST["dataType"]);
$title = mysql_real_escape_string($_POST["title"]);
$fileData = pathinfo(basename($_FILES["image"]["name"]));
$fileName = uniqid() . '.' . $fileData['extension'];
$target_path = ($_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName);
while(file_exists($target_path))
{
$fileName = uniqid() . '.' . $fileData['extension'];
$target_path = ($_SERVER['DOCUMENT_ROOT'] . "/images/gallery/" . $fileName);
}
if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_path))
{
// The file is in the images/gallery folder. Insert record into database by
// executing the following query:
$sql="INSERT INTO images (data_type, title, file_name)"."VALUES('$dataType','$title','$fileName')";
$retval = mysql_query($sql);
echo "The image was successfully uploaded and added to the gallery :) <a href='index.php'>Add another image</a>";
}
else
{
echo "There was an error uploading the file, please try again!";
}
?>
Вы делаете move_uploaded_file($_FILES["image"]["tmp_name"], $target_path)
Вы $target_path
из переменной $fileName
Измените имя файла с
$fileName = basename($_FILES["image"]["name"]);
До
'myfilename'
Пожалуйста, попробуйте этот код:
$sql =mysql_query("select * from table ");
$result = mysql_num_rows($sql) +1;
$newfilename = rename("$oldfilename", "$newfilename");
Я бы предложил загрузить безопасный формат изображения и ограничить размер файла
//image upload
$pro_image = $_FILES['image']['name'];
$pro_image_tmp = $_FILES['image']['tmp_name'];
$fileType = $_FILES["image"]["type"];
$fileSize = $_FILES["image"]["size"];
$fileErrorMsg = $_FILES["image"]["error"];
$fileName = preg_replace('#[^a-z.0-9]#i', '', $pro_image);
$nwtourimg = explode(".", $fileName);
if (!$pro_image_tmp) { // if file not chosen
echo "ERROR: Please browse for a file before clicking the upload button.";
exit();
} else if($fileSize > 5242880) { // if file size is larger than 5 Megabytes
echo "ERROR: Your file was larger than 5 Megabytes in size.";
unlink($pro_image_tmp); // Remove the uploaded file from the PHP temp folder
exit();
} else if (!preg_match("/.(gif|jpg|png|jpeg)$/i", $fileName) ) {
// This condition is only if you wish to allow uploading of specific file types
echo "ERROR: Your image was not .gif, .jpg, or .png.";
unlink($pro_image_tmp); // Remove the uploaded file from the PHP temp folder
exit();
} else if ($fileErrorMsg == 1) { // if file upload error key is equal to 1
echo "ERROR: An error occured while processing the file. Try again.";
exit();
}
$fileExt = end($nwtourimg);
$fileName = time().rand().".".$fileExt;
move_uploaded_file("$pro_image_tmp","upload/$fileName");
//image upload end