PHP関数定義ページfilegetcsv
を含む、インターネット全体で見つかった次のコードを使用して、CSVファイルを解析し、それを処理しようとしています:
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
print_r($data);
}
fclose($handle);
}
$data =
しかし、このコードでは、次の行で警告の無限ループが発生します。
PHP Warning: fgetcsv() expects parameter 1 to be resource, boolean given in...
- ファイル名にダミー文字を追加すると、別のエラーが発生し、ループが発生しないため、開いているファイルが有効なファイルであることはわかっています。
- ファイルは、完全なアクセス許可を持つフォルダーにあります。
- Mac 上の Excel で生成された CSV を使用していません (風変わりなエラーがあります) 。
- PHPのバージョンは5.1.6なので機能的には問題ないはずです
ファイルが大きすぎたり、形式が正しくないことはわかっています。元のファイルを縮小し続けて問題があるかどうかを確認し、最終的にメモ帳で次のような 2 行しかないカスタム ファイルを作成したからです。
値 1A、値 1B、値 1C、値 1D
まだループしており、データがありません。これが私が現在取り組んでいる完全なコードです(実際にサーバーに無限ループを与えずに無限ループすることを証明できるように、行数よりも大きい変数を使用しています)
if ($handle = fopen($_SERVER['DOCUMENT_ROOT'].'/tmp/test-csv-file.csv', 'r') !== FALSE) {
while ((($data = fgetcsv($handle, 1000, ',')) !== FALSE) && ($row < 10)) {
print_r($data);
$row++;
}
fclose($handle);
}
だから私は本当に2つの質問があります。
1) このループの原因となっているのは、何を見落としている可能性がありますか? 私はそれが本当に「顔と手のひら」のような単純なものだと半分確信しています...
2) この関数の推奨コードが、ファイルが存在するが未知の問題がある場合に無限ループを引き起こす可能性があるのはなぜですか? !== FALSE
などの目的は、そのようなことを防ぐことだと思っていたでしょう。