php sql data / table适用于较小的示例txt文件,但不是完整的50mb txt文件?

时间:2013-12-10 03:16:46

标签: php mysql database

我有一个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>";
?>

1 个答案:

答案 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')将记录任何类型的错误...记住,阅读日志。