用PHP读取文本文件

用PHP读取文本文件,php,mysql,database,file,Php,Mysql,Database,File,我的代码- $filename = basename($_FILES['file']['name']); $ext = substr($filename, strrpos($filename, '.') + 1); if (($ext=="txt") && ($_FILES["file"]["size"] < 2000000)) { if ($_FILES["file"]["error"] > 0) { echo "Error: " . $_F

我的代码-

$filename = basename($_FILES['file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext=="txt")
&& ($_FILES["file"]["size"] < 2000000))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {$newname = 'news/'.$filename;
     move_uploaded_file($_FILES['file']['tmp_name'],$newname);
     $fileread = $newname;
    //reading a file
$file = fopen($fileread, "r") or exit("Unable to open file!");
//Output a line of the file until the end is reached
while(!feof($file))
  {
      //inserting each data into table
      $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";
      $query = mysqli_query($connect,$insert);
      if($query)
      {
          echo "cool";
      }
  }
$filename=basename($_FILES['file']['name']);
$ext=substr($filename,strrpos($filename,'.')+1);
如果($ext==“txt”)
&&($_文件[“文件”][“大小”]<2000000))
{
如果($\u文件[“文件”][“错误”]>0)
{
echo“Error:”.$\u文件[“file”][“Error”]。“
”; } 其他的 {$newname='news/'。$filename; 移动上传的文件($文件['file']['tmp\u名称],$newname); $fileread=$newname; //读取文件 $file=fopen($fileread,“r”)或退出(“无法打开文件!”); //输出文件的一行,直到到达末尾 而(!feof($file)) { //将每个数据插入表中 $insert=“插入$name(序列、数据、已用)值(“”,'fgets($file),'0')”; $query=mysqli\u查询($connect,$insert); 如果($query) { 呼应“酷”; } }
所以用户上传每行包含数据的文本文件。我想将数据插入数据库,直到执行查询为止


插入数据库的是fgets(资源id#6)-这一直持续到我停止。…它是不受控制的…

您需要将fgets调用从单引号中取出,使其成为字符串

  $insert = "insert into $name (serial,data,used) values('','fgets($file)','0')";
您正在将文本
fgets($file)
插入到数据库中,因为它嵌入到父字符串中。相反,您希望这样做,这也(顺便)消除了sql注入漏洞:

 $string = fgets($file);
 $string = mysql_real_escape_string($string);
 $insert = "insert into ... values ( ..., '$string', ...)";

为什么要逃避它?我不知道该文本文件中有什么,但是如果任何文本包含一个引号,就会导致特定的插入失败,并出现SQL语法错误,现在数据库中缺少一行。

该函数无法在字符串中识别,因此被解释为原始文本

我建议:

//inserting each data into table
$data = fgets($file);
$insert = "insert into $name (serial,data,used) values('', {$data}, '0')";

存在安全风险。据我所知,它会抓取特定文件夹中的所有文本文件并读取它们。任何文本文件都可能有任何内容。Mysql注入可能会发生,Marc B对此进行了解释。你到底为什么要将文件内容存储在数据库中?只需存储文件名(大概是这样的)上传文件…o_Owhoa…你太棒了…工作完美无瑕…再次感谢大家。