WordPress サイトの管理セクションに組み込んだ Web インターフェイスがあります。データベース内のいくつかのテーブルをスクレイピングし、データの大きなリストを行ごとに表示するだけです。このデータには約 30,000 行があり、for ループの基本的なエコーで表示されます。ページに 30,000 行すべてを表示すると問題なく動作します。
さらに、完全なデータ行の CSV ファイルをダウンロードするオプションが含まれています。を使用fopen
しfputcsv
て、データ クエリの結果からダウンロードする CSV ファイルを作成します。この機能は以前は機能していましたが、データセットが 30,000 になり、CSV が正しく生成されなくなりました。最初の 200 ~ 1000 行が CSV ファイルに書き込まれ、データの大部分が除外されます。私の場合、適切に生成されなかった CSV は約 10 メガバイトになると見積もっています。次に、すべてが正しく機能しているかのように、ファイルは最初の 200 ~ 1000 行をダウンロードします。
コードは次のとおりです。
// This gets a huge list of data from a SP I built. This data is well formed
$data = $this->run_stats_stored_procedure($job_to_report);
// This is where the data is converted into a csv file. This part is broken
// the file may already exist at that location burn it down if it does
if(file_exists(ABSPATH . "some/path/to/my/file/csv_export.csv")) {
unlink(ABSPATH . "some/path/to/my/file/csv_export.csv");
}
$csv_file_handler = fopen(ABSPATH . "some/path/to/my/file/candidate_export.csv", 'w');
if(!empty($csv_file_handler)) {
$title_array = array(
"ID",
"other_feild"
);
fputcsv($csv_file_handler, $title_array, ",");
if(!empty($data)) {
foreach($data as $data_piece) {
$array_as_csv_line = array();
foreach($data_piece as $object_property) {
$array_as_csv_line[] = (string)$object_property;
}
fputcsv($csv_file_handler, $array_as_csv_line, ",");
unset($array_as_csv_line);
}
} else {
fputcsv($csv_file_handler, array("empty"), ",");
}
// pros clean everything up when they are done
fclose($csv_file_handler);
}
CSV ファイル全体をダウンロードするために何を変更する必要があるかわかりません。これは構成の問題である可能性があると思いますが、そうすべきではありません。この関数は以前は 20,000 の csv 行でも機能していましたが、現在は 30,000 で壊れているため、私はこれを信じるようになりました。追加情報が役立つかどうかお知らせください。以前に巨大な CSV ファイルで問題に遭遇した人はいますか? 助けてくれる人に感謝します。