【问题标题】:Upload, Rename, Replace, and Store file with PHP使用 PHP 上传、重命名、替换和存储文件
【发布时间】:2015-08-06 04:32:22
【问题描述】:

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

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

  2. 用于替换目录中任何现有同名文件的文件

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

  4. 根据上面提到的userID和Username在sql数据库中存储新的文件路径

我没有使用 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')") ;
    

所以,我找到了所有必要的基线代码来满足我想要的标准。我只是不知道将它们放在一起的正确 PHP 语法。

感谢您的帮助和建议!

【问题讨论】:

    标签: php mysql file-upload


    【解决方案1】:

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

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

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

    我真的建议使用诸如 codeigniter 或 laravel 之类的框架来代替经典的 php。为您提供了许多工具,将使您的生活更轻松。我建议从 codeigniter 开始,因为它更容易。

    【讨论】:

      【解决方案2】:

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

      $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);
      

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 1970-01-01
        • 2013-04-29
        • 2018-08-30
        • 2020-05-19
        • 2021-10-25
        • 2014-11-06
        • 1970-01-01
        • 2010-10-16
        相关资源
        最近更新 更多