【问题标题】:Why isn't my file load not working in PHP?为什么我的文件加载在 PHP 中不起作用?
【发布时间】:2016-10-08 03:57:19
【问题描述】:

我不明白为什么这段代码不起作用。 load_docs_2.php 的输出是: 数组 ( ) 文件类型不正确。这是在 XAMPP 上运行的。

HTML 是:

<form id="import_form" method="post" action="load_docs_2.php" enctype="multipart/form-data">
  <label for "importfile">Import PDF File</label><br>
  <input id="import_name" name="load" type="file" value="Upload File"><br><br>
  <input id="import" name="import" type="submit" value="Import">
</form>

load_docs_2.php 是:

<?php

// Capture file data

print_r($_FILES);

$loadname = $_FILES["load"]["name"];  // name contains original name
$loadname_temp = $_FILES["load"]["tmp_name"];  // tmp_name contains the temporary file name

// Check file meta data
$import_size = $_FILES["load"]["size"];
$import_type = $_FILES["load"]["type"];

// Setting target folder
$target_dir = "./Staff Docs";
$target_file = $target_dir . $loadname;  // Create target file path

// Move to import folder

$allowed =  array('pdf');
$ext = pathinfo($loadname, PATHINFO_EXTENSION);

if (!in_array($ext,$allowed))
{
    echo 'Incorrect file type';
}    
else
{
    move_uploaded_file($loadname_temp, $target_file);
}

?>

为什么文件加载不起作用?

【问题讨论】:

  • 你能否以最后一个问题结束,我不得不一直回溯到那里的标题,我真的不同意以标题开始一个问题,但不要在实际问题中重复它。 IMO 最好在代码之后进行最后的回顾。
  • $target_dir = "./Staff Docs/";目标文件夹是 Staff Docs 意味着您必须以正斜杠结尾
  • 显示有错误吗?
  • 目标文件夹和源代码文件夹都在同一个目录下?还是不同?
  • 修复标题。现在是is not not working

标签: php html xampp


【解决方案1】:

您的目标文件不正确。目标目录和文件之间没有目录分隔符,因此结果本质上是错误的。

 <?php

    // Capture file data

    print_r($_FILES);

    $loadname       = $_FILES["load"]["name"];  // name contains original name
    $loadname_temp  = $_FILES["load"]["tmp_name"];  // tmp_name contains the temporary file name

    // Check file meta data
    $import_size    = $_FILES["load"]["size"];
    $import_type    = $_FILES["load"]["type"];

    // Setting target folder
    //$target_dir   = "./Staff Docs";   //<== THIS IS WHERE THE PROBLEM WAS...
    $target_dir     = "./Staff Docs/";  //<== ADD A DIRECTORY SEPARARATOR BEFORE CONCATENATING WITH $loadname...
    $target_file    = $target_dir . $loadname;  // Create target file path

    // Move to import folder
    $allowed        =  array('pdf');
    $ext = pathinfo($loadname, PATHINFO_EXTENSION);

    if (!in_array($ext,$allowed)){
        echo 'Incorrect file type';
    }else{
        move_uploaded_file($loadname_temp, $target_file);
    }

或者,您可以直接在描述 $target_file 的行上添加目录分隔符,如下所示:

 <?php

    // Capture file data

    print_r($_FILES);

    $loadname       = $_FILES["load"]["name"];  // name contains original name
    $loadname_temp  = $_FILES["load"]["tmp_name"];  // tmp_name contains the temporary file name

    // Check file meta data
    $import_size    = $_FILES["load"]["size"];
    $import_type    = $_FILES["load"]["type"];

    // Setting target folder
    $target_dir     = "./Staff Docs";   //<== THIS IS WHERE THE PROBLEM WAS...
    $target_file    = $target_dir . DIRECTORY_SEPARATOR . $loadname;  // Create target file path

    // Move to import folder
    $allowed        =  array('pdf');
    $ext = pathinfo($loadname, PATHINFO_EXTENSION);

    if (!in_array($ext,$allowed)){
        echo 'Incorrect file type';
    }else{
        move_uploaded_file($loadname_temp, $target_file);
    }

【讨论】:

    【解决方案2】:

    您可以更改此代码

    $target_dir = "Staff Docs/";
    

    现在可以正常使用了

    【讨论】:

    • 员工文档与源代码文件在同一目录下。
    • 问题是 load_docs_2.php 中的 print_r($_FILES) 语句正在输出结果:Array ( )。即文件数据没有被传递给 load_docs_2.php
    猜你喜欢
    • 2020-11-05
    • 2011-05-19
    • 2019-07-08
    • 2015-01-28
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多