PHP:move_uploaded_file部分上传

时间:2015-01-22 18:00:28

标签: php

我使用以下代码将CSV上传到我的服务器并进行处理。偶尔(并且非常随机),上载的文件仅包含原始文件包含的行数的一半(原始文件包含450行,但我的一些上载仅包含~200行)。 move_file_upload()返回true,这是在处理CSV之前发生的。任何想法或想法为什么?是的,权限都是正确的。

// PHP:
public function import() {
    if ($this->request->is('post')) {
        $destination = "./uploaded_csvs/reports/" . time()  . "_" . $this->request->data['Reports']['file']['name'];

        // Copy the report to the server
        if(move_uploaded_file($this->request->data['Reports']['file']['tmp_name'], $destination)) {
            // Success - Process CSV
        } else {
            // Error
        }
    }
}

// HTML:
<form accept-charset="utf-8" method="post" enctype="multipart/form-data" id="ReportsForm" action="/Reports/import">
    <input type="file" id="ReportFile" size="7" value="" name="data[Report][file]">
    <input type="image" src="/img/buttons/save.png">
</form>

1 个答案:

答案 0 :(得分:0)

move_upload_file不会截断文件。它只会移动上传的内容。如果文件很短,那就是服务器收到的内容。

您应该始终对上传做的第一件事是验证它actually succeeded

if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
   die('Upload failed with error code #' . $_FILES['file']['error']);
}

永远不要假设成功。始终检查失败,并将成功视为一个惊喜。