Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 上载时重命名图像?_Php - Fatal编程技术网

Php 上载时重命名图像?

Php 上载时重命名图像?,php,Php,这是我从学校里挑选的一个例子。我只是想修改一下以适应我的要求 我需要的是,当上传图像时,图像将按顺序重命名,以避免重复。如果两个用户有两个不同的图像,但碰巧两个不同图像的名称相同,则使用此代码,一个用户将收到一条提示,说明“已存在”阻止上载 我试着换了 echo$\u文件[“文件”][“名称”]。“已经存在。” 与 move_上传的文件($_文件[“文件”][“tmp_名称”], “上载/”$_文件[“文件”][“tmp_名称”]); echo“存储在:”。“上传/”$_文件[“文件”][“tm

这是我从学校里挑选的一个例子。我只是想修改一下以适应我的要求

我需要的是,当上传图像时,图像将按顺序重命名,以避免重复。如果两个用户有两个不同的图像,但碰巧两个不同图像的名称相同,则使用此代码,一个用户将收到一条提示,说明“已存在”阻止上载

我试着换了

echo$\u文件[“文件”][“名称”]。“已经存在。”

move_上传的文件($_文件[“文件”][“tmp_名称”],
“上载/”$_文件[“文件”][“tmp_名称”]);
echo“存储在:”。“上传/”$_文件[“文件”][“tmp_名称”]

但似乎并没有给我一个解决办法

有人能给我建议一种方法,让我按照顺序重新命名上传的图像吗?谢谢

代码:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br>";
    echo "Type: " . $_FILES["file"]["type"] . "<br>";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

    if (file_exists("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>

只需更改此行: 移动上传的文件($上传文件[“文件”][“tmp\U名称”],“上传/”$您的文件\U名称) 对于图像名称,您可以使用文件的md5和时间戳来创建唯一的序列

只需更改此行: 移动上传的文件($上传文件[“文件”][“tmp\U名称”],“上传/”$您的文件\U名称) 对于图像名称,您可以使用文件的md5和时间戳来创建唯一的序列

移动上传的文件时,将文件名
$yourFileNAME
更改为用户名或用户id等唯一值,以便两个文件的名称不相同

move_uploaded_file( $_FILES['file']['tmp_name'], "upload/".$yourFileNAME."".$_FILES["file"]["type"] );
试试这个

移动上传的文件时,将文件名
$yourFileNAME
更改为用户名或用户id等唯一值,以便两个文件的名称不相同

move_uploaded_file( $_FILES['file']['tmp_name'], "upload/".$yourFileNAME."".$_FILES["file"]["type"] );
使用
uniqid()
PHP函数可能是最好的方法

请注意,如果在多台主机上同时生成标识符,则可能会在同一微秒内生成标识符

您还可以通过mysql表生成uniqueid

create table ids(id int auto_increment primary key);
当用户上传他们的图片时,像这样编写sql

insert into ids () values();
select last_insert_id();
希望这能对您有所帮助。

使用
uniqid()
PHP函数可能是您最好的方法

请注意,如果在多台主机上同时生成标识符,则可能会在同一微秒内生成标识符

您还可以通过mysql表生成uniqueid

create table ids(id int auto_increment primary key);
当用户上传他们的图片时,像这样编写sql

insert into ids () values();
select last_insert_id();

希望这会对您有所帮助。

您想为每个上传的文件生成一个唯一的ID吗?您正在做的事情非常可怕。您让用户指定磁盘上有哪些文件。这是一个巨大的安全风险。如果有人上传
somethinevil.php
?@Brad这不会让它上传
$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”)
“除非”你将
.php
文件命名为允许的扩展名之一。@Fred,如果你认为这能给你带来安全性,那你就疯了。你仍然可以上传你想要的任何东西。此脚本甚至不验证路径是否在
upload/
中!如果我在
。/../../../
等中添加了一些内容,该怎么办?@Fred,指出这样的脚本中的问题是至关重要的。人们总是来StackOverflow和复制/粘贴代码,却不知道这意味着什么。你想为每个上传的文件生成一个唯一的ID吗?你正在做的事情太可怕了。您让用户指定磁盘上有哪些文件。这是一个巨大的安全风险。如果有人上传
somethinevil.php
?@Brad这不会让它上传
$allowedExts=array(“gif”、“jpeg”、“jpg”、“png”)
“除非”你将
.php
文件命名为允许的扩展名之一。@Fred,如果你认为这能给你带来安全性,那你就疯了。你仍然可以上传你想要的任何东西。此脚本甚至不验证路径是否在
upload/
中!如果我在
。/../../../
等中添加了一些内容,该怎么办?@Fred,指出这样的脚本中的问题是至关重要的。人们总是来StackOverflow和复制/粘贴代码,却不知道这意味着什么。你建议我如何定义“$yourFileNAME”?如果用户有电子邮件id,例如sample123@gmail.como然后您可以获取sample123并另存为图像文件名,即$yourFileNAME=“sample123”你建议我如何定义“$yourFileNAME”?如果用户有电子邮件id,例如sample123@gmail.como然后您可以获取sample123并另存为图像文件名,即$yourFileNAME=“sample123”