0

我正在尝试为论坛开发用户页面,但我在上传图片时遇到了一些困难。问题是我想限制用户只能上传一张图片,但可以随时更改。所以基本上,我想要么覆盖现有文件,要么删除旧图片并添加新图片。在这一点上,我有一段代码在文件末尾添加了一个时间戳(我实际上并不需要)。

代码:

if(isset($_POST['upload']))
{

$extension=strstr($_FILES['uploadedfile']['name'], ".");
    $filename = "_/userfiles/userpics/".basename($_FILES['uploadedfile']['name'], 
$extension);
    $target = "_/userfiles/userpics/".basename($_FILES['uploadedfile']['name']);

$valid = true;  
if(file_exists($target))
{

    $filename = $filename . time();
    $target = $filename . $extension;
}
if($valid)
{
    // move the file into the folder of our choise
    move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target);       
    $img_sql = "INSERT INTO sp_userimage (imageid, path, id) value ('', '".$target."', '".$_SESSION['userid']."')";
    $img_result = mysql_query($img_sql);
    echo "upload sucessfull";
}
4

6 回答 6

2

unlink()PHP Manual中使用。

if(file_exists($target))
{
    unlink($target); // deletes file
    //$filename = $filename . time();
    //$target = $filename . $extension;
}
于 2013-09-12T10:18:41.910 回答
0

Use unlink() function

在这里阅读更多PHP取消链接

好的,如果您只想删除该特定用户的文件。

然后将其存储filename vs user在数据库中的一些 MapTable 中。

mysql_query("CREATE TABLE t_usr_file_map( usr_id INT NOT NULL , file_name VARCHAR(100), )") or die(mysql_error());

并在重新上传时,从表中为该用户获取文件名,取消链接并重新上传新的。

或者,

或者您可以在上传时使用 PHP file_rename 函数。将文件名重命名为用户 ID

rename ( string $oldname , string $newname [, resource $context ] )

你总是可以unlink根据用户 ID做

于 2013-09-12T10:21:22.843 回答
0

标准化图像类型(例如仅 jpegs)然后将文件命名为用户 ID 可能更容易。例如:

$target = 'userpics' . DIRECTORY_SEPARATOR . $_SESSION['userid'];
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target);

这只会用新图片覆盖旧图片。鉴于这种类型的文件名是确定性的,您也不需要将文件名存储在数据库中。

于 2013-09-12T10:25:21.253 回答
0

我认为这可能更适合你。您可能需要稍微编辑一下。

if($valid)
{
    // Check if user has a file.

    $img_check = mysql_query("SELECT * FROM sp_userimage WHERE id = " . (int) $_SESION['user_id']);
    if( mysql_num_rows($img_check) > 0 ){
       $row = mysql_fetch_object($img_check);

       // Delete the file.
       unlink($row->path);
    }

// move the file into the folder of our choise
move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target);       
$img_sql = "INSERT INTO sp_userimage (imageid, path, id) value ('', '".$target."', '".$_SESSION['userid']."')";
$img_result = mysql_query($img_sql);
echo "upload sucessfull";

}

于 2013-09-12T10:27:39.010 回答
0

它非常简单unlink()

作为:

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);
于 2013-09-12T10:34:36.787 回答
0
if (file_exists($path))
{
  $filename= rand(1,99).$filename; 
  unlink($oldfile);
}
move_uploaded_file($_FILES['file']['tmp_name'],$filename);  
于 2013-09-12T10:38:05.770 回答