PHP csv上传可以在mac上运行,但不能在windows上运行
我有一个用于wordpress的csv上传插件。我可以在mac上上传文件,但在windows pc上无法上传。csv文件使用utf-8编码在pc上创建PHP csv上传可以在mac上运行,但不能在windows上运行,php,wordpress,csv,Php,Wordpress,Csv,我有一个用于wordpress的csv上传插件。我可以在mac上上传文件,但在windows pc上无法上传。csv文件使用utf-8编码在pc上创建 if (isset($_POST) && !empty($_POST)) { if (isset($_FILES) && $_FILES['csv_file']['size'] > 0 && $_FILES['csv_file']['type'] === 'text/csv') {
if (isset($_POST) && !empty($_POST)) {
if (isset($_FILES) && $_FILES['csv_file']['size'] > 0 && $_FILES['csv_file']['type'] === 'text/csv') {
global $wpdb;
ini_set("auto_detect_line_endings", true);
$start_row = (int) $_POST['start_row'];
/*
* Get CSV data and put it into an array
*/
$fileData = file_get_contents($_FILES['csv_file']['tmp_name']);
$lines = explode(PHP_EOL, $fileData);
$csv = array();
foreach ($lines as $line) {
$csv[] = str_getcsv($line);
}
/*
* Put each row into the database
*/
$x = 1;
$insert_count = 0;
$insert_output = array();
$wpdb->query('TRUNCATE TABLE table');
foreach ($csv as $data) {
if ($x >= $start_row) {
$date = fix_date($data[0]);
$sql = "
INSERT INTO table ( date, column_1, column_2, column_3, column_4, column_5, column_6, column_7 )
VALUES ( '" . $date . "', '" . addslashes( $data[1] ) . "', '" . utf8_encode( $data[2] ) . "', '" . addslashes( $data[3]) . "', '" . $data[4] . "', '" . addslashes( $data[5] ) . "', '" . $data[6] . "', '" . $data[7] . "' )
";
$wpdb->query($sql)/* or die($sql)*/;
$insert_output[] = $insert_count . '. Added: ' . $data[1] . ' - ' . $data[3] . '<br />';
$insert_count++;
}
$x++;
}
echo '<div class="csv_success">Success. ' . number_format($insert_count) . ' rows uploaded.</div>';
} else {
echo '<div class="csv_failure">Please make sure the file you uploaded is a CSV.</div>';
}
}
if(isset($\u POST)和&!empty($\u POST)){
如果(isset($\u文件)&&$\u文件['csv\u文件]['size']>0&&$\u文件['csv\u文件]['type']=='text/csv'){
全球$wpdb;
ini设置(“自动检测线结束”,真);
$start_row=(int)$_POST['start_row'];
/*
*获取CSV数据并将其放入数组中
*/
$fileData=file_get_contents($_FILES['csv_file']['tmp_name']);
$lines=explode(PHP\u EOL,$fileData);
$csv=array();
foreach($line作为$line){
$csv[]=str_getcsv($line);
}
/*
*将每一行放入数据库
*/
$x=1;
$insert_count=0;
$insert_output=array();
$wpdb->query('TRUNCATE TABLE');
foreach($csv作为$data){
如果($x>=$start\u行){
$date=固定日期($data[0]);
$sql=”
插入表格(日期、第1列、第2列、第3列、第4列、第5列、第6列、第7列)
值(“$date.”、“.addslashes($data[1])。”、“.utf8_encode($data[2])。”、“.addslashes($data[3])。”、“$data[4]。”、“.addslashes($data[5])。”、“$data[6]。”、“$data[7]。”)
";
$wpdb->query($sql)/*或die($sql)*/;
$insert_output[]=$insert_count.”。添加:'.$data[1].-'.$data[3].
;
$insert_count++;
}
$x++;
}
回显“成功”。.number_格式($insert_count)。“已上载行”;
}否则{
echo“请确保您上传的文件是CSV文件。”;
}
}
有没有办法让它在windows和mac上运行
干杯
PHP\u EOL是您正在使用的操作系统的换行常量,但是,如果文件是在操作系统上创建的,而您正在另一个操作系统上上载,则可能无法工作。可能尝试分解(“\n”,$x)并将行修剪为\n应该在两者中。检查大小是否为非零不是验证上载的正确方法。失败的上载很容易具有非零大小。在对上载执行任何其他操作之前,您需要检查是否($\u FILES['csv\u file']['error']==UPLOAD\u ERR\u OK)
。而PHP\u EOL
是本地系统的EOL字符。它对于处理跨平台的东西是无用的,因为Mac eol不是PC eol只是出于好奇,你是否检查了public\u html
中的error\u log
文件[有时]?顺便说一句,这不是我的代码我正在调试以前的开发人员代码,看起来像$\u文件['csv\u file']['type']==='text/csv'是问题实际$\u文件['csv\u文件]['type']=='text/csv'在windows中的某些时候,csv的类型将是'application/octet stream',因此也请检查一下
<?php
ini_set('max_execution_time', 0);
$con = mysql_connect("localhost", "", "") or die("not connect");
mysql_select_db("demo") or die("select db");
function readCSV($csvFile){
$file_handle = fopen($csvFile, 'r');
while (!feof($file_handle) ) {
$line_of_text[] = fgetcsv($file_handle, 1024);
}
fclose($file_handle);
return $line_of_text;
}
//Set path to CSV file
$csvFile = 'page.csv';
$csv = readCSV($csvFile);
//echo count($csv);
for ($i=1; $i <count($csv) ; $i++) {
$sql="insert into demo1 (name,bdate,phonenumber ) values('".$csv[$i][0]."','".$csv[$i][1]."' ,'".$csv[$i][2]."')";
mysql_query($sql);
}
echo 'done';
?>