【问题标题】:Open text file in php and put in database在php中打开文本文件并放入数据库
【发布时间】:2016-05-13 13:23:44
【问题描述】:

我创建了一个简单的代码来打开 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' 中 C:\xampp\htdocs\betolto\index.php 第 60 行

警告: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)!";  

    }
}
?>

【问题讨论】:

  • 闻起来像是对我的许可,和/或你未知形式的东西。
  • 文件夹files是否存在?
  • 试试这个不安全的修复 chmod 0777 -R files/
  • 我在 C:\xampp\tmp 文件夹中有文件夹
  • 但是当你做 move_uploaded_file 是相对于“dir(__ file__)”路径

标签: php file text


【解决方案1】:

打开一个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)!";
        }
    }
?>

【讨论】:

    【解决方案2】:

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

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

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

    $filesPath = dirname(__DIR__);
    

    要找到它指向的位置,请回显 $filesPath 并将其调整为指向正确的文件夹,您希望将文件保存在该文件夹中。..

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

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

    会指向你的 c:\xampp\tmp

    但最好通过打印变量检查正确的位置

    【讨论】:

    猜你喜欢
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-04
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多