使用PHP上传,重命名,替换和存储文件

时间:2015-08-06 04:32:22

标签: php mysql file-upload

我正在尝试允许用户将图片作为个人资料图片上传到我的网站。我目前有一个与我的PHP代码链接的html表单。我想发生以下情况:

  1. 要更改为UserID.Username.ext的文件名,其中userID和用户名是包含html表单的页面上的Razor var

  2. 文件替换目录中具有相同名称的任何现有文件

  3. 文件限制为.jpg,.jpeg,.png,.gif,大小为300000

  4. 基于上述用户ID和用户名存储在sql数据库中的新文件路径

  5. 我没有使用PHP的经验,并尝试过研究这些领域。我找到了很好的资源,但是我不知道如何格式化和调整PHP以便在所有条件下正常工作。

    我的基本上传PHP文件如下:

    $fn = (isset($_SERVER['HTTP_X_FILENAME']) ? $_SERVER['HTTP_X_FILENAME'] :    false);
    if ($fn) {
    // AJAX call
    file_put_contents(
        'uploads/' . $fn,
        file_get_contents('php://input')
    );
    echo "$fn uploaded";
    exit();
    }
    else {
    
    // form submit
    $files = $_FILES['fileselect'];
    
    foreach ($files['error'] as $id => $err) {
        if ($err == UPLOAD_ERR_OK) {
            $fn = $files['name'][$id];
            move_uploaded_file(
                $files['tmp_name'][$id],
                'uploads/' . $fn
            );
            echo "<p>File $fn uploaded.</p>";}}}
    

    我在上面的各个区域找到了以下代码:

    1和3:Rename uploaded files

    $filename = $_FILES["file"]["name"];
        $file_basename = substr($filename, 0, strripos($filename, '.')); // get file extention
        $file_ext = substr($filename, strripos($filename, '.')); // get file name
        $filesize = $_FILES["file"]["size"];
        $allowed_file_types = array('.jpg','.jpeg','.png','.gif');  
    
        if (in_array($file_ext,$allowed_file_types) && ($filesize < 200000))
        {   
            // Rename file
            $newfilename = "$imagecounter-".$file_basename . $file_ext;
            if (file_exists("uploads/".$date."-".$email."-vid-".$videoID."/" . $newfilename))
    
    1. PHP File upload and overwrite file with same name

      if(file_exists("documenti/$fileName")) 
      unlink("documenti/$fileName");
      
    2. How to store file name in database, with other info while uploading image to server using PHP?

      // Connects to your Database
      mysql_connect("yourhost", "username", "password") or die(mysql_error()) ;
      mysql_select_db("dbName") or die(mysql_error()) ;
      
      //Writes the information to the database
      mysql_query("INSERT INTO tableName
      (nameMember,bandMember,photo,aboutMember,otherBands)
      VALUES ('$name', '$bandMember', '$pic', '$about', '$bands')") ;
      
    3. 所以,我找到了所有必要的基线代码,以满足我的期望标准。我只是不知道用于将所有内容放在一起的正确PHP语法。

      感谢您的帮助和建议!

2 个答案:

答案 0 :(得分:0)

上传文件时,您可以在此处更改名称,例如代码

move_uploaded_file(
            $files['tmp_name'][$id],
            'uploads/' . $fn
);

格式为move_uploaded_files($ oldname,$ newname),因此您可以为其命名并附加文件扩展名。

我真的建议使用codeigniter或laravel等框架而不是经典的php。为您提供了许多工具,让您的生活更轻松。我建议从codeigniter开始,因为它更容易。

答案 1 :(得分:0)

上传文件时,您可以轻松更改文件名称。

$filename = $_FILES['file']['name'];
$file_ext = substr($filename, strripos($filename, '.'));

$new_filename = UserId.Username.$file_ext;

$tempFile = $_FILES['file']['tmp_name'];

$targetFile = yourpath.$new_filename;

move_uploaded_file($tempFile, $targetFile);