我如何捕获“nicefile.csv”并在我从表单提交POST后计算文件中的行?我试过像$csvlinecount = count(file('$_FILES[csv]'));
这样没有结果的东西。原因是我有代码在导入csv值之前和之后计算我的数据库中的行的数量,但我正在整理重复的条目。因此,知道之前的条目数是100还是200之后会很有趣,然后我知道它导入了100个新行。但是,如果我不知道csv文件中的行数,我不知道它在导入期间跳过多少行。
<?php
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
//loop through the csv file and insert into database
do {
if ($data[0]) {
mysql_query("INSERT IGNORE INTO wifi (bssid, channel, privacy, ciper, auth, power, essid, latitude, longitude, first_seen, last_seen) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."',
'".addslashes($data[5])."',
'".addslashes($data[6])."',
'".addslashes($data[7])."',
'".addslashes($data[8])."',
'".addslashes($data[9])."',
'".addslashes($data[10])."'
)
");
}
} while ($data = fgetcsv($handle,1000,","));
//redirect
header('Location: index.php/upload?success=1'); die;
}
//Count after import
$after = mysql_query("SELECT * FROM wifi");
$num_rows_after = mysql_num_rows($after);
//echo stats
echo "Number of rows before - ";
echo "$num_rows_before";
<br>
echo "Number of rows after - ";
echo "$num_rows_after";
//generic success notice
if (!empty($_GET[success])) { echo "<br><b>Result: Your file is imported!</b><br>"; }
//Close connection to databse
mysql_close($connect) ;
?>
答案 0 :(得分:1)
您可以简单地添加另一个变量来计算行数。例如,如下所示(请参阅新的$linesCount
变量):
if ($_FILES[csv][size] > 0) {
//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
$linesCount = 0;
//loop through the csv file and insert into database
do {
if ($data[0]) {
$linesCount ++;
mysql_query("INSERT IGNORE INTO wifi (bssid, channel, privacy, ciper, auth, power, essid, latitude, longitude, first_seen, last_seen) VALUES
(
'".addslashes($data[0])."',
'".addslashes($data[1])."',
'".addslashes($data[2])."',
'".addslashes($data[3])."',
'".addslashes($data[4])."',
'".addslashes($data[5])."',
'".addslashes($data[6])."',
'".addslashes($data[7])."',
'".addslashes($data[8])."',
'".addslashes($data[9])."',
'".addslashes($data[10])."'
)
");
}
} while ($data = fgetcsv($handle,1000,","));
//redirect
header('Location: index.php/upload?success=1'); die;
}
另外,我建议使用mysql_real_escape_string
函数代替addslashes
。我总是遇到很多addlashes函数问题,当mysql_real_escape_string
涵盖更多SQL注入技术时,它只是转义斜杠。
但最好的方法是忘记mysql_ *函数(已经弃用)并使用PDO或mysqli
答案 1 :(得分:1)
使用以下代码可以获得行数
$upload_temp=$_FILES["school_upload"]["tmp_name"];
$fileTemp = $upload_temp;
$lines = file($fileTemp);
echo count($lines);
答案 2 :(得分:0)
在计算行数之前,必须将行拆分为行。在它只是一个很长的字符串之前。
$count = count(explode("\r\n", file_get_contents($_FILES[csv][tmp_name])));
答案 3 :(得分:0)
您的代码:
$csvlinecount = count(file('$_FILES[csv]'));
将函数文件设置为字符串而不是实际文件内容。
尝试:
$csvlinecount = count(file($_FILES['csv']['tmp_name']));
答案 4 :(得分:0)
在不必迭代CSV的情况下执行此操作的最佳方法是使用服务器的Linux后端。来自John Reeve:
$linecount = exec('perl -pe \'s/\r\n|\n|\r/\n/g\' ' . escapeshellarg($_FILES[csv][tmp_name]) . ' | wc -l');
答案 5 :(得分:0)
echo $linecount = count(file($filename));