-1

我正在尝试使用以下代码将通常大约 20,000 个数据的 csv 文件上传到 sql server 数据库中。

此代码很少成功上传,但通常我收到以下错误:

* *警告:fopen() [function.fopen]:第 37 行 C:\Inetpub\wwwroot\file.php 中的文件名不能为空

警告:fgetcsv() 期望参数 1 是资源,在第 39 行的 C:\Inetpub\wwwroot\file.php 中给出的布尔值

警告:fclose():提供的参数不是第 40 行 C:\Inetpub\wwwroot\file.php 中的有效流资源**

<?php
if(isset($_POST['SUBMIT'])) 
{
$filename =$_FILES['sel_file']['name'];
$checkextension = explode(".",$filename);

if($checkextension[1]) == "csv")
{
$filename1 = $_FILES['sel_file']['tmp_name'];
$handle=fopen($filename1,"r");
while($data=fgetcsv($handle,1000000)) { $records = count($data);  } 
fclose($handle);
if($records==15) {
$handle=fopen($filename1,"r");
while (($data = fgetcsv($handle, 1000000,",")) !== FALSE) {
$sqlquery = "INSERT into dataupload (date, field1, field2,
field3, field4, field5, field6, field7, field8, field9,
 field10, field11, field12, field13, field14, field15)
 values ('$data[0]','$data[1]', '$data[2]','$data[3]','$data[4]', 
'$data[5]', '$data[6]', '$data[7]', '$data[8]', '$data[9]',
 '$data[10]', '$data[11]', '$data[12]', '$data[13]', '$data[14]')";
 mssql_query($sqlquery); }
 fclose($handle);
 echo "imported successfuly"; } else { echo "--sorry it is not csv file..."; }
  } }
4

1 回答 1

0

中的临时名称$_FILES['input_name']['tmp_name']不是您发送到服务器的文件的名称。

它是 PHP 生成的一个临时名称,以确保它可以存储在临时文件夹中而不会覆盖其他文件。

$_FILES['input_name']['name']应包含原始名称。

这是$_FILES数组的结构(仅当您上传一个文件时):

array(
    'name'     => 'Original file name.ext',
    'type'     => 'mime/type',
    'tmp_name' => 'random_name',
    'error'    => 
        UPLOAD_ERR_OK ||
        UPLOAD_ERR_INI_SIZE ||
        UPLOAD_ERR_FORM_SIZE ||
        UPLOAD_ERR_NO_TMP_DIR ||
        UPLOAD_ERR_CANT_WRITE ||
        UPLOAD_ERR_EXTENSION ||
        UPLOAD_ERR_PARTIAL,
    'size'     => $file['size'][$key],
);
于 2012-08-21T15:06:05.177 回答