如何使用数据库中的ID名称保存上载文件以具有唯一名称 [英] How to Save upload file with the name of the ID in the database to have unique name

查看:71
本文介绍了如何使用数据库中的ID名称保存上载文件以具有唯一名称的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是一个使用PHP的mysql的新手,想要一些帮助。

我有一个文件上传脚本,可以将文件上传到特定目录,但我想将我的文件名存储为自数据库中的auto_increment以来的ID字段



我目前的代码如下





Hi I'm a rookie at mysql with PHP and would like some help.
I have a file upload script that upload files to a specific directory, but I want to store my file name as the ID field since its auto_increment in the database

My current code is as follow


<?php
    
    ####################################################################
    # File Upload Form 1.1
    ####################################################################
    # 
    ####################################################################
    
    ####################################################################
    #  SETTINGS START
    ####################################################################
    
    // Folder to upload files to. Must end with slash /
    define('DESTINATION_FOLDER','/www/zubrag/tmp/');
    
    // Maximum allowed file size, Kb
    // Set to zero to allow any size
    define('MAX_FILE_SIZE', 0);
    
    // Upload success URL. User will be redirected to this page after upload.
    define('SUCCESS_URL','http://www.example.com/upload-success.html');
    
    // Allowed file extensions. Will only allow these extensions if not empty.
    // Example: $exts = array('avi','mov','doc');
    $exts = array();
    
    // rename file after upload? false - leave original, true - rename to some unique filename
    define('RENAME_FILE', true);
    
    // put a string to append to the uploaded file name (after extension);
    // this will reduce the risk of being hacked by uploading potentially unsafe files;
    // sample strings: aaa, my, etc.
    define('APPEND_STRING', '');
    
    // Need uploads log? Logs would be saved in the MySql database.
    define('DO_LOG', true);
    
    // MySql data (in case you want to save uploads log)
    define('DB_HOST','localhost'); // host, usually localhost
    define('DB_DATABASE','mydb'); // database name
    define('DB_USERNAME','myusername'); // username
    define('DB_PASSWORD','password-here'); // password
    
    /* NOTE: when using log, you have to create mysql table first for this script.
    Copy paste following into your mysql admin tool (like PhpMyAdmin) to create table
    If you are on cPanel, then prefix _uploads_log on line 205 with your username, so it would be like myusername_uploads_log
    
    CREATE TABLE _uploads_log (
      log_id int(11) unsigned NOT NULL auto_increment,
      log_filename varchar(128) default '',
      log_size int(10) default 0,
      log_ip varchar(24) default '',
      log_date timestamp,
      PRIMARY KEY  (log_id),
      KEY (log_filename)
    );
    
    */
    
    ####################################################################
    ###  END OF SETTINGS.   DO NOT CHANGE BELOW
    ####################################################################
    
    // Allow script to work long enough to upload big files (in seconds, 2 days by default)
    @set_time_limit(172800);
    
    // following may need to be uncommented in case of problems
    // ini_set("session.gc_maxlifetime","10800");
    
    function showUploadForm($message='') {
      $max_file_size_tag = '';
      if (MAX_FILE_SIZE > 0) {
        // convert to bytes
        $max_file_size_tag = "<input name='MAX_FILE_SIZE' value='".(MAX_FILE_SIZE*1024)."' type='hidden' >\n";
      }
    
      // Load form template
      include ('file-upload.html');
    }
    
    // errors list
    $errors = array();
    
    $message = '';
    
    // we should not exceed php.ini max file size
    $ini_maxsize = ini_get('upload_max_filesize');
    if (!is_numeric($ini_maxsize)) {
      if (strpos($ini_maxsize, 'M') !== false)
        $ini_maxsize = intval($ini_maxsize)*1024*1024;
      elseif (strpos($ini_maxsize, 'K') !== false)
        $ini_maxsize = intval($ini_maxsize)*1024;
      elseif (strpos($ini_maxsize, 'G') !== false)
        $ini_maxsize = intval($ini_maxsize)*1024*1024*1024;
    }
    if ($ini_maxsize < MAX_FILE_SIZE*1024) {
      $errors[] = "Alert! Maximum upload file size in php.ini (upload_max_filesize) is less than script's MAX_FILE_SIZE";
    }
    
    // show upload form
    if (!isset($_POST['submit'])) {
      showUploadForm(join('',$errors));
    }
    
    // process file upload
    else {
      
      while(true) {
    
        // make sure destination folder exists
        if (!@file_exists(DESTINATION_FOLDER)) {
          $errors[] = "Destination folder does not exist or no permissions to see it.";
          break;
        }
    
        // check for upload errors
        $error_code = $_FILES['filename']['error'];
        if ($error_code != UPLOAD_ERR_OK) {
          switch($error_code) {
            case UPLOAD_ERR_INI_SIZE: 
              // uploaded file exceeds the upload_max_filesize directive in php.ini
              $errors[] = "File is too big (1).";
              break;
            case UPLOAD_ERR_FORM_SIZE: 
              // uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form
              $errors[] = "File is too big (2).";
              break;
            case UPLOAD_ERR_PARTIAL:
              // uploaded file was only partially uploaded.
              $errors[] = "Could not upload file (1).";
              break;
            case UPLOAD_ERR_NO_FILE:
              // No file was uploaded
              $errors[] = "Could not upload file (2).";
              break;
            case UPLOAD_ERR_NO_TMP_DIR:
              // Missing a temporary folder
              $errors[] = "Could not upload file (3).";
              break;
            case UPLOAD_ERR_CANT_WRITE:
              // Failed to write file to disk
              $errors[] = "Could not upload file (4).";
              break;
            case 8:
              // File upload stopped by extension
              $errors[] = "Could not upload file (5).";
              break;
          } // switch
    
          // leave the while loop
          break;
        }
    
        // get file name (not including path)
        $filename = @basename($_FILES['filename']['name']);
    
        // filename of temp uploaded file
        $tmp_filename = $_FILES['filename']['tmp_name'];
    
        $file_ext = @strtolower(@strrchr($filename,"."));
        if (@strpos($file_ext,'.') === false) { // no dot? strange
          $errors[] = "Suspicious file name or could not determine file extension.";
          break;
        }
        $file_ext = @substr($file_ext, 1); // remove dot
    
        // check file type if needed
        if (count($exts)) {   /// some day maybe check also $_FILES['user_file']['type']
          if (!@in_array($file_ext, $exts)) {
            $errors[] = "Files of this type are not allowed for upload.";
            break;
          }
        }
    
        // destination filename, rename if set to
        $dest_filename = $filename;
        if (RENAME_FILE) {
          $dest_filename = md5(uniqid(rand(), true)) . '.' . $file_ext;
        }
        // append predefined string for safety
        $dest_filename = $dest_filename . APPEND_STRING;
    
        // get size
        $filesize = intval($_FILES["filename"]["size"]); // filesize($tmp_filename);
    
        // make sure file size is ok
        if (MAX_FILE_SIZE > 0 && MAX_FILE_SIZE*1024 < $filesize) {
          $errors[] = "File is too big (3).";
          break;
        }
    
        if (!@move_uploaded_file($tmp_filename , DESTINATION_FOLDER . $dest_filename)) {
          $errors[] = "Could not upload file (6).";
          break;
        }
    
        if (DO_LOG) {
          // Establish DB connection
          $link = @mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
          if (!$link) {
            $errors[] = "Could not connect to mysql.";
            break;
          }
          $res = @mysql_select_db(DB_DATABASE, $link);
          if (!$res) {
            $errors[] = "Could not select database.";
            break;
          }
          $m_ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
          $m_size = $filesize;
          $m_fname = mysql_real_escape_string($dest_filename);
          $sql = "insert into _uploads_log (log_filename,log_size,log_ip) values ('$m_fname','$m_size','$m_ip')";
          $res = @mysql_query($sql);
          if (!$res) {
            $errors[] = "Could not run query.";
            break;
          }
          @mysql_free_result($res);
          @mysql_close($link);
        } // if (DO_LOG)
    
    
        // redirect to upload success url
        header('Location: ' . SUCCESS_URL);
        die();
    
        break;
    
      } // while(true)
    
      // Errors. Show upload form.
      $message = join('',$errors);
      showUploadForm($message);
    
    }
    
    ?>



I知道我应该更改线路




I know I should change the lines

// destination filename, rename if set to
        $dest_filename = $filename;
        if (RENAME_FILE) {
          $dest_filename = md5(uniqid(rand(), true)) . '.' . $file_ext;







< br $> b $ b





and



if (!@move_uploaded_file($tmp_filename , DESTINATION_FOLDER . $dest_filename)) {
          $errors[] = "Could not upload file (6).";
          break;





我不知道如何实施更改从数据库中选择并将其实现到此处



Im not sure how to implement the changes to select from database and to implement it into here

推荐答案

exts = array('avi','mov','doc');
exts = array('avi','mov','doc');


exts = array();

// 上传后重命名文件? false - 保留原始,true - 重命名为某个唯一文件名
define(' RENAME_FILE',true);

// 将字符串附加到上传的文件名(扩展名后);
// 这可以降低因上传可能不安全的文件而被黑客入侵的风险;
// 示例字符串:aaa,my等等
define( ' APPEND_STRING'' ');

// 需要上传日志吗?日志将保存在MySql数据库中。
define(' DO_LOG' ,true);

// MySql数据(如果你想保存上传日志)
define(' DB_HOST'' localhost'); // host,通常是localhost
define( ' DB_DATABASE'' mydb'< /跨度>); // 数据库名称
define(' DB_USERNAME'' myusername'); // 用户名
define(' DB_PASSWORD'' password-here'); // 密码

/ * 注意:使用日志时,必须先为此脚本创建mysql表。
将粘贴复制到你的mysql管理工具(如PhpMyAdmin)中以创建表
如果你在cPanel上,那么在第205行用你的用户名加上_uploads_log前缀,所以它就像myusername_uploads_log

CREATE TABLE _uploads_log(
log_id int(11)unsigned NOT NULL auto_increment,
log_filename varchar(128)default'',
log_size int(10)default 0,
log_ip varchar(24)default'',
log_date timestamp,
PRIMARY KEY(log_id),
KEY(log_filename)
);

* /


############################ ######################################## $
###结束设定。请勿改变以下
#################################################### ##########################

// 允许脚本长时间工作以上传大文件(默认为2天,以秒为单位)
@set_time_limit(172800);

// 以下内容可能需要在发生问题时取消注释
// ini_set(session.gc_maxlifetime,10800);

函数showUploadForm(
exts = array(); // rename file after upload? false - leave original, true - rename to some unique filename define('RENAME_FILE', true); // put a string to append to the uploaded file name (after extension); // this will reduce the risk of being hacked by uploading potentially unsafe files; // sample strings: aaa, my, etc. define('APPEND_STRING', ''); // Need uploads log? Logs would be saved in the MySql database. define('DO_LOG', true); // MySql data (in case you want to save uploads log) define('DB_HOST','localhost'); // host, usually localhost define('DB_DATABASE','mydb'); // database name define('DB_USERNAME','myusername'); // username define('DB_PASSWORD','password-here'); // password /* NOTE: when using log, you have to create mysql table first for this script. Copy paste following into your mysql admin tool (like PhpMyAdmin) to create table If you are on cPanel, then prefix _uploads_log on line 205 with your username, so it would be like myusername_uploads_log CREATE TABLE _uploads_log ( log_id int(11) unsigned NOT NULL auto_increment, log_filename varchar(128) default '', log_size int(10) default 0, log_ip varchar(24) default '', log_date timestamp, PRIMARY KEY (log_id), KEY (log_filename) ); */ #################################################################### ### END OF SETTINGS. DO NOT CHANGE BELOW #################################################################### // Allow script to work long enough to upload big files (in seconds, 2 days by default) @set_time_limit(172800); // following may need to be uncommented in case of problems // ini_set("session.gc_maxlifetime","10800"); function showUploadForm(


message = ' ') {
message='') {


这篇关于如何使用数据库中的ID名称保存上载文件以具有唯一名称的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆