我使用以下代码将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>
答案 0 :(得分:0)
move_upload_file
不会截断文件。它只会移动上传的内容。如果文件很短,那就是服务器收到的内容。
您应该始终对上传做的第一件事是验证它actually succeeded:
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
die('Upload failed with error code #' . $_FILES['file']['error']);
}
永远不要假设成功。始终检查失败,并将成功视为一个惊喜。