php sql数据/表格可以使用较小的示例txt文件,但不能使用完整的50mb txt文件?

php sql数据/表格可以使用较小的示例txt文件,但不能使用完整的50mb txt文件?,php,mysql,database,Php,Mysql,Database,我有一个php/sql程序,它可以与下面的sql.txt文件一起正常运行。。但是,sql.txt只是用于测试目的的几组数据。。真正的txt文件格式相同,但为50mb。当我使用小测试时,我的代码工作并输出表。。但当我尝试50MB文件时,它不会计算,只会在localhost/sql.php上显示一个空白屏幕。有没有人建议让一个程序使用50mb,就像它使用1mb txt一样 下面是我较小的sql.txt文件(与实际的50mb文件相比非常小,但格式相同)和php文件,感谢您的指导 sql.txt文件 &

我有一个php/sql程序,它可以与下面的sql.txt文件一起正常运行。。但是,sql.txt只是用于测试目的的几组数据。。真正的txt文件格式相同,但为50mb。当我使用小测试时,我的代码工作并输出表。。但当我尝试50MB文件时,它不会计算,只会在localhost/sql.php上显示一个空白屏幕。有没有人建议让一个程序使用50mb,就像它使用1mb txt一样

下面是我较小的sql.txt文件(与实际的50mb文件相比非常小,但格式相同)和php文件,感谢您的指导

sql.txt文件

<pub>
<ID>0</ID>
<title>Regression Time Warping for Similarity Measure of Sequence</title>
<year>2004</year>
<booktitle>CIT</booktitle>
<pages>826-830</pages>
<authors>
    <author>Hansheng Lei</author>
    <author>Venu Govindaraju</author>
</authors>
</pub>
<pub>
<ID>1</ID>
<title>A Computational Model for Face Location Based on Cognitive Principles</title>
<year>1992</year>
<booktitle>AAAI</booktitle>
<pages>350-355</pages>
<authors>
    <author>Venu Govindaraju</author>
    <author>Sargur N. Srihari</author>
    <author>David B. Sher</author>
</authors>
</pub>    

0
序列相似性度量的回归时间扭曲
2004
CIT
826-830
雷汉生
戈文达拉朱静脉
1.
基于认知原理的人脸定位计算模型
1992
AAAI
350-355
戈文达拉朱静脉
萨尔古尔斯里哈里酒店
大卫·B·谢尔
用于插入数据的php文件

<?php



$mysqli = new mysqli('localhost', 'root', '', 'db1');

if (mysqli_connect_errno()){
printf("connect failed\n", mysqli_connect_error());
exit();    
}


error_reporting(E_ERROR);
$header = '<?xml version="1.0" encoding="UTF-8"?>'."\n<datalist>";
$content = $header."\n".file_get_contents("sql.txt")."\n</datalist>";
$ob = simplexml_load_string($content);
$json = json_encode($ob);
$array = json_decode($json, true);
$alldata = $array["pub"];




foreach ($alldata as $key => $value) { //access all data in loop
$id = $value["ID"];
$title = $value["title"];
$year = $value["year"];
$booktitle = $value["booktitle"];
$pages = $value["pages"];
$authors = implode(",", $value["authors"]["author"]);


$stmt = $mysqli->prepare("INSERT INTO pubs VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param('ssssss',
                   $value["ID"],
                   $value["title"],
                   $value["year"],
                   $value["booktitle"],
                   $value["pages"], implode(",", $value["authors"]["author"]));
$stmt->execute();
printf("%d row insrt\n", $stmt->affected_rows);

echo "<table>
<tr>
<th>ID</th>
<th>title</th>
<th>year</th>
<th>booktitle</th>
<th>pages</th>
<th>authors</th>
</tr>";
echo "<tr>";
echo "<td>" . $value['ID'] . "</td>";
echo "<td>" . $value['title'] .  "</td>";
echo "<td>" . $value['year'] .  "</td>";
echo "<td>" . $value['booktitle'] .  "</td>";
echo "<td>" . $value['pages'] . "</td>";
echo "<td>" . $value['authors'] . "</td>";
echo "</tr>";



}

echo "</table>";
?>
$value){//访问循环中的所有数据
$id=$value[“id”];
$title=$value[“title”];
$year=$value[“year”];
$booktitle=$value[“booktitle”];
$pages=$value[“pages”];
$authors=内爆(“,”,$value[“authors”][“author”]);
$stmt=$mysqli->prepare(“插入pubs值(?,,,,,,,?)”;
$stmt->bind_参数('ssss',
$value[“ID”],
$value[“title”],
美元价值[“年”],
$value[“booktitle”],
$value[“pages”]、内爆(“,”、$value[“authors”][“author”]);
$stmt->execute();
printf(“%d行insrt\n”,$stmt->受影响的行);
回声“
身份证件
标题
年
书名
页
作者
";
回声“;
回显“$value['ID']”;
回显“$value['title']”;
回显“$value['year']”;
回显“$value['booktitle']”;
回显“$value['pages']”;
回显“$value['authors']”;
回声“;
}
回声“;
?>

php中的空白页通常内存不足。30秒的执行时间将结束脚本并在屏幕上警告您是否有所需的值

请阅读错误日志,你会找到它的。 如果您将post_max修改为放入50mb文件,这很酷,但无论如何它都需要处理它

我建议您将这几行代码放在php的顶部,以确保代码不会过早结束

ini_集('memory_limit','0')
ini_集('max_execution_time','0')
ini_集('max_post_size','0')
ini_集('display_errors','1')

如果您将50mb的文件放入数据库,并且其中一些文件已被处理,那么您的问题不是post_大小,而是内存、时间或两者同时存在!
此外,添加
error\u reporting('E\u ALL')
将记录任何类型的错误。。。记住,阅读日志。

在多长时间后出现空白屏幕?我猜大概在30秒左右吧?你正在内存中读取整个50mb,分块读取会更好。你可能正在最大限度地利用内存读取那么多数据。用XML解析来做这件事可能不是可行的办法。有没有链接可以把它读成块,或者对我来说是个更好的主意?用25mb、10mb等进行测试,看看它失败的地方。然后查看是否是错误的数据记录、无效字符或损坏的文件。如果您移动记录,它是否仍会以相同的大小失败?这至少会告诉您是否遇到内存/大小问题。