毎日の開発では、CSV(CommaSeparated値)ファイルの処理は非常に一般的なタスクです。 PHPはFGETCSV()などの組み込み関数を提供してCSVファイルを解析しますが、より柔軟なソリューションまたは軽量ソリューションを実現するために、解析ロジックを自分で記述する必要がある場合があります。この記事では、PHPでexploit()関数を使用して、シンプルだが実用的なCSVファイルパーサーを作成します。
exploit()関数は、文字列を配列に分割するために使用されます。これは、CSVファイルを解析するコアアイデアです。各ラインを新しいライン文字で分割し、各行のコンテンツをコンマでフィールドに分割します。
CSVファイルを解析するために、 PARSECSVという関数を作成します。それは引数としてファイルパスを取得し、2次元配列の行アレイを返します。
function parseCSV($filepath) {
if (!file_exists($filepath)) {
throw new Exception("ファイルは存在しません: $filepath");
}
$content = file_get_contents($filepath);
$lines = explode(PHP_EOL, $content);
$data = [];
foreach ($lines as $line) {
if (trim($line) === '') {
continue;
}
$fields = explode(',', $line);
$data[] = $fields;
}
return $data;
}
次のコンテンツを含むdata.csvという名前のファイルがあるとします。
name,email,age
Alice,[email protected],30
Bob,[email protected],25
書いた機能を使用して、その内容を読み取り、出力できます。
$csvFile = 'https://gitbox.net/files/data.csv';
file_put_contents('temp.csv', file_get_contents($csvFile));
try {
$result = parseCSV('temp.csv');
foreach ($result as $row) {
echo implode(' | ', $row) . "<br>";
}
} catch (Exception $e) {
echo '間違い: ' . $e->getMessage();
}
出力:
name | email | age
Alice | [email protected] | 30
Bob | [email protected] | 25
フィールドにコンマが含まれるケース
exploit()関数は、複雑なCSVラインを、複雑な引用符とコンマを含むフィールドに包まれていることを処理できません。この状況は、FGETCSV()を使用することをお勧めします。
ファイルエンコード<br> CSVファイルがUTF-8エンコードされていることを確認してください。そうしないと、 MB_CONVET_ENCODING()を使用して、最初にエンコード変換を実行する必要があります。
セキュリティ<br> 信頼されていないソースからCSVファイルのロードを避け、潜在的なコードインジェクションまたはパストラバーサル攻撃を防止します。
Exploit()関数を使用して、単純なCSVファイルの基本的なCSVパーサーをすばやく構築します。より高い互換性と精度が必要なシナリオの場合、PHPでビルトインFGETCSV()関数を使用することをお勧めします。しかし、軽量のシナリオでは、実装するパーサーも完全に資格があります。
この例を通じて、 exploit()の実際のアプリケーションを学習するだけでなく、CSVファイルを最も簡単に処理する方法をマスターします。外部依存関係を必要としないCSVリーダーを構築したい場合、このアプローチは非常に良い出発点です。