Как изменить имя изображения, которое загружается на мой сервер?

Когда кто-то загружает изображение на мой сервер, он загружается как имя, которое у них есть для изображения на своем компьютере. Я хочу, чтобы имя изображения стало коротким номером как имя вместо имени, потому что когда кто-то загружает изображение как одно и то же имя, он перезаписывает его.

Вот мой скрипт, где имена определены:

if(isset($_FILES['fileup']) && strlen($_FILES['fileup']['name']) > 1) { $uploadpath = $uploadpath . basename( $_FILES['fileup']['name']); $sepext = explode('.', strtolower($_FILES['fileup']['name'])); $type = end($sepext); list($width, $height) = getimagesize($_FILES['fileup']['tmp_name']); $err = ''; 

Solutions Collecting From Web of "Как изменить имя изображения, которое загружается на мой сервер?"

Это часть (рабочего) кода, который я написал несколько лет назад, что я до сих пор использую по сей день.

Возможно, вам, вероятно, придется изменить его, чтобы он соответствовал вашему сценарию, а также позиции в сценарии и пути.

Однако я заменил свое собственное оригинальное имя ( photo ) вашим именем fileup .

Кроме того, есть несколько других лакомств, которые вы, вероятно, можете использовать, где-то вниз по линии.

 $file_name = $HTTP_POST_FILES['fileup']['name'][0]; // should there be spaces in the uploaded file, replace them with an underscore $file_name = str_replace(" ","_",$file_name); $random_digit = substr(number_format(time() * rand(),0,'',''),0,10); $new_file_name=$random_digit._.$file_name; $path1= "./uploads/".$new_file_name; // you can also use (my original write): // copy($HTTP_POST_FILES['fileup']['tmp_name'][0], $path1); move_uploaded_file($HTTP_POST_FILES['fileup']['tmp_name'][0], $path1); $path_to_file_web = "http://www.example.com/uploads/$new_file_name"; 

Оригинальный сценарий, который я написал, использовался на более старом сервере со старой версией PHP.

Однако copy() будет работать.

Я делаю что-то вроде этого:

Я просто добавляю некоторую случайную строку в начале имени файла

 $new=generate_name(10); $name=$new.$name; 

Функция generate_name ();

 function generate_name($long){ $cadena="[^A-Z0-9]"; return substr(eregi_replace($cadena, "", md5(rand())) . eregi_replace($cadena, "", md5(rand())) . eregi_replace($cadena, "", md5(rand())), 0, $long); } 

и сгенерируйте это имя:

03f396a35902-06-2013.csv от 02-06-2013.csv.

Вам не только не нужно использовать имя, указанное при загрузке файла, вы не должны этого делать – как и любой пользовательский ввод, он не доверен и может использоваться как дыра безопасности.

Таким образом, все, что вам нужно сделать, это генерировать произвольное имя изображения и гарантировать, что оно уже не используется (например, путем проверки с помощью file_exists() и использования цикла do ... while while для генерации случайных имен до тех пор, пока это не вернется ложный). Затем используйте это как аргумент move_uploaded_file() , который является правильной функцией, используемой для помещения файла в конечное местоположение.

Если вы не слишком сильно относитесь к длине и формату, uniqid() – это хороший способ сгенерировать ваши имена файлов, поскольку он основан на текущем времени, поэтому вряд ли возникнет столкновение.