我有一个脚本,可以将CSV文件上传并显示到HTML表格中。 我的问题是当我尝试打开大文件时出错。 我的文件大约是4.5 Mo,有80000行。它适用于小文件,但我得到了
警告:fopen(upload / test.csv):无法打开流:第45行/ var / www / cvs / PHP charts / sb-admin-v2 / test.php中没有此类文件或目录
有大文件 这是我的代码
<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" />
</form>
<?php
//upload
// for set memory limit & execution time
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '180');
if ( isset($_POST["submit"]) ) {
if ( isset($_FILES["file"])) {
//if there was an error uploading the file
if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else {
//if file already exists
if (file_exists("upload/" . $_FILES["file"]["name"])) {
echo $_FILES["file"]["name"] . " already exists. ";
}
else {
//Store file in directory "upload" with the name of "uploaded_file.txt"
$storagename = "test.csv";
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $storagename);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"] . "<br />";
}
}
} else {
echo "No file selected <br />";
}
}
//display
$row = 1;
if (($handle = fopen("upload/test.csv", "r")) !== FALSE) {
echo '<table border="1">';
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
if ($row == 1) {
echo '<thead><tr>';
}else{
echo '<tr>';
}
for ($c=0; $c < $num; $c++) {
//echo $data[$c] . "<br />\n";
if(empty($data[$c])) {
$value = " ";
}else{
$value = $data[$c];
}
if ($row == 1) {
echo '<th>'.$value.'</th>';
}else{
echo '<td>'.$value.'</td>';
}
}
if ($row == 1) {
echo '</tr></thead><tbody>';
}else{
echo '</tr>';
}
$row++;
}
echo '</tbody></table>';
fclose($handle);
}
?>
答案 0 :(得分:0)
当我遇到这个问题时,我使用了https://github.com/knrz/CSV.js的客户端解决方案。工作得很好,并从我的服务器负载。唯一的问题是我不需要将整个CSV上传到我的服务器,一旦解析,只有选择性部分是使用ajax发送的。
如果您只是想在HTML表格中显示数据,这可能是一个非常好的解决方案。