Heim  >  Artikel  >  Backend-Entwicklung  >  PHP-Beispielcode zum Lesen sehr großer Dateien

PHP-Beispielcode zum Lesen sehr großer Dateien

WBOY
WBOYOriginal
2016-08-08 09:19:26828Durchsuche

Das durch die große Datenmenge verursachte Problem besteht darin, dass eine einzelne Datei sehr groß ist und es nicht einfach ist, diese Datei zu öffnen. Verlassen Sie sich nicht auf Notepad, es wird entscheidend abstürzen.

Am Ende letzten Jahres ist die Datenbank mit verschiedenen Website-Kontoinformationen durchgesickert. Ich habe die Gelegenheit genutzt, mehrere Datenbanken herunterzuladen und mich darauf vorzubereiten, von Datenanalysten zu lernen, um diese Kontoinformationen zu analysieren. Obwohl diese Dateninformationen „organisiert“ wurden, ist es sehr nützlich, sie selbst zu studieren, schließlich gibt es so große Datenmengen.
Nummer Das durch die große Datenmenge verursachte Problem besteht darin, dass eine einzelne Datei sehr groß ist und es nicht einfach ist, diese Datei zu öffnen. Erwarten Sie nicht, dass Notepad sofort einfriert. Selbst der MSSQL-Client kann eine so große SQL-Datei nicht öffnen. Als Grund wird angegeben, dass MSSQL beim Lesen von Daten die gelesenen Daten sofort in den Speicher legt. Wenn die Datenmenge zu groß ist und der Speicher nicht ausreicht, führt dies direkt zum Absturz des Systems .
Navicat Premium
Hier ist eine empfohlene Software, Navicat Premium, die recht leistungsstark ist und Hunderte von Megabytes große SQL-Dateien problemlos und ohne jegliche Verzögerung öffnen kann. Darüber hinaus unterstützt diese Client-Software Verbindungen zu verschiedenen Datenbanken wie MSSQL, MYSQL, Oracle usw. Viele andere Funktionen werde ich langsam selbst erlernen.
Obwohl Obwohl Navicat zum Öffnen der 274 MB großen SQL-Datei CSDN verwendet werden kann, ist der Inhalt bedeutungslos und es ist unpraktisch, diese Kontoinformationen abzufragen, zu klassifizieren, Statistiken zu erstellen usw. nur Die Methode besteht darin, die Daten einzeln zu lesen, dann die verschiedenen Fragmente jedes Datensatzes aufzuteilen und diese Fragmente dann im Format von Datenfeldern in der Datenbank zu speichern, damit sie in Zukunft bequem verwendet werden können.
Sehr große Dateien mit PHP lesen
PHP Es gibt viele Möglichkeiten, Dateien zu lesen. Abhängig von der Zieldatei kann die Verwendung einer geeigneteren Methode die Ausführungseffizienz effektiv verbessern. Da die CSDN-Datenbankdatei sehr groß ist, versuchen wir, nicht alles in kurzer Zeit zu lesen. Denn jedes Mal, wenn ein Datenelement gelesen wird, muss es aufgeteilt und geschrieben werden. Dann ist es sinnvoller, die Datei Bereich für Bereich zu lesen, indem Sie PHPs fseek und fread kombiniert verwenden Um einen bestimmten Teil der Daten in der Datei nach Belieben zu lesen, finden Sie im Folgenden einen Beispielcode:

代码如下:

function readBigFile($filename, $count = 20, $tag = "\r\n") {
$content = "";//最终内容
$current = "";//当前读取内容寄存
$step= 1;//每次走多少字符
$tagLen = strlen($tag);
$start = 0;//起始位置
$i = 0;//计数器
$handle = fopen($filename,'r+');//读写模式打开文件,指针指向文件起始位置
while($i < $count && !feof($handle)) {
fseek($handle, $start, SEEK_SET);//指针设置在文件开头
$current = fread($handle,$step);//读取文件
$content .= $current;//组合字符串
$start += $step;//依据步长向前移动
//依据分隔符的长度截取字符串最后免得几个字符
$substrTag = substr($content, -$tagLen);
if ($substrTag == $tag) { //判断是否为判断是否是换行或其他分隔符
$i++;
$content .= "<br />";
}
}
//关闭文件
fclose($handle);
//返回结果
return $content;
}
$filename = "csdn.sql";//需要读取的文件
$tag = "\n";//行分隔符 注意这里必须用双引号
$count = 100;//读取行数
$data = readBigFile($filename,$count,$tag);
echo $data; 


Bezüglich des Werts der von uns übergebenen Variablen $tag Die Funktion ist je nach System unterschiedlich, und auch die übergebenen Werte sind unterschiedlich: „rn“ wird für Windows, „n“ für Linux/Unix und „r“ für Mac OS verwendet.
Der allgemeine Prozess der Programmausführung: Definieren Sie zunächst einige grundlegende Variablen zum Lesen von Dateien, öffnen Sie dann die Datei, positionieren Sie den Zeiger an der angegebenen Position der Datei und lesen Sie den Inhalt der angegebenen Größe. Speichern Sie den Inhalt bei jedem Lesen in einer Variablen, bis die erforderliche Anzahl der zu lesenden Zeilen erreicht ist oder das Ende der Datei erreicht ist.
Gehen Sie niemals davon aus, dass alles in einem Programm wie geplant funktioniert.
Wurzel Gemäß dem obigen Code können zwar die Daten an der angegebenen Position und Größe in der Datei abgerufen werden, der gesamte Prozess wird jedoch nur einmal ausgeführt und es können nicht alle Daten abgerufen werden. Tatsächlich können Sie diese Schleife verwenden, um alle Daten abzurufen Das Hinzufügen einer Schleife, um festzustellen, ob die Datei endet, wird zur äußeren Ebene hinzugefügt. Dies stellt jedoch eine Verschwendung von Systemressourcen dar und kann sogar zu einer Zeitüberschreitung der PHP-Ausführung führen, da die Datei zu groß ist und nicht bis zum Ende gelesen werden kann. Eine andere Methode besteht darin, den Zeitpunkt des letzten Lesens der Daten aufzuzeichnen und zu speichern. Die Position der Nadel, und wenn die Schleife erneut ausgeführt wird, wird der Zeiger an der letzten Endposition positioniert, sodass es nicht erforderlich ist, die Datei in einer Schleife von Anfang bis Ende zu lesen.
Eigentlich habe ich die CSDN-Datenbank noch nicht in die Datenbank importiert, da es ein paar Tage nach dem Leak eine Analyse auf CNBETA gab. Haha, die Aktion ging zu schnell. Wenn Sie sehen, dass andere dies bereits getan haben, haben Sie automatisch keine große Motivation, es zu tun, aber um zu lernen, müssen Sie sich trotzdem die Zeit nehmen, es abzuschließen.

Das Obige stellt den Beispielcode zum Lesen sehr großer Dateien in PHP vor, einschließlich der relevanten Inhalte. Ich hoffe, dass er Freunden, die sich für PHP-Tutorials interessieren, hilfreich sein wird.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn