我有一个php / sql程序,可以正常使用下面的SQL.txt文件。但是sql.txt只是用于测试目的的几组数据..真正的txt文件是相同的格式但是50mb。当我使用小测试我的代码工作并输出表..但是当我尝试50 MB的文件时,它不会计算,只是在我的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>
用于插入数据的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>";
?>
答案 0 :(得分:1)
php的空白页通常是内存不足。如果您有所需的值,30秒的执行时间将结束您的脚本并在屏幕上发出警告。
请阅读错误日志,你会发现它。 如果你修改了post_max以放入50mb文件很酷但是无论如何都需要处理它。
我建议你把这几行放到php的顶部,以确保代码不会在prematry结束。
ini_set('memory_limit', '0');
ini_set('max_execution_time', '0');
ini_set('max_post_size', '0');
ini_set('display_errors', '1');
如果您将50mb文件及其中一些已经处理到数据库,那么问题不在于post_size,而是内存,时间或两者兼而有之!
此外,添加error_reporting('E_ALL')
将记录任何类型的错误...记住,阅读日志。