首页 文章

'move_uploaded_file(): Unable to move'多个文件XAMPP

提问于
浏览
-1

我是PHP的新手,我正在尝试制作一个表单,允许用户上传一个html文件,一个php文件并给它一个 Headers .

它应该使用 Headers 创建一个新文件夹来移动这两个文件 . 目前它创建的目录没有问题,但它无法从tmp目录移动上传的文件 . 并给我以下错误:

警告:move_uploaded_file():无法在C:\ xampp \ htdocs \ newPage.php中将'C:\ xampp \ tmp \ php2152.tmp'移动到'C:\ xampp \ htdocs \ var \ uploads \ pages \ Instagram'第15行错误-htmlUpload

继承我的HTML表单:

<form action="newPage.php" method="post" enctype='multipart/form-data'>
    <label for="pageName">Enter Page Name: </label>
    <input type="text" name="pageName" id="pageName" />
    
<label for="pageHTMLUpload">HTML File: </label> <input type="file" name="pageHTMLUpload" id="pageHTMLUpload" />
<label for="pagePHPUpload">PHP File: </label> <input type="file" name="pagePHPUpload" id="pagePHPUpload" />
<center> <button class="btn btn-dark" type="submit">Submit</button> </center>

和继承人相应的PHP:

$dir = getcwd() . '/var/uploads/pages/';
    $pageName = $dir . $_POST['pageName'];
    if(mkdir($pageName, 0777, true)){
      $filepathHTML = $pageName . basename($_FILES['pageHTMLUpload'['name']]);
      $filepathPHP = $pageName . basename($_FILES['pagePHPUpload']['name']);
      if(move_uploaded_file($_FILES['pageHTMLUpload']['tmp_name'], "$filepathHTML")){
        if(move_uploaded_file($_FILES['pageHTMLUpload']['tmp_name'], "$filepathHTML")){
          $stmt = $conn->prepare("INSERT INTO pages (title, htmlDir, phpDir) VALUES (?,?,?)");
          $stmt->bind_param('sss', $pageName, $filepathHTML, $filepathPHP);
          $stmt->execute();
        }
        else{
          echo "Error -phpUpload";
        }
      }
      else{
        echo "Error -htmlUpload";
      }
    }
    else{
      echo "Error -pagename";
    }

我已经读过这个问题可能是由不正确的权限引起的,但是我可以成功地将文件从另一个脚本上传到var / uploads目录中的另一个文件夹 . 这是与同时发布两个文件有关吗?

编辑:所以我一直在添加一些回声来看看发生了什么;它似乎与basename有关 .

当回应结果时

$filepathHTML = $pageName . basename($_FILES['pageHTMLUpload'['name']]);
$filepathPHP = $pageName . basename($_FILES['pagePHPUpload']['name']);

我明白了:

HTML:C:\ xampp \ htdocs / var / uploads / pages / Instagram / PHP:C:\ xampp \ htdocs / var / uploads / pages / Instagram / Gallery.php

从它的外观来看,它试图将一个tmp文件移动到Instagram目录中的页面,这不起作用,但PHP包含文件的基本名称,我假设这是HTML应该做的 .

我的两个文件路径变量都是在同一个进程中定义的,为什么HTML没有附加文件名呢?

2 回答

  • 0

    问题是一个非常简单的错位括号 .

    旧代码包括错误:

    $filepathHTML = $pageName . basename($_FILES['pageHTMLUpload'['name']]);
     $filepathPHP = $pageName . basename($_FILES['pagePHPUpload']['name']);
    

    新代码没有错误:

    $filepathHTML = $pageName . basename($_FILES['pageHTMLUpload']['name']);
    $filepathPHP = $pageName . basename($_FILES['pagePHPUpload']['name']);
    
  • 0
    should be used this code.
    
    
        $dir = getcwd() . '/var/uploads/pages/';
        $pageName = $dir . $_POST['pageName'];
    
        if(mkdir($pageName, 0777, true)){
    
          $filepathHTML = $pageName.basename($_FILES['pageHTMLUpload'['name']]);
          $filepathPHP = $pageName.basename($_FILES['pagePHPUpload']['name']);
    
          if(move_uploaded_file($_FILES['pageHTMLUpload']['tmp_name'], $filepathHTML))
          {
            if(move_uploaded_file($_FILES['pagePHPUpload']['tmp_name'], $filepathPHP ))
            {
              $stmt = $conn->prepare("INSERT INTO pages (title, htmlDir, phpDir) VALUES (?,?,?)");
              $stmt->bind_param($pageName, $filepathHTML, $filepathPHP);
              $stmt->execute();
            }
            else{
              echo "Error -phpUpload";
            }
          }
          else{
            echo "Error -htmlUpload";
          }
        }
        else{
          echo "Error -pagename";
        }
    

相关问题