如何让用户上传多个文本文件然后循环遍历它们并在PHP中回显每个文本的内容?

时间:2014-12-05 02:27:01

标签: php html file-upload

我有一个简单的HTML表单,允许用户选择多个文本文件。我想循环遍历它们并回应每一个。我有以下代码:

Upload text document: <br/><br>
<form action="output.php" method="post" enctype="multipart/form-data">
    <input type="file" name="documents[]" size="50" multiple="multiple" />
    <br />
    <input type="submit" value="Upload File" />
</form>

然后在output.php中,当我想回显每个文件并回显其内容时。我试过这段代码:

$filenames = array();

if(isset($_FILES["documents"]))
{
   for($i=0; $_FILES['documents']['name'][$i] != '' ; $i++)
   {
       $filenames[$i] = $_FILES['documents']['name'][$i];

       $myfile = fopen("$_FILES['documents']['name'][$i]", "r") or die("Unable to open file!");

       echo fread($myfile,filesize("$_FILES['documents']['name'][$i]"));

       fclose($myfile);

    }

}

我收到以下错误:

  

解析错误:语法错误,意外'(T_ENCAPSED_AND_WHITESPACE),期待标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)在C:\ wamp \ www \ php_sandbox \ ValenceV1 \ ValenceV1_output.php

如何修复此代码,或者如果有更好的方法,请提供此代码。感谢。

2 个答案:

答案 0 :(得分:1)

为什么用双引号括起变量?删除引号&amp;可以尝试我发布的内容。

$filenames = array();
if(isset($_FILES["documents"]))
{
    for($i=0; $_FILES['documents']['name'][$i] != '' ; $i++)
    {
        $filenames[$i] = $_FILES['documents']['name'][$i];
        $myfile = fopen($_FILES['documents']['name'][$i], "r") or die("Unable to open file!");
                       /*^^^*/                       /*^^^*/ 
        echo fread($myfile,filesize($_FILES['documents']['name'][$i]));
        fclose($myfile);
    }
}

答案 1 :(得分:1)

在您的代码中,该错误是在那些用双引号括起来然后用单引号包装数组索引的行上触发的。如果您希望在不使用move_upload_file()的情况下读取这些文件,请使用tmp_name索引来读取临时文件:

<?php

$contents = '';
if(isset($_FILES['documents'])) {
    $num_of_files = count($_FILES['documents']['name']);
    for($i = 0; $i < $num_of_files; $i++) {
        $tmp = $_FILES['documents']['tmp_name'][$i];
        $contents .= file_get_contents($tmp);
    }
    echo $contents;
}

?>

如果您确定foreach风格直接指向tmp_name

$contents = '';
if(isset($_FILES['documents'])) {
    foreach($_FILES['documents']['tmp_name'] as $tmp) {
        $contents .= file_get_contents($tmp);
    }
    echo $contents;
}