在php中打开文本文件并放入数据库

时间:2016-05-13 13:23:45

标签: php file text

我创建了一个简单的代码来打开txt文件并将值放在mysql数据库中。当我上传文件时,我有错误按摩:

  

警告:move_uploaded_file(files / szoki.txt):无法打开流:   在C:\ xampp \ htdocs \ betolto \ index.php中没有这样的文件或目录   60

     

警告:move_uploaded_file():无法移动   ' C:\ XAMPP \ TMP \ phpF08E.tmp'到' files / szoki.txt'在   第60行的C:\ xampp \ htdocs \ betolto \ index.php

     

警告:fopen(files / szoki.txt):无法打开流:没有这样的文件   或第61行的C:\ xampp \ htdocs \ betolto \ index.php中的目录。无法   打开文件!

我正在使用XAMPP来运行此代码

有什么问题?

我的代码是:

<?php 

if(isset($_POST['read'])){

    $link=mysqli_connect('localhost','root','','szokiadatbazis') or die('could not connect to database'.mysql_error());
    $terminated=$_POST['deli'];
    $file_type=$_FILES['file1']['type'];
    $allow_type=array('text/plain');
    $fieldall="";
    if(in_array($file_type,$allow_type)){

      move_uploaded_file($_FILES['file1']['tmp_name'],"files/".$_FILES['file1']['name']);
      $file=fopen("files/".$_FILES['file1']['name'],"r") or die ("Unable to open file!");
      $tru="truncate table upload_test";
      mysqli_query($link,$tru) or die(mysql_error());
      while(!feof($file)){
      $line = fgets($file);

      $values=str_replace($terminated,"','",$line);
      $sql="insert into upload_test values('$values')";
      mysqli_query($link,$sql);
    }
    fclose($file);//close the file after read
    unlink("files/".$_FILES['file1']['name']);

    }else{
        echo "Please select only text file(.txt file is recomended)!";  

    }
}
?>

2 个答案:

答案 0 :(得分:0)

您必须正确指定上传文件的位置。

"files/".$_FILES['file1']['name']

可能不是正确的位置。 您可以选择保存文件的相对路径或绝对路径。 我建议你使用绝对路径并使用这样的东西:

$filesPath = dirname(__DIR__);

要查找指向的位置,请回显$ filesPath并将其调整为指向要保存文件的正确文件夹。

例如: 如果您从c:\ xampp \ www \ project \ script.php

运行脚本
$filesPath = dirname(dirname(__DIR__)) . DIRECTORY_SEPARATOR . "tmp";

会指向你的c:\ xampp \ tmp

但是通过打印变量来更好地检查正确的位置

答案 1 :(得分:0)

打开cmd并输入

mkdir C:\xampp\htdocs\betolto\files attrib -r -a -s -h C:\xampp\htdocs\betolto\files\

如果在unix上,打开终端并输入:

mkdir 0755 path_to_http_dir/betolto/files

move_uploaded_file自然会从你的 php的tmp目录中获取$_FILES['file1']['tmp_name']

在最后取消链接文件时,我们可以使用sys_get_temp_dir

简化流程

但我忘记了tmp_name已经包含完整路径。

所以此行sys_get_temp_dir() . '/'不是必需的

这样

<?php

    if(isset($_POST['read'])){

        $link=mysqli_connect('localhost','root','','szokiadatbazis') or die('could not connect to database'.mysql_error());
        $terminated=$_POST['deli'];
        $file_type=$_FILES['file1']['type'];
        $allow_type=array('text/plain');
        $fieldall="";
        if(in_array($file_type,$allow_type)){

          $file = fopen($_FILES['file1']['tmp_name'],"r") or die ("Unable to open file!");

          $tru = "truncate table upload_test";
          mysqli_query($link,$tru) or die(mysql_error());

          while(!feof($file)){

             $line = fgets($file);
             $values=str_replace($terminated,"','",$line);
             $sql="insert into upload_test values('$values')";
             mysqli_query($link,$sql);
         }

         fclose($file);//close the file after read

         } else {

            echo "Please select only text file(.txt file is recomended)!";
        }
    }
?>