为什么这个文件没有上传?

时间:2013-02-20 13:38:24

标签: php

PHP:

// If the user accessed the page by form submittal
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $filename = $_FILES["file-input"]["name"];
    $extension = pathinfo($filename, PATHINFO_EXTENSION);
    $filesize = filesize($filename);
    $max_filesize = 524288;
// Array to hold errors
    $errors = array();

                if (!$filename) {
                    array_push($errors, "You didn't actually upload anything!");
            }
            else if ($extension != "txt") {
                    array_push($errors, "That's not a valid file-type. Please only use txt files.");
            }
            else if (filesize($filename)) {
                array_push($errors, "The txt file must not be empty. Give us a good story.");
            }

HTML:

<div class="upload-form">
<form action="" method="post" enctype="multipart/form-data">
<div class="upload">
<input type="file" name="file-input">
<span class="input-filename">Select a file...
    </span>
    <input type="button" value="Browse">
</div>

                <input type="submit" name="submit" value="Upload">
                <span class="valid-formats">Valid input: .txt files &lt;= 512 KB</span>
            </form>
        </div>

我收到了错误:

  

警告:filesize():todo.txt中的stat失败   ... / Dropbox的/项目/网站   第34行的Projects / serverside / assignment2 / index.php

     

警告:filesize():todo.txt中的stat失败   ... / Dropbox的/项目/网站   第46行的Projects / serverside / assignment2 / index.php

     

警告:file_get_contents(todo.txt):无法打开流:没有这样的   文件或目录在... / Dropbox / Projects / Website中   第77行的Projects / serverside / assignment2 / index.php

4 个答案:

答案 0 :(得分:2)

该文件不在$_FILES['file-input']['name']中。这将告诉您上传时客户端计算机上文件的文件名。 PHP将文件存储在服务器上的$_FILES['file-input']['tmp_name']中。因此,pathinfo将无效(它要求文件位于磁盘上)。

您可以在点上拆分$_FILES['file-input']['name'],并获取最后一个值:

$parts = explode(".", $_FILES['file-input']['name']);
$extension = end($parts);

答案 1 :(得分:0)

请注意在不可写的文件/目录上使用此功能:您将收到如下警告:

警告:filesize()[function.filesize]:第123行的/var/www/xxx/yyy.php中/var/www/xxx/yyy.php的统计信息失败

答案 2 :(得分:0)

上传的文件路径存储在$_FILES["file-input"]["tmp_name"];中,如果要对文件执行操作,则需要使用该路径。

您目前正在使用$_FILES["file-input"]["name"],这不是您想要的。它包含用户机器上的原始文件名。

答案 3 :(得分:0)

试试吧。

       move_uploaded_file($_FILES['file-input']['tmp_name'],"file_upload_location/".$_FILES['file-input']['name']);

它可能有用。