【问题标题】:'move_uploaded_file(): Unable to move' Multiple Files XAMPP'move_uploaded_file(): 无法移动'多个文件 XAMPP
【发布时间】:2018-11-08 16:46:07
【问题描述】:

我对 PHP 很陌生,我正在尝试制作一个表单以允许用户上传一个 html 文件、一个 php 文件并给它一个标题。

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

警告:move_uploaded_file():无法将 'C:\xampp\tmp\php2152.tmp' 移动到 C:\xampp\htdocs\newPage 中的 'C:\xampp\htdocs\var\uploads\pages\Instagram' .php 在第 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" />
    <br />
    <label for="pageHTMLUpload">HTML File: </label>
    <input type="file" name="pageHTMLUpload" id="pageHTMLUpload" />
    <br />
    <label for="pagePHPUpload">PHP File: </label>
    <input type="file" name="pagePHPUpload" id="pagePHPUpload" />
    <br />
    <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->执行(); } 别的{ 回声“错误-phpUpload”; } } 别的{ 回声“错误-htmlUpload”; } } 别的{ echo "错误页面名"; }

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

编辑: 所以我一直在添加一些回声来看看发生了什么;这似乎是基本名称的问题。

当回显结果时

$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 没有附加文件名?

【问题讨论】:

  • 我不完全确定文档根目录是什么,但是如果有帮助的话,我正在使用 xampp 的库存安装;还没上线呢。
  • 我已经尝试了该问题的修复:为 move_uploaded 文件添加@;并使用目录分隔符。但是我遇到了问题:注意:未定义的索引:第 10 行的 C:\xampp\htdocs\newPage.php 中的 p 错误 -htmlUpload;这也不对。
  • 你不应该把@放在任何地方,因为它会阻止错误的出现。你需要错误来告诉你哪里出了问题。
  • 知道这真的很酷,但无论哪种方式,该问题中描述的修复对我都不起作用。

标签: php file-upload multifile-uploader


【解决方案1】:
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";
    }

【讨论】:

  • 同样的错误;它会创建目录,但不会将文件移出临时文件夹。
  • 如下所述,我已经解决了这个问题,但不是权限。
【解决方案2】:

问题是一个非常简单的错误放置的括号。

包含错误的旧代码:

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

新代码没有错误:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多