【问题标题】:move_uploaded_file fails but error number (1) seems wrongmove_uploaded_file 失败但错误号 (1) 似乎错误
【发布时间】:2020-06-29 02:52:42
【问题描述】:

我在 Ubuntu 16.04.4 LTS (Xenial Xerus) 上使用 PHP 版本 7.0.32-0ubuntu0.16.04.1。我正在使用以下代码上传文件。

<form action="https://myWebSite.com/uploadLibraryFile.php" method="post" enctype="multipart/form-data">
        <label for="file" style="font-size:5mm; font-family:times-new-roman">Select library file:</label>
        <input type="file" name="file[]" id="file" accept=".cdf,.CDF"  /></br>
        <input type="submit" name="submit[]" value="submit" />
        <input type="hidden" id="LoggedIn" name="LoggedIn" value="<?php echo $_SESSION['LoggedIn'] ?>">
        <input type="hidden" id="UserName" name="UserName" value="<?php echo $_SESSION['UserName'] ?>">
</form>

uploadLibraryFile.php 格式如下。

<?php
    error_reporting(E_ALL);
    session_start();        // This MUST be used to allow session variables to perist on next page.
?>
<html>
<header>
</header>
<body>

<?php

$target_dir = "../librarydropbox/";

//    session_start(); 
    $_SESSION['LoggedIn']=$_POST["LoggedIn"];
    $_SESSION['UserName']=$_POST["UserName"];

    // Ensure user is logged in
    if (!isset($_SESSION['LoggedIn']) || !$_SESSION['LoggedIn']) {
            ?>
            <script type="text/javascript">
            alert("Session login not set")
            </script>
            <?php
            header("Location: otherPage.php");
    }

    // Process file
        $target_file = $target_dir . basename($_FILES["file"]["name"][0]);
            echo "_FILES: " . print_r($_FILES["file"]) . "<br>";
            echo "_FILES[tmp_name]: " . print_r($_FILES["file"]["tmp_name"]) . "<br>";
            echo "_FILES[name][0]: " . print_r($_FILES["file"]["name"][0]) . "<br>";
            echo "_FILES[name][0]: " . $_FILES["file"]["name"][0] . "<br>";
            $src =  $_FILES["file"]["name"][0];
            echo "Src: " . $src . "<br>";
            echo "Dst: " . $target_file . "<br>";
            echo 'upload_max_filesize = ' . ini_get('upload_max_filesize') . "<br>";
        if (move_uploaded_file( $src, $target_file))
            echo "The file ". basename( $_FILES["file"]["name"][0]). " has been uploaded.";
        else
            echo "Not uploaded because of error #" . print_r($_FILES["file"]["error"]);
    ?>


</body>
</html>

我得到的输出如下。

Array ( [name] => Array ( [0] => temp.cdf ) [type] => Array ( [0] => application/octet-stream ) [tmp_name] => Array ( [0] => /tmp/phpaBSrgR ) [error] => Array ( [0] => 0 ) [size] => Array ( [0] => 14 ) ) _FILES: 1
Array ( [0] => /tmp/phpaBSrgR ) _FILES[tmp_name]: 1
temp.cdf_FILES[name][0]: 1
_FILES[name][0]: temp.cdf
Src: temp.cdf
Dst: ../librarydropbox/temp.cdf
upload_max_filesize = 200M
Array ( [0] => 0 ) Not uploaded because of error #1

我的理解是错误1表示上传的文件超出了php.ini中的upload_max_filesize指令。但是,我检查了 php.ini,upload_max_filesize 是 200M。 temp.cdf的大小为1KB,是一个由以下文本组成的ASCII文件。

minimal text

【问题讨论】:

  • 您在此处的标题之前输出。
  • 我添加了一个标题,并相应地编辑了我的问题,但没有任何区别。谢谢,
  • 你能用ini_get检查upload_max_filesize,也许它的值是从200M改变的吗?
  • 嗨@Joni。我试过了(并相应地更新了问题)。 upload_max_filesize 仍然是 200M。谢谢,
  • 我不是这个意思。 “在标头之前输出”意味着在会话开始之前不应该有任何 HTML。启用错误报告,你就会明白我的意思了。

标签: php html session file-upload


【解决方案1】:

我发现了问题所在。我应该用过

$src =  $_FILES["file"]["tmp_name"][0];

而不是

$src =  $_FILES["file"]["name"][0];

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多