質問

使用しようとしています filegetcsv CSVファイルを解析して、インターネット全体で見つかった次のコードを使用して、 PHP関数定義 ページ:

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...
  1. 私が開いているファイルは有効なファイルであることを知っています。なぜなら、ファイル名にダミー文字を追加すると、異なるエラーとループがないからです。
  2. ファイルは、完全な権限を備えたフォルダーにあります。
  3. MacのExcelによって生成されたCSVを使用していません(そこには風変わりなエラーがあります)
  4. PHPバージョン5.1.6なので、関数に問題はないはずです
  5. ファイルが大きすぎたり、奇形ではないことを知っています。元のファイルを縮小して問題があるかどうかを確認し、最後にメモ帳でカスタムファイルを作成しただけで、次のような2行以下で作成しました。

    value1a、value1b、value1c、value1d

まだループしてデータを提供していません。これが私が現在使用している完全なコードです(行の数よりも大きい変数を使用して、実際に私のサーバーに無限のループを与えることなく無限にループすることを証明できます)

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 そのようなことは、そのようなものを防ぐことです。

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top