1

さて、私はここで完全に初歩的なことを見逃しているに違いありません。PHP の fopen 関数を非常に単純に使用していますが、何らかの理由で、何をしてもファイルが開かれません。

これに関する奇妙な部分は、同じスクリプトの別の関数で fopen を使用し、完全に機能していることです。私は両方の関数で fclose を使用しています。だから、私はそれが不正なファイルハンドルの問題ではないことを知っています.

ファイルのパスと対象ファイルの存在も確認しました。

コマンドラインでルートとしてスクリプトを実行しているので、原因がApacheではないことはわかっています。また、ルートとしてスクリプトを実行しているので、アクセス許可が問題ではないことはかなり確信しています。

それで、私はここで何が欠けているのですか?

function get_file_list() {
  $file = '/home/site/tmp/return_files_list.txt';
  $fp = fopen($file, 'r') or die("Could not open file: /home/site/tmp/return_files_list.txt for reading.\n");
  $files_list = array();
  while($line = fgets($fp)) {
    $files_list[] = $line;
  }
  fclose($fp);
  return $files_list;
}

function num_records_in_file($filename) {
  $fp = fopen( $filename, 'r' ); # or die("Could not open file: $filename\n");
  $counter = 0;

  if ($fp) {
    while (!feof( $fp )) {
      $line = fgets( $fp );
      $arr = explode( '|', $line );

      if (( ( $arr[0] != 'HDR' && $arr[0] != 'TRL' ) && $arr[0] != '' )) {
        ++$counter;
        continue;
      }
    }
  }

  fclose( $fp );
  return $counter;
}

要求に応じて、ここに両方の​​機能があります。2 番目の関数には、ファイルへの絶対パスが渡されます。これは、ファイルがそこにあり、パスが正しいことを確認するために使用したものです。

4

1 に答える 1

2

わお!さて、私はそれを理解しました。気まぐれで、ファイル名をトリミングしてみることにしました。どうやら、ファイル名の最後に空白か何かが含まれていたようです。そのため、ファイルを開こうとしたときに、$filename+を探していたためにできませんでした。

毎日何か新しいことを学ぶと思います。

于 2012-06-16T03:32:22.693 に答える